Bloglines のメール購読を他の RSS リーダーで購読

Bloglines から他の RSS リーダーへの乗り換えを検討する際に、「この機能が無いから駄目」という足かせになってしまうのが、メール購読機能ではないかと思います。

メールを RSS フィードとして読むという機能で、情報収集手段の一元化に大いに役立ちます。アナウンスメント系のメーリング・リストなど、用件毎に個別のフィードとして管理できて、とても便利なんです。

で、便利に使っているうちに抜け出せなくなってしまうというわけなんですが、これを何とかしよう、というのが以下の試みです。

Bloglines API

Bloglines はいくつかのウェブ API を公開しており*1、フィードを取得するためのものもあります。

呼び出し例:

http://rpc.bloglines.com/getitems?s=SUBID

実はメール購読も、一般のフィードと同じく RSS 形式で提供されます。

ただ、この API コールをそのままフィード URL として利用することはできません。認証が必要だからです。

そこで、SUBID を QUERY_STRING として受け取って、そのフィードを取得して返すような、プロキシ的な CGI を作れば良いんじゃないかと考えました:

http://my.server.com/bl/mailsub.cgi?SUBID
SUBID の取得

SUBID (購読 ID) は Bloglines が内部的に与えているフィード ID で、10 進数値になっています。これは listsubs という API によって得られます。メール購読の SUBID 一覧は、Unix 的に言うとこのようにして:

$ curl -s -u account:pass http://rpc.bloglines.com/listsubs | grep 'xmlUrl=""'

得ることができます。

LDR での試行結果

実際に CGI を作って livedoor Reader にて購読を試みました。が、若干の問題点が浮き上がりました。

まず、そのまま登録しようとするとエラーが出ます。

調べた結果、メール購読の RSS ではフィードの item 要素に link 要素が含まれておらず、これがエラーの原因になってしまうようです。適当に追加して出力してやると登録できました。

もう一つの問題は、やはり新着が反映されるのが遅れるということです*2。巡回の頻度に依ることなので、これはまぁ仕方ないことでしょうね。

最後に、取得した記事を既読にすべきかどうか、という問題があると思います。放ったらかしにするのはマズいでしょうから、完全に乗り換えるのなら既読にするべきだと思います *3

でも、RSS リーダーによるフィード取得の時だけ既読となるようにしたいですよね。

そこで、LDR の User-Agent を調べてみました。

登録時: Feed::Find/0.06
巡回時: livedoor FeedFetcher/0.01 (http://reader.livedoor.com/; 1 subscriber)

この UA の違いが、既読にするかどうかの判断に利用できるんじゃないかと思います。ただ、複数の RSS リーダーでの利用を考慮するなら、もっと別な工夫が必要になるでしょう。

結論

以上の試行により、Bloglines の購読をサードパーティーのサービスで利用可能になることが分かりました。

メールという私的な通信が公開されることに関しては少々抵抗感があるかもしれません。しかし、公開 ML 等の公共性の高い購読であれば、購読取得 CGI を通常のフィード URL として広く公開し、購読を呼びかけるという利用方法も可能なのではないでしょうか?

自前でサーバーと CGI を用意しなければならないというハードルはありますが、これまで乗り換えに躊躇していた方はどうぞ参考にしてみてください。

*1:http://www.bloglines.com/services/api/

*2:Bloglines ではメールを受信した瞬間に表示されます

*3:getitems の後に "n=1" を付けると取得した記事が既読になります