XML::Feed の使い方。

| コメント(0)

Ben Trott 氏作成の XML::Feed を使ってみました。 XML::Feed の特徴は RSS 0.91, RSS 1.0, RSS 2.0 そして Atom に対応していて、これらのデータに統一されたAPIを提供してくれます。

特に気持ちいいのが $feed->modified も $entry->modified も DateTime オブジェクトを返すので $feed->modified->ymd とすれば 2004-12-31 という文字列が 返ってくるところ。

自前で作っていた Blog crawler の処理は XML::RSS 任せだったので Atom に対応してませんでしたが、XML::Feed を使えば 簡単に対応できそうです。以下に簡単なスクリプトを。

#/usr/local/bin/perl

use strict;
use warnings;
use lib qw(lib);

use Blah::Feed::Entry;
use Blah::Feed;
use XML::Feed;

my $feed_url = shift;
my $feed = XML::Feed->parse(URI->new($feed_url))
               or die XML::Feed->errstr;

my $f = Blah::Feed->find_or_create({link => $feed->link});
if (not $feed->modified or $f->modified < $feed->modified->epoch)
{
    $f->set(  format      => $feed->format,
              title       => $feed->title,
            # link        => $feed->title,
              description => $feed->description,
              language    => $feed->language,
              copyright   => $feed->copyright,
              modified    => $feed->modified ? $feed->modified->epoch : 0,
              generator   => $feed->generator);

    $f->update;
}

for my $entry ($feed->entries) {
    my $e = Blah::Feed::Entry->find_or_create({
        link => $entry->link,
        feed => $f});
    if (not $entry->modified or $e->modified < $entry->modified->epoch){
        $e->set(
            title     => $entry->title,
            link      => $entry->link,
            content   => $entry->content->body,
            summary   => $entry->summary->body,
            category  => $entry->category,
            author    => $entry->author,
            guid      => $entry->id,
            issued    => $entry->issued->epoch,
            modified  => $entry->modified ? $entry->modified->epoch : 0,
        );
        $e->update;
    }
}
Comments

コメントする

About Me

このブログは Masayoshi Sekimura によって書かれています。現在はサンフランシスコ市内に在住し Six Apart, Ltd. でエンジニアをしています。 このブログ以外にオンラインでやっている事は qootas.org/sekimura/ で見ることができます。 メールは sekimura+blog@gmail.com までどうぞ。

このブログ記事について

このページは、sekimuraがJanuary 17, 2005 9:19 PMに書いたブログ記事です。

ひとつ前のブログ記事は「RSS Rolling みたいの」です。

次のブログ記事は「rel="nofollow" まとめ」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 4.26