XML::FeedとAtom 1.0
いまさら気付いたんだけど、XML::FeedってAtom
1.0に対応していないのね。。
FeedとEntryのissuedとmodifiedが、Atom
1.0ではpublishedとupdatedになっているので、Atomのバージョンを見ながら参照先を変えるとかが必要になると思われ。
feed.nomadscafe.jpの方では、無理矢理対応した。カテゴリーへの対応だけがまだできてない。
Modelクラスの部分を↓だんだんBKの固まりになってきそう。
use XML::Atom::Util qw( iso2dt ); sub process{ my ( $self, $c ) = @_; my %ret; local $XML::Feed::RSS::PREFERRED_PARSER = "XML::RSS::LibXML"; my $feed = XML::Feed->parse(URI->new($c->stash->{uri})); if(!$feed){ $c->stash->{errstr} = XML::Feed->errstr; return } my $pf = DateTime::Format::Mail->new(); my $is_atom10 = ($feed->{atom} && $feed->{atom}->version > 0.3) ? 1 : 0; my %feed; $feed{title} = $feed->title; $feed{link} = $feed->link; $feed{description} = ($is_atom10) ? $feed->{atom}->subtitle : $feed->description; $feed{author} = $feed->author; $feed{language} = $feed->language; $feed{copyright} = ($is_atom10) ? $feed->{atom}->{rights} : $feed->copyright; if($is_atom10){ $feed{modified} = $feed->{atom}->updated ? $pf->format_datetime(iso2dt($feed->{atom}->updated)) : undef; }else{ $feed{modified} = $feed->modified ? $pf->format_datetime($feed->modified) : undef; } $feed{generator} = (ref $feed->generator) ? $feed->generator->{resource} : $feed->generator; foreach (qw(title link description author language copyright modified generator)){ utf8::decode($feed{$_}) unless utf8::is_utf8($feed{$_}); } $feed{entries}=[]; for my $entry ($feed->entries) { my %entry; $entry{title} = $entry->title; $entry{link} = $entry->link; $entry{summary} = ($entry->summary) ? $entry->summary->body : undef; $entry{category} = $entry->category; $entry{author} = $entry->author; #issued,modified if($is_atom10){ $entry{issued} = $entry->{entry}->published ? $pf->format_datetime(iso2dt($entry->{entry}->published)) : undef; $entry{modified} = $entry->{entry}->updated ? $pf->format_datetime(iso2dt($entry->{entry}->updated)) : undef; }else{ $entry{issued} = $entry->issued ? $pf->format_datetime($entry->issued) : undef; $entry{modified} = $entry->modified ? $pf->format_datetime($entry->modified) : undef; } foreach (qw(title link summary category author issued modified)){ utf8::decode($entry{$_}) unless utf8::is_utf8($entry{$_}); } push(@{$feed{entries}},\%entry); } $ret{$c->stash->{uri}} = \%feed; $c->stash->{feed} = \%ret; }
feed.nomadscafe.jpもバージョンあがって、0.04。ソースは
http://nomadscafe.jp/archives/
においてあります。