アキラのITメモ:複数のRSSをまとめるCGIスクリプト
複数のRSSをまとめるCGIスクリプト
本サイトはいくつかのブログから構成されているため、複数のブログのRSSをまとめて、さらに時系列順に並べてくれるCGIが欲しかったのですが、先のエントリで設置したjsRSS++では一つのRSSを読み込んでその内容を表示することしかできませんでした。そこで、複数のRSSを読み込むタイプのCGIがないか探していたのですが、扱いやすそうなものが見当たりませんでした。それなら、RSSを結合するCGIがないのかなと思い調べたのですが、これまたあまり良いのが見つからず、結局、自分で書くことにしました。
調べたところ、FeedPPというPerlモジュールがあり、それを使えば簡単にRSSを扱うことが出来るようです。FeddPP.pmとTreePP.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も勉強しないと。。
Trackback URL: http://akira-site.net/cgi-bin/mt/mt-tb.cgi/405
コメント
コメントを投稿
カテゴリ「Perl」内の記事
サイト内検索
カテゴリ
- Linux
- Linux Tips [13]
- Linux ソフトウェア [3]
- Web技術
- (X)HTML/CSS [4]
- JavaScript [1]
- MovableType [7]
- その他 [3]
- 各種API [3]
- 各種ツール [4]
- Windows
- Win Tips [3]
- Win ソフトウェア [6]
- コネタ [7]
- プログラミング
- 機器 [4]