February 19, 2004

Bloglines の Subscription を RSS から Atom へ

[ XML ]

最近の Movable Type にはデフォルトで Atom フィード用のテンプレートがが含まれるようになったわけですが、RSSとAtomの違いはリーダーが吸収してくれるから、そんなに大きな変更じゃないなあとか思ってました。

が、良く考えてみたら Movable Type のデフォルトの RSS には content:encoded が含まれてないのを忘れてました。(content:encoded 要素については ' RSSリーダーで段落整形させて表示させる方法' などを参照) Atom ならフルコンテンツが HTML マークアップ付きでフィードされてるので、Bloglines なんかで読んだときにも整形されてて幸せです。(livedoor Blog の Atom 対応にも同じことが言えます。)

ということで、Bloglines の登録サイトのうち、Atom を吐いてそうなところは Atom に切り替えようと思ったのですが、いざ調べてみると MT をアップグレードしてない、アップグレードしてても Atom フィードがない、Atom Autodiscovery が設定されてないなど、サイトによって状況はまちまち。一個一個調べるのめんどくさっ! と、こんなときこそ Quick Hack。

Bloglines の Subscription OPML を読み取って、実際に atom.xml を GET してみて 200 が返ってくるか調べ、atom.xml のあるサイトのリストを OPML で書き出すというスクリプトでざっくりと。書き出された OPML を、Bloglines に Import してやることで RSS で登録していたサイトを Atom フィードでの登録へと置き換え完了。(削除は手動ですが。)

#!/usr/local/bin/perl
use strict;
use warnings;
use XML::OPML;
use LWP::UserAgent;
 
my $ua = LWP::UserAgent->new;
my $opml = XML::OPML->new(version => "1.1");
$opml->head( title => 'mySubscription' );
while (<>) {
    my ($title, $xmlurl) =
	m/<outline.*?title="(.*?)".*?xmlUrl="(.*?)".*?>/;
    if ($xmlurl && $xmlurl =~ s/index.rdf$/atom.xml/) {
	my $response = $ua->get($xmlurl);
	$opml->add_outline(title => $title, type => 'rss', xmlUrl => $xmlurl)
	    if ($response->is_success);
    }
}
$opml->save( 'atom.opml' );

ファイル名を s/index.rdf$/atom.xml/ とかしてますが、現在 Atom フィードを吐いてるサイトで登録しているのって、Movable Type、TypePad、ココログ、livedoor Blog でのサイトぐらいで、どれも RSS = index.rdf、Atom = atom.xml という設定になってるので、これで妥協。できあがる OPML も、必要最低限の情報さえ持ってればいいということで、超適当に組み立て。

色気を出して XML::OPML なんて使ってみました。とは言っても、parse は parse したものから outline 要素を抜き取る方法がわからなかったので正規表現でぶっこ抜き、書き出しにのみ XML::OPML を使いました。

で、わざわざ title も抜いて OPML に含ませておいたのですが、Bloglines の Import では title 属性は見てくれないみたいですね。巡回したときのフィードからタイトルを判定するみたいです。それから、ココログの Atom はまだ 0.2 なんだけど、Bloglines は読んでくれるかな。次の巡回時間に結果が分かります。(ココログはデフォルトで RSS に content:encoded が入ってるので Atom にする必要はあんまり無いですけどね。)

Posted by naoya at February 19, 2004 01:03 AM | トラックバック (1)  b_entry.gif
トラックバック [1件]
TrackBack URL: http://mt.bloghackers.net/mt/suck-tbspams.cgi/880
ココログもatomを出している!
Excerpt: 「パンパでガウチョ:livedoor BlogがAtomをフィード」という話があって、そおかぁ・・・と思っていたんですが、 現在 Atom フィードを吐いてるサイトで登録しているのって、Movable
Weblog: あそびをせんとやうまれけむ
Tracked: February 19, 2004 07:13 AM
コメント [0件]