ある、RSSフィード(下の例はAtomフィードだが)からタイトルとリンク先の情報だけを抜き出す処理であれば、Perl で正規表現を使えば以下のように簡単に作成できる。
たった12行だよ。正規表現が簡単に書ける Perl はこういうちょっとした処理を書くと無敵の強さだな。(いや、もっと短く書けるシェルスクリプトはあるかもしれんけど、ソースのわかりやすさが Perl とは雲泥の差であろう。宗教戦争になるからあまり追求せんけど(笑))
use LWP::Simple;
my $feed = LWP::Simple::get('http://blog.netandfield.com/shar/atom.xml');
for(;;) {
if ($feed =~ /(<entry>.*?<title>(.*?)<\/title>.*?<link .*?href=\"(.*?)\".*?<\/entry>)(.*)/s) {
print 'URL: ', $3, "\n";
print 'Title: ', $2, "\n";
$feed = $4;
}
else {
last;
}
}
つーことで、いつもこんな感じで済ませてたのだが、今回は XML::FeedPP モジュールを使ってみた。
他のモジュールとの依存関係がなくて、Perl モジュールをユーザーがインストール出来ない環境でも、XML/FeedPP.pm と XML/TreePP.pm をアップするだけで使えるようなので、それならOKだなっと。
(まあ、うちのテストサーバには普通に CPAN 使ってインストールしたけど:-P)
で、XML::FeedPP モジュール使って上記の処理と同じものを書くと、
use XML::FeedPP;
my $source = 'http://blog.netandfield.com/shar/atom.xml';
my $feed = XML::FeedPP->new( $source );foreach my $item ($feed->get_item()) {
print 'URL: ', $item->link(), "\n";
print 'Title: ', $item->title(), "\n";
}
こうなる。
短っ!たった 7行だ。(笑)
ほんま、Perl4 の頃からずっと Perl 使ってるので、(本当にメジャーなもの以外)モジュール使わずついつい自分で処理を書いてしまうんだけど(LWP モジュール使わずにずっと自前の http 通信関数使ってたしな(^^;)、やっぱモジュールは便利だな。
コメントする