work.log

元エンジニアの備忘録的ブログ

PerlのXML::FeedPPモジュールでRSSフィードを作成する

投稿:2014-08-07 17:51  更新:

Perl の XML::FeedPP モジュールで RSS フィードを作るメモです。

オリジナルの CMS もどきを作ろうとしていて、これに RSS フィードが必要なのでちょっとやってみました。

各種情報はベタ書きしていますがとりあえず、RSS 2.0 形式のフィードを作成してみました。

#!/usr/bin/perl

use strict;
use warnings;
use Encode;
use DateTime;
use XML::FeedPP;

    my $language  = 'ja';
    my $title = 'Example RSS フィード';
    my $url = 'http://example.jp/';

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

    my $item1 = {
           title       => 'タイトルその1',
           link        => 'http://example.jp/1.html',
           description => '<p>あああいいいうううえええおおお</p>',
       };

    my $item2 = {
           title       => 'タイトルその2',
           link        => 'http://example.jp/2.html',
           description => '<p>かかかきききくくくけけけこここ</p>',
       };

    my @items = ($item1, $item2);
    my $feed = XML::FeedPP::RSS->new();

    $feed->language($language);
    $feed->title($title);
    $feed->link($url);
    $feed->pubDate($pubdate);

    foreach my $item (@items) {

        $feed->add_item(
            link        => $item->{link},
            title       => $item->{title},
            description => $item->{description},
            pubDate     => $pubdate,
        );

    }

    print $feed->to_string('UTF-8');

これを実行すると下記のような RSS フィードが出力されます。

<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title>Example RSS フィード</title>
<link>http://example.jp/</link>
<language>ja</language>
<pubDate>Thu, 07 Aug 2014 17:43:24 +0900</pubDate>
<item>
<title>タイトルその1</title>
<link>http://example.jp/1.html</link>
<guid isPermaLink="true">http://example.jp/1.html</guid>
<pubDate>Thu, 07 Aug 2014 17:43:24 +0900</pubDate>
<description>&lt;p&gt;あああいいいうううえええおおお&lt;/p&gt;</description>
</item>
<item>
<title>タイトルその2</title>
<link>http://example.jp/2.html</link>
<guid isPermaLink="true">http://example.jp/2.html</guid>
<pubDate>Thu, 07 Aug 2014 17:43:24 +0900</pubDate>
<description>&lt;p&gt;かかかきききくくくけけけこここ&lt;/p&gt;</description>
</item>
</channel>
</rss>

WordPress の RSS フィードと比べるとやけにスッキリしている感じですがこれで要件は満たしているみたい。

とりあえず基本的な作成はこれで OK。