アキラのITメモ:複数のRSSをまとめるCGIスクリプト

IT関係、技術関係のメモです。

複数のRSSをまとめるCGIスクリプト

本サイトはいくつかのブログから構成されているため、複数のブログのRSSをまとめて、さらに時系列順に並べてくれるCGIが欲しかったのですが、先のエントリで設置したjsRSS++では一つのRSSを読み込んでその内容を表示することしかできませんでした。そこで、複数のRSSを読み込むタイプのCGIがないか探していたのですが、扱いやすそうなものが見当たりませんでした。それなら、RSSを結合するCGIがないのかなと思い調べたのですが、これまたあまり良いのが見つからず、結局、自分で書くことにしました。

調べたところ、FeedPPというPerlモジュールがあり、それを使えば簡単にRSSを扱うことが出来るようです。FeddPP.pmTreePP.pmをそれぞれダウンロードして、XML/ディレクトリ以下に設置、その後RSSをまとめて時系列順に並べるCGIスクリプトを書きました。スクリプトを以下に示します。見て分かるように、サンプルコードをほとんどそのまま使っているだけなんですが。。

#!/usr/local/bin/perl

use XML::TreePP;
use XML::FeedPP;

my $feed = XML::FeedPP::RSS->new();
$feed->merge( "/home/akira/www/computer/index.xml" );
$feed->merge( "/home/akira/www/castle/index.xml" );
$feed->merge( "/home/akira/www/health/index.xml" );
$feed->merge( "/home/akira/www/book/index.xml" );
$feed->merge( "/home/akira/www/movie/index.xml" );
$feed->merge( "/home/akira/www/cooking/index.xml" );
$feed->sort_item();
my $now = time();
$feed->title( "akira-site" );
$feed->description( "akira-site rss" );
$feed->link( "http://akira-site.net/" );
$feed->pubDate( $now );

my $xml = $feed->to_string( "UTF-8" );

print "Content-type: application/xml\n";
print "Pragma: no-cache\n";
print "Cache-Control: no-cache\n";
print "Expires: Thu, 01 Dec 1994 16:00:00 GMT\n\n";
print "$xml";

使い方としては、以上を例えばrss.cgiというファイル名で保存し、そこと同じ階層にXMLというディレクトリを作成、XML以下にFeedPP.pmおよびTreePP.pmを設置すれば完了です。rss.cgiにアクセスすると、指定したRSSをまとめて時系列順に並べたものが返って来ます。もちろん、それぞれのモジュールをインストールしていれば、rss.cgiのみで動作します。ちなみに、merge部分は以下のようにURLを指定することも可能です。

$feed->merge( "http://akira-site.net/cooking/index.xml" );

現在のところ、jsRSS++と組み合わせてトップページの更新履歴を表示しているのですが、うまく動作しているようです。

ちなみに本スクリプト作成に当たっては以下のようなページを参考にしました。ruby版はなぜかうまく動きませんでした。sakuraのサーバを使ってるのに何故?rubyも勉強しないと。。

カテゴリ: Perl 投稿日: 2006年12月30日 09:49
Trackback URL: http://akira-site.net/cgi-bin/mt/mt-tb.cgi/405

コメント

コメントを投稿





カテゴリ「Perl」内の記事

サイト内検索

カテゴリ

最近のエントリ

関連商品

アバウト

Atom RSS
Powered by MT3.33-ja
合計:total
今日:today 昨日:yesterday