work.log

元エンジニアの備忘録的ブログ

PerlでRSSを解析して必要なデータを取得する

投稿:

Perl で RSS を取り扱う方法のメモ書きです。

この手のツールは沢山溢れていて今更感が漂いまくってますが、自分用のメモとして残したいと思います。

RSS フィードから、「投稿時間」「タイトル」「URL」を抜き出すような処理を Perl でやってみます。

まずはソースから。仮に rss.pl とします。

#!/usr/bin/perl

use strict;
use warnings;
use XML::FeedPP;
use Time::Local;

    my $get  = 1;
    my @url  = (
           'https://worklog.be/feed',
           'http://tidanews.ti-da.net/index.xml',
           'http://www.hamazo.tv/entry_t76.rdf'
       );

    foreach my $url (@url) {

        my $count = 0;
        my $feed = XML::FeedPP->new($url);

        foreach ($feed->get_item()) {

            my $date = substr($_->pubDate(), 0, 10); 
            my $time = substr($_->pubDate(), 11, 5); 
            my $zone = substr($_->pubDate(), 21, 1); 

            if ($zone != 9) {

                ($date, $time) = &convert_jst($date, $time);

            }

            print "Date : $date $time\n";
            print "Title: " . $_->title() . "\n";
            print "URL  : " . $_->link() . "\n\n";

            $count++;
            if ($get <= $count) { last; }

        }

    }

sub convert_jst {

    my ($date, $time) = @_;

    my ($year, $mon, $day) = split('-', $date);
    my ($hour, $min) = split(':', $time);
    my $sec = 0;

    my $utime = timelocal($sec, $min, $hour, $day, $mon - 1 , $year);
    $utime += 3600 * 9;

    ($sec, $min, $hour, $day, $mon, $year) = localtime($utime);
    $year += 1900;
    $mon++;
    
    $date = sprintf("%04d-%02d-%02d", $year, $mon, $day);
    $time = sprintf("%02d:%02d", $hour, $min);

    return($date, $time);

}

exit;

rss.pl を実行すると以下の様な出力になります。

Date : 2013-10-02 16:04
Title: Google AnalyticsのクリックカウントをjQueryで簡単に記録する
URL  : https://worklog.be/archives/2592

Date : 2013-10-02 12:00
Title: 【毒性に注意】防風林や公園でも用いられるオキナワキョウチクトウと果実
URL  : http://tidanews.ti-da.net/e5388938.html

Date : 2013-10-02 17:32
Title: 新入荷!
URL  : http://ohashiya.hamazo.tv/e4830370.html

XML::FeedPP モジュールがいい仕事をしてくれるので、整形くらいしかしていないですが WordPress の feed 情報は日付を UTC で吐き出すのでこれを胡散臭いルーチンで変換しています。

※ 何も考えず単純に +9 しているだけ。一度 unix time にしているのは計算が簡単だからです。

どうもこれは WordPress の仕様らしいです。

あとは取得した文字列をリンク付きに変換するもよし、URL を辿ってスクレイピングするもよしという感じです。

他のブログサービスは良くわからないですが、WordPress は「抜粋」と「全文」のオプションがあるので、記事データが必要な場合はスクレイピングしちゃった方が速いかもです。

簡単ですが、「PerlでRSSを解析して必要なデータを取得する」は以上です。

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間