LDR 関連三題: 『ブックマーク数画像取得 API』『Ping』『はてなスクリーンショット』
追記 [20060719]:
13 日に、ping に関して perl のエラーが出る旨の追記をしたんですが、どうもその日以来エラーが出ても出なくても ping が効いていないように思います。早期の調査をお願いしたく、tb を送らせていただきます。
エラーが出ないサイトもあるんですが、未だに多くのサイトで以下の様なメッセージが出力されます:
Can't locate object method "http_status" via package "LDReader::Data::Feed" at /[..]/Crawler.pm line 116, <FILE> line 8.
(行番号は 134 になる場合もあります)
Ping
id:reinyannyan:20060530:p2 で、LDR に登録したはずのフィードがなかなかフィード一覧に現れてこない (新着のみ表示の場合) ことがある、という現象についてお話しました (「44xヶ月前」問題)。
これをかなりの確率で即解消する方法を見つけました。Ping です。
Ping の打ち方なんですが、まず仕様及び実装については antipop - livedoor Reader に ping を送信する Greasemonkey スクリプト を参考にされると良いと思います。
私の場合 ":ping" というコマンドを作り、手で ping を打てるようにしてみました。
このコマンドで、試しに沈んでいたフィードに ping を掛けてみると表に現れてきた、というわけです。
そこからアイデアを広げ、id:reinyannyan:20060530:p2 のコマンドで表示されたフィード一覧に一括して ping が打てるように、":%ping" というコマンドを作ってみました:
register_command("%ping", function() { vi.ping.apply(vi, Ordered.list.map(function(v){return subs_item(v).link})); });
(":ping" を複数の URL を受け取れるように実装した、ということです。タイトルは空で構わないようなので link のみ与えています。もちろん Queue を使ってインターバルを空けるように実装しています)
なかなか良い感じですので、この問題でお困りの方はチャレンジしてみてください。
追記:
今現在 (22時前) は "Can't locate object method..." というエラーが出てピングができない状態です。すぐに直るとは思いますが。
はてなスクリーンショット
各記事のサムネイル画像を表示するのに、SimpleAPI の代わりにはてなスクリーンショットを使ってみることにしました (すぐ止めます)。
内部的には、はてな日記に渡されたURLを[htt:image]に変換して書き込み、はてなにスクリーンショットのURLに変換させたものを本番ページをスクレイピングして変換後のURLをぶっこ抜きます。
つまり、API が公開されていないため、日記に書き込みを行うことでスクリーンショットの URL を得る、ということなんですね。
これを JavaScript でやってみたわけです。
結果は、殆どが "No Image" となるんですが、はてブの RSS の記事なんかはちゃんと表示されました。まぁ想像どおりの結果です。
で、ふと思ったんですが、LDR で閲覧している記事一覧が自動的に日記として投稿されてしまうわけですよね。
もちろんプレビューモードで投稿するように実装したので問題無いんですが、もし実際に投稿される仕様にしたら、面白いでしょうか? それとも迷惑でしょうか? 迷惑だとしたら誰に対して迷惑でしょう…?