もっと簡単なRSSの作成方法があった


以前RSSの作成方法としてXML::RSSPlaggerを組み合わせる方法を記述したが、
実はこれよりももっと容易にフィードを作成・編集出来るモジュールの存在を発見してしまった。
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を使って書いていこう。