XML::FeedPP で RSS を出力する

PP は Pure Perl の略のようで、コンパイルする必要がないモジュールのため、レンタルサーバーでも利用することができる。

サンプルコード

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Encode;
use DateTime;
use XML::FeedPP;
use Data::Dumper;

my $language  = 'ja';
my $rss_title = 'RSS 出力サンプル';
my $rss_url   = 'http://www.example.com/';

my $dt = DateTime->now(time_zone => 'local');
my $pubdate = $dt->strftime('%Y-%m-%dT%H:%M:%S%z');

my %item1 = (
    'title' => 'タイトル1番目',
    'link'  => 'http://www.example.com/archives/1/',
    'description' => '<p><a href="http://www.exaple.com/">本文1</a></p>',
);

my %item2 = (
    'title' => 'タイトル2番目',
    'link'  => 'http://www.example.com/archives/2/',
    'description' => '<div class="article"><p>本文2&amp;3<br />改行は大事。</p></div>',
);

my @items = (\%item1, \%item2);
my $feed = XML::FeedPP::RSS->new();
$feed->language($language);
$feed->title($rss_title);
$feed->link($rss_url);
$feed->pubDate($pubdate);
foreach my $item (@items) {
    print Dumper($item);
    $feed->add_item(link => $item->{link}, title => $item->{title}, description => $item->{description});
}
# RSS をファイルに出力
$feed->to_file( "index.rss" );

実行結果

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
    <channel>
        <title>RSS 出力サンプル</title>
        <link>http://www.example.com/</link>
        <language>ja</language>
        <pubDate>Thu, 25 Feb 2010 21:02:59 +0900</pubDate>
        <item>
            <title>タイトル1番目</title>
            <link>http://www.example.com/archives/1/</link>
            <guid isPermaLink="true">http://www.example.com/archives/1/</guid>
            <description>&lt;p&gt;&lt;a href=&quot;http://www.exaple.com/&quot;&gt;本文1&lt;/a&gt;&lt;/p&gt;</description>
        </item>
        <item>
            <title>タイトル2番目</title>
            <link>http://www.example.com/archives/2/</link>
            <guid isPermaLink="true">http://www.example.com/archives/2/</guid>
            <description>&lt;div class=&quot;article&quot;&gt;&lt;p&gt;本文2&amp;amp;3&lt;br /&gt;改行は大事。&lt;/p&gt;&lt;/div&gt;</description>
        </item>
    </channel>
</rss>