FriendFeedではてブのタグ検索をしたい

フィードのアグリゲータは、元の記事のカテゴリに関する情報をどうやって利用するかが鍵だと思った。
たとえばはてブのカテゴリのように検索できたら嬉しいのだが。
問題は、自分のカテゴリづけと、世間一般の分類との類似度のマッチングをどうするかだ。自分が登録していない記事や twitterのつぶやきをどうやってひもづけするか。多少 challenging かも。

超原始的な実装

Friendfeedに新しい投稿があったときに、そのURLをはてブapiになげて、その結果をデータベースにしておくというやり方があるだろう。
参照:はてなブックマークエントリー情報取得APIとは - はてなキーワード

http://b.hatena.ne.jp/entry/json/http://etbe.coker.com.au/2009/02/08/bridging-redundancy/

というURLでアクセスすると、結果がJSONで返ってくる。必要なのは"bookmarks"のそれぞれの要素の中のタグよりは、はてなが付与しているカテゴリとかキーワードの部分なんだけど、、、それが無いじゃん!
げろーん。普通に検索かけて抜き出すのか?何かおかしいな。

({
"related":[
{"
count":57,
"url":"http://linux-ha.org/ja/HomePage_ja",
"title":"The High Availability Linux \u30d7\u30ed\u30b8\u30a7\u30af\u30c8",
"eid":"6077526",
"entry_url":"http://b.hatena.ne.jp/entry/http://linux-ha.org/ja/HomePage_ja"
},{
"count":16,
"url":"http://itpro.nikkeibp.co.jp/article/COLUMN/20070424/269286/",
"title":"\u7121\u7ddaIP\u96fb\u8a71\u5c0e\u5165\u3067\u518d\u8a8d\u8b58\u3057\u305fDHCP\u306e\u201c\u7656\u201d\uff1aITpro",
"eid":"4657845",
"entry_url":"http://b.hatena.ne.jp/entry/http://itpro.nikkeibp.co.jp/article/COLUMN/20070424/269286/"
},{
"count":47,
"url":"http://www.atmarkit.co.jp/flinux/index/indexfiles/heartbeatindex.html",
"title":"\u9023\u8f09\u8a18\u4e8b \u300cHeartbeat\u3067\u304b\u3093\u305f\u3093\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u300d",
"eid":"7199099",
"entry_url":"http://b.hatena.ne.jp/entry/http://www.atmarkit.co.jp/flinux/index/indexfiles/heartbeatindex.html"
},{
"count":26,
"url":"http://www.valinux.co.jp/contents/tech/techlib/eos/drbd_heartbeat/drbd_heartbeat_01.html",
"title":"DRBD+Heartbeat\u3067\u304a\u624b\u8efdHA Cluster\u3000VA Linux Systems Japan",
"eid":"6177621",
"entry_url":"http://b.hatena.ne.jp/entry/http://www.valinux.co.jp/contents/tech/techlib/eos/drbd_heartbeat/drbd_heartbeat_01.html"
},{
"count":67,
"url":"http://www.wbc.co.jp/~drbd/",
"title":"DRBD\u65e5\u672c\u8a9e\u30b5\u30a4\u30c8",
"eid":"518920",
"entry_url":"http://b.hatena.ne.jp/entry/http://www.wbc.co.jp/~drbd/"
}],
"count":"2",
"bookmarks":[
{
"comment":"\u7121中略\u3002",
"timestamp":"2009/02/09 05:45:56",
"user":"kgbu",
"tags":[
"high availability","network","programming","perl","\u7121\u7ddaLAN","\u30b5\u30fc\u30d0\u69cb\u7bc9"
]
},{
"comment":"",
"timestamp":"2009/02/08 19:55:27",
"user":"Ubuntu",
"tags":[
]}],
"url":"http://etbe.coker.com.au/2009/02/08/bridging-redundancy/",
"eid":"12029113",
"title":"Bridging and Redundancy | etbe - Russell Coker",
"screenshot":"http://screenshot.hatena.ne.jp/images/120x90/1/2/e/3/d/257a8bcabff9edb10b5293924ddc916b386.jpg",
"entry_url":"http://b.hatena.ne.jp/entry/http://etbe.coker.com.au/2009/02/08/bridging-redundancy/"
})

うーん、やっぱり「何ができたら嬉しいか」をもうすこし練ってみよう。

use case 1:friendfeedで検索

フィルタとして、friendfeedを使う。そこの検索欄にキーワード(につづく空白文字)を打ち込むと、非同期通信を利用して、リアルタイムに関連キーワードのプールが表示される。あとは、その中から適当なキーワードを拾ってクエリを完成させる。この技術はすでにはてブで実用化されている(商用するにはパテントクリアランスは必須。とはいえ、たとえアイデアが公知であっても、それを実装できるかどうかは別、セキュアに構成するのも全然別の話で、大量のアクセスにもダウンしないようなサービスに仕立てるのはさらにまた別な話だけど(汗)

  • PROS
    • 簡単
    • 使えるキーワードの語彙がかなり偏っていても、最初に当たり障りの無いキーワードから出発すれば、あるものから選択できる
  • CONS
    • 自分(もしくはグループ)のキーワードの偏りから外に出られない
      • ↑でも、もともとfilterされた中から選ぶのだから、それを自覚していれば問題ではない
      • ヒットしなければ、警告を出してから、クエリはgoogleとかへ流せばいい
  • POINT
    • キーワードのプールの生成方法
      • option:何にも考えずに、関連があればすべて出す
      • option:グルーピングしておいて、代表的なものだけ(デンドログラムで上位=rootに近い位置にくるもの)出す
        • 代表的なキーワードの場合、カーソルをその上にhoverさせておくと、詳細なリスト(ツリー?)を出す

検索用のフィードを作る実装(妄想)

はてブのアカウントはRSSフィードにできるから、
friendfeedのエントリをとってきて、それをまずはてブで検索して、キーワードとかをタイトルに組み込んで、Atompubとかでブックマークする。そのブックマークのフィードをfriendfeedに取り込んで、friendfeed検索はそれに対して行う。

  • PROS
    • すごく富豪ちっくにみえるけど、エントリが登録されるたびにしかアクセスは無いから、はてな側の迷惑度は低い。friendfeedからpushしてもらう方は、「リアルタイム更新」のインターフェースを使うことになるだろうか。
    • データベースと検索エンジンを他人持ちにしつつ、どこにいても利用できるサービスが実現できる
  • CONS
    • 公開したくない情報を含む場合、はてブのフィードをfriendfeedから検索させるには認証が必要だ。
    • friendfeedにフィード取り込んだり、そこから検索する必然性はない
    • friendfeedのready madeのソースであるところのはてブだと、titleしか検索対象にならない。
      • 手動で登録して、内容をメッセージとして登録する設定ならいいのだろうか?
        • ダメだった。自分のつけたコメントはでてくるけど、タグは出てこない。(as of 2009/2/10)

やっぱはてなで検索しなよ>自分

特にタグでの検索は、そのインターフェースを「真似して」作る時間が無駄すぎる。
とも思うのだが、自分専用にaggregateしてんだから、その上で操作したいじゃないか。