« 朝帰りですが何か? | メイン | 新たなる「挑戦」 - 夢をカタチにする時 »

2006年08月13日

RSS の配信に購読管理機能を

CEEK.JP NEWSはてブニュース では、大量のエントリーがあるにもかかわらず、定期的に更新を行い定数のエントリーを RSS で出力しているに過ぎない。そのため livedoor Reader を初めとするウェブサービス型の RSS Reader では、ユーザによる更新間隔(クロール頻度)の制御ができないため、取りこぼしを大量に発生してしまう可能性が高い(ウェブ型で無い場合も可能性高いが)。

livedoor readerを使ってるんだけど、
はてブニュースとかCEEK.JP NEWSの更新を全件取得することってできるの?

なんかRDFファイルに収録されてる件数分しかとってこないみたいですが。
仕様ってことですかね。

すでにこのような質問が2ちゃんねるに投げられており、

Bloglinesだと、頻繁にRDFにアクセスして逐一未読に蓄積されていくようだがね、
livedoor readerはそうでもないらしい。

というレスが付いているほどである。まぁ。この書き込みを見て考え始めたんだけど。

RSS に期待されているのは、似非プッシュ型配信であると思う。技術的にはプル型配信であるけど、クライアント(ソフトウェア)の技術によって、さもプッシュ型であるかのように見えている。メールのクライアントと同じような感じかな。

似非プッシュ型を進めていくためには、エントリ情報の取りこぼしがあると痛い。取りこぼすのは、技術的に仕方が無いといえばそれまでだけど、何とか改善したい。

ということで、考えてみた。

IP + UserAgent を基に RSS 配信サーバで購読管理をすればいいのでは無いだろうか。アクセス数が増え、大規模になってくると難しい面もあるけど、配信サーバ側で前回読み出した情報を管理してあげれば、かなり Win-Win になれる気がする。

現状のままでクライアントのクロール頻度をあげた場合、無駄なトラフィックが発生してしまう。もちろん If-Modified-Since ヘッダを付加してリクエストを送信していれば、無駄なトラフィックをそれなりに抑えることが出来る。しかし、定数のエントリーを配信している限りは、1件しか更新が無くとも古い19件のエントリ情報も同時に配信してしまう。また、どうやっても取りこぼす可能性を排除できない(CEEK.JP NEWS の場合は、エントリ数が多すぎて RSS に記載されないエントリ情報もある気がします)。

ということで IP + UserAgent による購読管理がよさげな気が。サーバ負荷が気になるけど、動的に RSS を生成しているサービスであれば、あまり変わらない気が。どうなんだろう?

実際の実装は、

・初回は20件配信
・2回目以降は前回のアクセス時より後に更新されたものだけ配信
・購読記録は /refresh を URL に付加してリセット
 → X-Feed-Subscription-Refresh: 1 というリクエストヘッダを付加の方がよさげ

という感じかな。

購読管理のリセット方法を何とかしないといけないなぁ。ヘッダフィールドの追加は、賛同者が居ないとどうにもならんね。前に書いてみた X-Feed-Subscriber は、どこも採用していない(僕も含めてw)。

いきなり仕様が変わるのもアレなので、購読管理機能付の RSS を新たに配信するのがベターっぽいね。つーか FeedBurner にそういう機能が備われば嬉しいかも。

【関連記事】
UserAgent に RSS の購読者数を入れる? (2006年02月14日)

【関連情報】
・RSSリーダーを語るスレ
 http://pc7.2ch.net/test/read.cgi/mac/1098949878/848-

2006年08月13日 20:41 | Technology

トラックバック

コメント

If-Modified-Sinceでよくね?

投稿者 YappoIf-Modified-Since : 2006年08月14日 00:05

>> Yappo さん
普通な If-Modified-Since じゃ無理じゃね?
という趣旨だったんですが、はてブコメントにあった mod_speedyfeed で解決しそう。恥さらしだ…。

投稿者 ceekz : 2006年08月14日 00:13

投稿者 miyagawa : 2006年08月14日 00:15

>> miyagawa さん
初めて知りました。調査不足ですね…。ありがとうございます。

投稿者 ceekz : 2006年08月14日 00:59

最新n件をRSSに置くのではなく、
最低限n時間分をRSSに置けばOK?
あとは、updatePeriodを解釈しろと。

投稿者 IKeJI : 2006年08月14日 01:30

似たようなことを考える人はいっぱいいるもんですね。
ずっと不便で仕様を考えようとしたこともあるけど、RFCにまでなってるとは。いろいろと期待したいな。

投稿者 オオニシ : 2006年08月14日 01:37

>> IKeJI さん
updatePeriod の指定に応じた時間分のエントリ情報を返すようにした方が良いですね。もちろん、クライアントが対応していないとダメだけど。

>> オオニシ さん
昔から考えられているようですが、まだまだ一般化していないようですね。
Movable Type の Feed 配信の方法が、こういった差分形式になれば徐々に一般化すると思ったり。

投稿者 ceekz : 2006年08月14日 13:21