もっと簡単なRSSの作成方法があった
以前RSSの作成方法としてXML::RSSとPlaggerを組み合わせる方法を記述したが、
実はこれよりももっと容易にフィードを作成・編集出来るモジュールの存在を発見してしまった。
XML::FeedPPを使えばRSS/ATOMフィードは簡単に作成できてしまうのだ。こんな便利なツールがあるならもっと早く知っておくべきだった……
とはいえ前回のアレはPlaggerの動作確認も兼ねていたのである程度はやむを得ないが。
というわけで早速使ってみる。まずは新規作成……
#!/usr/bin/perl use strict; use XML::FeedPP; use Jcode; my $file = "/var/html/feeds/rss-test.xml"; my $rss; my $item; my $now = time; my $title = "ほげほげ"; my $podcast; $rss = XML::FeedPP::RSS->new(); $rss->title('generate test'); $rss->description('ganerate by XML::FeedPP.'); $rss->language('ja'); $rss->link('http://www.server/'); $rss->pubDate($now); $item = $rss->add_item("http://www.server/test/video1.mp4"); $title = jcode($title)->utf8; $item->title($title); $item->pubDate($now); $podcast = { 'enclosure@url' => "http://www.server/test/video1.mp4", 'enclosure@length' => (stat("/var/html/test/video1.mp4"))[7], 'enclosure@type' => 'video/mp4', }; $item->set(%$podcast); $rss->to_file($file); exit 0;
これで追加は完了。次はアイテムを追加してpubDate順に降順ソートする。
#!/usr/bin/perl use strict; use XML::FeedPP; use Jcode; my $file = "/var/html/feeds/rss-test.xml"; my $rss; my $item; my $now = time; my $title = "ほげほげ"; my $podcast; $rss = new XML::FeedPP($file); $rss->pubDate($now); $item = $rss->add_item("http://www.server/test/video2.mp4"); $title = jcode($title)->utf8; $item->title($title); $item->pubDate($now); $podcast = { 'enclosure@url' => "http://www.server/test/video2.mp4", 'enclosure@length' => (stat("/var/html/test/video2.mp4"))[7], 'enclosure@type' => 'video/mp4', }; $item->set(%$podcast); $rss->sort_item(); $rss->to_file($file); exit 0;
アイテムの追加はこんな感じ。
以前掲示したXML::RSSとコードの構成的には殆ど代わりはないが、
煩わしいUTF8フラグ関連の問題と難関であるフィードのソートをモジュール側が担ってくれるのでとても楽だ。
今後RSS作成・追加関連の処理はXML::FeedPPを使って書いていこう。