前の投稿(2009年3月10日)で「フィードがどうの」と調べたおかげで、フィードがない日記風のサイトが気になりだして、JavaScript でいろいろ遊んでいた。
確かに自分の blog に「おすすめ blog」としてリストアップしている脇に個別の最新の情報がちょびっと記されるのは素敵だ。
---
フィードがないサイトをフィードに変換するというサービスを調べてみた。検索をかけたらすぐに、
「RSSを配信していないサイトをRSSリーダで読む方法」
と題する blog の記事がヒット。でも、この人、列挙してるだけで技術的な説明が全然ないよ。営業の人なのかな?
そこで挙げられている4つのサービスのうち、サーバを自前で持たずに使えるのは3つ。そのうちで、東京工業大学の奥村研究室以外の2つ (
MyRSS
,
goo フィードメーカー
) は、ほぼ同じ方法だ。以下、いいかげんに説明する:
あるページ(goo の場合は
div ブロックでも可)をユーザが指定する。するとサーバは、指定された範囲内の
A 要素をなるべく頻繁に監視する。ただし、
A 要素を踏んだ先のページは見に行かない。 監視範囲内で、
A タグ
href 属性の右辺 "
RCDATA" の変更、あるいは
A タグの増加(実は両者は区別できない)があったら、それに気がついた日時とともにリストアップして保存する。細かいことだが、既にリストアップされていた "
RCDATA" を持つ
A タグが消滅した場合、リストからは消去する。そうやって作った「新着リスト」は、ユーザが訊けば、フィードという形式で(最大15件とか24時間以内の全てとかを)教えてくれる。 ちなみに、ユーザが何回訊いたって、「新着リスト」自体が更新されてなければ同じリストしか返ってこない。
[goo の場合は、「監視」して(その必要があれば)リストを更新するという作業は1日おきだが、お金を払えば30分おきになるという
あざとい商売もやっている。そもそも、goo では指定ブロックの中から特定のタグを監視除外に指定できる機能があるんだけど、これはよく考えれば(★)仕様自体がバグ。無料の場合は指定できるブロックの総数に制限があり、お金を払えば緩和されるので、それと関連付け誤解させようという
あざとい手口だ。]
東工大奥村研の方法は全然違う。日記風の1ページが対象だ。指定されたページから、まず、年月日の情報らしきパターンとそれに伴う本文らしきテキストを自動的に抽出する。ユーザが訊くと、抽出された日記情報のリストを、フィードの形式にして教えてくれる。なかなかのすぐれものだと思う。しかし、ここは学術的な実験サーバである。だから、指定されたページの情報を、直後の30分間、保持してくれるにすぎない。もし30分以内に日記に変更があったとして、ユーザが訊きかえしても、「抽出」の作業を繰り返したりはしない。つまり、
実用には全然使えない。
ちなみに、MyRSS は10日、 goo は3ヶ月、ユーザが訊かずに放置すると、「監視」すること自体をやめる。長期で僻地へ旅行してフィードが読めなかったというような場合、帰ってきたときこそ「新着」が読みたくなりそうだが、そういう用途には全く向かない。もし、自分は読まないけど、監視はやめさせたくないなら、たとえば、blog のサイドバーの中で MyRSS や goo で作ったフィードを使うとよい。すると、誰かが blog を訪れるたびにサイドバーからフィードが参照され、放置にならない(厳密にいうと、 Blogger のシステムの場合はページの表示を速くするために Blogger 自身がキャッシュしている気配があるが)。あ、
FeedBurner
を使うという手もあるな。
---
「RSSを配信していないサイトをRSSリーダで読む方法」という上の blog のタイトルで、もっとすごい技術のように誤解してしまった。これは私が悪いんだろうな。ごめんなさいね、お馬鹿で。
というわけで、これだけコンピュータの性能が上がったのに、もし有料ならせこいサービスかも、と思ってしまった。
まあ何にせよ、クライアント側で blog に埋め込まれた JavaScript が動いてやる作業ではあり得なかった。(笑)
---
2009/3/17 20:31 追記: けっきょく、 blog 風のページだけど既存のサービスではフィードにできない、そういうページに関しては、 Perl で CGI を書いて個別に Atom フィード対応した。それをこの blog で受け取って右段に表示してある。 CGI が設置できるレンタルサーバってけっこう安いし、 CGI 書くのも難しくなかった。(フィードの元のページのデザインが変わると、CGI をそれに合わせるというメンテナンスが必要、というのが大問題だけど…。)
★: 自然数 (時刻) t で定まる集合 A(t) とする。 A(t+1) と A(t) の「新着」とは差集合 A(t+1)-A(t) だ。オプション「時刻 0 での A(0) の要素 x は新着から除外する」が意味をもつのは、 t=0 より後に x がいったん A(t) に含まれなくなり、訊いた時刻 (にもっとも近い監視時刻) に含まれた場合のみだ。そもそも、「除外する」というユーザの希望をサーバは永遠に保持するのか?3ヶ月で忘れたりしないのか?それに、消滅した
A タグが復活する(そしてそれは新着から「除外」したい)というページ範囲は、おそらく、ユーザが「除外」したくなるような
A タグが他にも 消滅/復活 を繰り返す性質を本来持っているのではないか。だから、今は存在してないけど、将来、現れたときにいちいち「除外」という希望を新規設定しに goo にログインするの?それでは自動でも簡単でもなんでもなくて、面倒くさすぎ。フィードじゃなくて、元ページを自分で巡回したほうがいい。完全に不要な機能だと思う。