RSSフィードをアグリゲートしたい。Perlで。
Plagger....という選択肢が頭をよぎったが、Debian GNU/Linux Sarge だとパッケージが無いのでパス。
簡単なスクリプトで済むのがいいな……ということで探してみたら、XML-RSS-Aggregate - search.cpan.org というのが見つかった。小さいライブラリっぽいので、これを使ってみる。
This module is unmaintained and no longer works very well. The author (and I) recommend that you use XML::Feed now.
XML-RSS-Aggregate reviews - CPAN Ratings (Gamma):
「このモジュールはメンテされてないしちゃんと動かないよ。作者もXML::Feedをお勧めしてる」というレビューがみつかった……まぁ、とりあえず使ってみよう。
Aggregate.pm を見た感じでは、
use strict;
use XML::RSS;
use base 'XML::RSS';
use Date::Parse;
use LWP::Simple 'get';
use HTML::Entities 'encode_entities';
というライブラリ依存。
Debian GNU/Linux Sarge ではこれぐらいインストールしておけばよさそう。
# apt-get install libxml-rss-perl
# apt-get install libtimedate-perl
# apt-get install libwww-perl
で、UTF-8, 改行=LF なスクリプトを記述。
# あいうえお
use XML::RSS::Aggregate;
my $rss = XML::RSS::Aggregate->new(
# parameters for XML::RSS->channel()
title => 'NI-Lab.',
link => 'http://www.nilab.info/',
sort_by => sub {
$_[0]->{dc}{subject} # default to sort by dc:date
},
uniq_by => sub {
$_[0]->{title} # default to uniq by link
}
);
# parameters for XML::RSS::Aggregate->aggregate()
$rss->aggregate(
sources => [ qw(
http://www.nilab.info/zurazure2/index.xml
http://www.nilab.info/cheapjap/index.rdf
http://www.nilab.info/wiki/index.xml
) ],
);
$rss->save("nilab.xml");
"Wide character in print at /usr/share/perl5/XML/RSS.pm line 1615." とか言われつつも何とかひとつにまとめることができたっぽい。
ただ、時系列順に並んでいない。ダメじゃん。
sort by dc:date だからかなぁ。
rss1.0 では <dc:date> を使っていたけど、rss2.0では <pubDate> だからダメなのかな。
XML-RSS-Aggregate のソースコード見てもよくわかんないや。
# 時間があったら XML::Feed 試してみるということで。
tags: zlashdot Perl Feed Perl
Posted by NI-Lab. (@nilab)
コメント
きょうNI-Lab.で、スクリプトパスしたいです。
投稿者: BlogPetのづらねこにゃん | 2006年12月13日 12:11