2007/05/12
指定したURLに関するソーシャルブックマークのコメントをまとめて取得するAPIをYahoo! Pipesで作った
(管理人日記)
最近お気に入りのYahoo! PipesによるAPI開発。
SBM comments API
URLを指定すると、そのURLに関してのソーシャルブックマークに登録されたときのコメントが取得できます。
データは、
- livedoor クリップ
- はてなブックマーク
- del.icio.us
から取得しています。
呼び出し方
Yahoo! Pipesを呼び出すURLを作成し、httpでリクエストしてください。
RSSで取得する場合は、
http://pipes.yahoo.com/pipes/pipe.run?_id=3J_WV8j_2xGssdY4qWIyXQ&_render=rss&_run=1&url=(URLエンコードしたURL)
JSONで取得する場合は、
http://pipes.yahoo.com/pipes/pipe.run?_id=3J_WV8j_2xGssdY4qWIyXQ&_render=json&_run=1&url=(URLエンコードしたURL)
JSONPで取得する場合は、
http://pipes.yahoo.com/pipes/pipe.run?_id=3J_WV8j_2xGssdY4qWIyXQ&_render=json&_callback=(コールバックメソッド名)&_run=1&url=(URLエンコードしたURL)
こんな感じになります。まあわかるよね。
返されるデータ
前述の通り、RSS、JSON、JSONPで取得できます。各フィールドの説明を簡単に書いておきます。
- title : ブックマーク時刻のエポック秒(utime)と、SBMサービス名。
- link : そのブックマーク自体のURL。
- author : ブックマークしたユーザのID。
- description : ブックマークコメント。
titleフィールドはちょっと特殊なので、もう少し詳しく説明します。
1176660083[hatena]
こんな感じになっています。整数部分が、ブックマークされた時刻のエポック秒(utime)です。[]で囲まれた部分が、SBMのサービス名です。現在のところ、
- [livedoor]
- [hatena]
- [delicious]
のどれかが入ります。
ソース
ちょっと今回は巨大ですが、いちおう画像を貼ります。クリックすると大きな画像が開きます。
仕組みを解説していきます。
- URLを入力 (入れるのはURLだけど、あえてText Inputを使っている)
入力したURLは、livedoorクリップ部、はてなブックマーク部、del.icio.us部にそれぞれ分かれて流されます。
livedoorクリップ部
- 「http://clip.livedoor.com/api/json/comments?link=(入力したURL)」の形式のURLを作る(URL Builder)
- JSONを取得する(Fetch Data)
- RSS2.0に合うように項目名を付け替える(Rename)
- titleを「エポック秒 + [livedoor]」に変換する(Regex)
- linkを「http://clip.livedoor.com/clips/(ユーザID)」にする(Regex)
はてなブックマーク部
- 「http://b.hatena.ne.jp/entry/rss/(URL)」の形式のURLを作る(URL Builder)
- RSSを取得する(Fetch Feed)
- descriptionが何か入力されているものだけ残してあとは消す(Filter)
- RSS2.0に合うように項目名を付け替える(Rename)
- titleを「エポック秒 + [hatena]」に変換する(Regex)
del.icio.us部
- 「url?url=(入力したURL)」の文字列を作る(String Concatenate)
- 「http://del.icio.us/rss/(作った文字列)」の形式のURLを作る(URL Builder)
- RSSを取得する(Fetch Feed)
- descriptionが何か入力されているものだけ残してあとは消す(Filter)
- RSS2.0に合うように項目名を付け替える(Rename)
- titleを「エポック秒 + [delicious]」に変換する(Regex)
それぞれのコメント一覧を取得したら、最後に合体してソートして出力します。
- 合体する(Union)
- タイトルの降順でソート(Sort)
- おしまい(Pipe Output)
ポイント
- 入力されるURLは、その後URLとして使うのではなく、文字列として使ってURLを組み立てるので、Text Inputを使った。
- livedoor クリップは記事ごとのコメント一覧RSSを配信してないらしいので、JSONで取得するAPIを使っている。
- livedoor クリップの時刻がエポック秒で、Yahoo! Pipesはエポック秒を通常の時刻に変換する機能が無さそうだったので、全体をエポック秒に合わせた。
- 作ったエポック秒を保持するいいフィールドが無かったので、titleにした。
- del.icio.usに渡すパラメータurlは、URLエンコードはしない。でもURL Builderを使うと勝手にエンコードされてしまうので、String concatenateを使った。
- 結果をRSSで取得するとRSS2.0の基本要素しか取得できないが、JSONやJSONPで取得すると元のJSONやRSSに含まれているデータにもアクセスできる。
簡単にできるかと思ったんですが、結局4時間くらいかかりました。Yahoo! Pipesや各種ソーシャルブックマークの提供する情報の制約がいろいろあって、悩む箇所が多かった。なんとかなるものですね。
明日、これ使って何か作ります
つまりこのAPIを使うと、あるURLに関して各種ソーシャルブックマークでどんなコメントが付けられているかを一気に取得できるわけです。こういうのに慣れてる人は、すぐにいくつか面白そうな使い道が思い浮かぶと思います。
ちょっと今日はまだ準備中なので具体的な例は示せないんですが、明日には実用的な実装を紹介したいと思います。
- この記事のURI:
- http://muumoo.jp/news/2007/05/12/0sbmcommentsapi.html