ホワイト日記

柏での日々をつれづれなるままに書き記したいと思います.

Atom feedの解析

2006-10-21 22:38:54 | 研究
英語記事の収集に関してAtom feedの解析についてのメモ.

Atomの解析に関しては自前でAtomフィードをXMLとして解析した方が
良いかと思ったが,調べてみるとXML::Atom::Feed という
Perlモジュールが良さそうだ.

http://search.cpan.org/~miyagawa/XML-Atom-0.23/lib/XML/Atom/Feed.pm


↓のような感じでAtom feedからデータを取り出せる.
#!/usr/local/bin/perl

use XML::Atom::Feed;

my $feed = XML::Atom::Feed->new('test.xml');

print $feed->title, "n";
printf "ns: %sn", $feed->ns;
printf "lang: %sn", $feed->language;
printf "updated: %sn", $feed->updated;
printf "(modified: %s)n", $feed->modified;
print $feed->link, "n";
printf "generator: %sn", $feed->generator;
printf "id: %sn", $feed->id;
printf "%sn", "-"x25;

foreach my $ref ($feed->entries()) {
printf "link: %sn", $ref->link()->href;
printf "title: %sn", $ref->title;
printf "published: %sn", $ref->published;
printf "updated: %sn", $ref->updated;
printf "(created: %s)n", $ref->created;
printf "(issued: %s)n", $ref->issued;
printf "id: %sn", $ref->id;

#
# name要素
#
# <author>hogehoge</author>の場合
printf "tauthor: %sn", $ref->author()->elem()->getFirstChild()->getValue() if $ref->
author->name eq "";
# 本来は<author><name>hoge</name><email>hoge@hoge.net</email><uri>http://...</uri></author>となる.
printf "tname: %sn", $ref->author()->name();
printf "temail: %sn", $ref->author()->email();
printf "turi: %sn", $ref->author()->uri();

#
# summary
#
printf "summary: %sn", $ref->summary;
#
# content
#
printf "ns: %sn", $ref->content()->ns;
printf "type: %sn", $ref->content()->type;
printf "body: %sn", $ref->content()->body;

printf "n";
}

このほかAtom feedを解析するモジュールにはいくつかあるようだ.

XML::FeedPP
http://www.kawa.net/works/perl/feedpp/feedpp.html
悪くはないが,content部分にhtmlが含まれていると
うまくcontentを取り出せないようだ.

XML::Atom::Syndication::Feed
http://search.cpan.org/~tima/XML-Atom-Syndication/lib/XML/Atom/Syndication/Feed.pm
このモジュールもAtom feedを読み込んで解析できるが,どうもいまいち.
使い方としては,
use XML::Atom::Syndication::Feed;
my $feed = XML::Atom::Syndication::Feed->new('test.xml');
print $feed->entries;
という形でエントリリストを読み込めるはずだが,読み込めない.
テストに使っているatomファイルが良くないのだろうか?
ちなみにXML::Atom::Syndication のバージョンは0.94

何故Atom feedの解析で手間取っているかというと,
各ブログサイトで提供しているAtom feedが必ずしも最新の仕様を
参照しているわけでなく,昔の仕様に基づいて提供している場合もあるから.
さまざまなバージョンが乱立するのは仕方ないけれど,面倒だなあ.

ちなみにAtom syndication formatはRFC4287として登録されている.
http://www.kanzaki.com/memo/2005/12/06-1 (The Web KANZAKIさんの記事より)

http://ietfreport.isoc.org/idref/rfc4287/ (RFC4287, 現在の仕様)
http://www.mnot.net/drafts/draft-nottingham-atom-format-02.html (以前の仕様 ver 0.3)
http://www.atomenabled.org/developers/syndication/ (Atom仕様の説明)
ジャンル:
ウェブログ
この記事についてブログを書く
Messenger この記事をはてなブックマークに追加 mixiチェック シェア
« 柏キャンパス一般... | トップ | 英語記事収集:英... »

コメント

コメントはありません。

コメントを投稿

現在、コメントを受け取らないよう設定されております。
※ブログ管理者のみ、編集画面で設定の変更が可能です。

トラックバック

現在、トラックバックを受け取らないよう設定されております。
※ブログ管理者のみ、編集画面で設定の変更が可能です。

あわせて読む