hatena2opml
例によってコピペの産物。
はてなアンテナが出力するLIRS形式のリストからひたすら RSS Auto Discovery し、OPMLで出力します。
#!/usr/bin/perl use strict; use HTML::TokeParser; use XML::OPML; use LWP::Simple; use URI; our $HATENA_ID = 'tnx'; our $LIRS_URL = "http://a.hatena.ne.jp/$HATENA_ID/source?mode=lirs"; my $lirs = get($LIRS_URL) or die $!; my $opml = XML::OPML->new(version => "1.1"); $opml->head( title => "Hatena::Antenna::$HATENA_ID", ownerName => $HATENA_ID, ); for (split(/\n/, $lirs)) { my @array = split(/,/); my $base = $array[5]; my $title = $array[6]; my $rss = undef; my $html = get($base) or next; my $parser = HTML::TokeParser->new(\$html); while (my $token = $parser->get_tag("link")) { my $attr = $token->[1]; if ($attr->{rel} eq 'alternate' && $attr->{type} eq 'application/rss+xml') { $rss = $attr->{href}; last; } } if ($rss) { $opml->add_outline( title => $title, text => $title, type => 'rss', htmlUrl => $base, xmlUrl => URI->new_abs($rss,$base), ); } # else { # $opml->add_outline( # title => $title, # text => $title, # type => 'html', # htmlUrl => $base, # ); # } } print $opml->as_string();
$ hatena2opml.pl > hatena.opmlな感じで。出力後はUTF-8に変換が必要です。
お分かりのとおり実行にはやたら時間がかかります。
RSSを配信していない、若しくはオートディスカバリーできないサイトについて「type="html"」という形で出力したのですが、bloglinesに突っ込んだら挙動がおかしくなってしまって、編集とかできなくなってしまいました。うわーん。(上のソースではコメントアウトしてます)