必要なデータは自分でDB化する方が良いかも

この辺読んで。

entrylist の仕様 – naoyaの日記 – naoyaグループ

僕も、
「データなんかRSSやページをスクレイピングするか、Atom Feedで取得すればいいやー」
と考えていた時期がありました。


でもさー思ったんだけどさーやっぱり、
データを際限なく提供ってのは出来ないわけですよ、当たり前だけど。
なんつーか、容量的にもリソース的にも限界ってもんがあってですね、
例えばはてなブックマークのAtomFeed、すんげー便利ですけど、
あれ使って日付指定で自分のブックマーク取得しようとしても20件までしか取れないんですよね。


普通の人が1日どれくらいの数ブックマークしているのかわからないけど、
とりあえず自分のブクマ傾向を見ると、それを超えてるときは結構あって(直近だと2/6)、
そうすると1日1回まとめてるエントリを起こすときに取得してたんでは、
21件から先のブックマークが落ちちゃうのね。エントリから。

これってなんとかならんかなーと考えてみたりもしたんだけど、
でも結局のところそれをはてなに求めたところで仕方がないというかキリがないというか。
僕は多分、50件くらいに拡大してくれればよほどのことがない限り大丈夫だけど、
もっと広範な結果を求めてる人とかだったら、100件とか件数指定させろとかなるかも。
それはねーしんどいことなんで。


つーわけで、現在試験中の解決策は、1時間に1回cron回して、
AtomFeedで最新の20件を取得して、自分のサーバのDBにぶち込むこと。
既に登録されていれば更新するし登録がなければ新規に追加する、と。

これなら、1時間に20件以上ブクマとかお前機械で出来てるのか?っていう
手技を見せない限りは、きちんとエントリとして作れるわけで。
テスト運用を初めておおよそ2ヶ月ちょっとが過ぎていますが、
これと言って問題なく蓄積されているようです。

まぁ、エントリとして形にする方は無精こいてまだやってませんけど。
(もしやるとしたら、PHP文1行だけ書くようなエントリを毎日上げるだけでOKになるかな)



結局さーデータを提供する/しない、どういう形で提供するってのは、
サービス側の自由であって、それに対して提案はともかく文句を言っても、
ある程度仕方がないんだなーという感じ。提供されているものを上手いこと使って、
それで自分で何とか出来る方法を考えるしか無いんだよねーと。

だから本当に大事な何かがある場合には、仕様変更とかもあるだろうし、
ある程度自分でデータを持たないとダメかもしれんねーと思った。

ま、それはデータを取ることが好きな人間が考える、偏った考えかもしれないけどさ。





ちなみに冒頭のナオヤさんのエントリについて書いておくと、
はてなブックマークの絞り込み(例えば人気エントリ)は、
URLがドキュメントルートだった場合には最新10,000件までしか処理しない、
URLがドキュメントルートでない場合には全エントリを処理するということのようです。

この話の元ネタのid:myrmecoleonさんが上げていた、
ニコニコ動画の人気エントリの話が例としてはわかりやすくて、
例えばニコニコ動画の人気エントリを調べようと思って、
「http://www.nicovideo.jp」で検索をすると、比較的最新のものしか表示されません。



これはつまり、「http://www.nicovideo.jp」がドキュメントルートだからですね。


一方で、ニコニコ動画の“動画の”人気エントリを調べたいなら、
「http://www.nicovideo.jp/watch」でも調べられるはずなので試してみると、
こんな感じになって結果がだいぶ違います。



これは上の理屈で言えば全件取得のはずなので、
真にオールタイムの人気エントリということになるはずです。
試しに10,000件以上遡れるかやってみると、きちんと表示されます。

http://b.hatena.ne.jp/entrylist?sort=count&url=http%3A%2F%2Fwww.nicovideo.jp%2Fwatch&of=10020


なるほど、わかりやすいですね。
(知らなきゃ戸惑うだけだけどね)


ニコニコ動画の場合は、こういうURL(間にwatchが入る)だったからできるけれども、
ブックマーク中で嘆かれているように、
例えばはてなダイアリーの中で最も人気がある…とかはできません。
何でかというと、それを調べようとすると、
ドキュメントルート(http://d.hatena.ne.jp/)を指定しなくてはいけないから…ですね。

まぁ確かにそのデータを提供したとして、それがどれくらいメリットあるかと言われると、
無い…っていうか、気になったときに見てみたい程度の意味しかないわけで、
「集合知」と言っても賞味期限切れのトップエントリに何の意味がある?とかも思うわけで、
この処理もある程度は理解できる…かなぁ。


もしニュースサイトをこれから作る人で、はてなブックマークも意識するのであれば、
エントリのパーマリンクは間にもう一個ディレクトリ入れて、

http://hoge.com/article/post-139.html

とかになるようにした方が良いのかもしれませんね。

なんかバッドノウハウな感じがして仕方がないですけどね(笑)
負荷の問題は、マジで仕方がないと思います。