はてなAPIを使ってみる
はじめての WEBAPI
というわけで、良くわからないまま使ってみた。
ソースコード
とりあえず動けば良いので可読性云々はぜんぜん考慮していない。
前半がページ単位での被はてブ数取得処理で、後半がサイト全体に対するはてブ数。
require 'xmlrpc/client' client = XMLRPC::Client.new2("http://b.hatena.ne.jp/xmlrpc") urls = [ 'http://d.hatena.ne.jp/', 'http://d.hatena.ne.jp/seiunsky/', 'http://d.hatena.ne.jp/seiunsky/20070328/', 'http://d.hatena.ne.jp/seiunsky/20070328/1175100054', ] begin flag, result = client.call2('bookmark.getCount', *urls) result.each do |url, num| print "#{url} -> #{num}\n" end rescue end puts "--------------" url = 'http://d.hatena.ne.jp/seiunsky/' begin flag, count = client.call2('bookmark.getTotalCount', url) print "#{url} -> #{count}\n" rescue end
結果は
http://d.hatena.ne.jp/ -> 115
http://d.hatena.ne.jp/seiunsky/ -> 0
http://d.hatena.ne.jp/seiunsky/20070328/1175100054 -> 1
http://d.hatena.ne.jp/seiunsky/20070328/ -> 0
- -
おお、とれてる!
しかし、疑問が
むかし、年間のはてブ数を集計した人がいた気がするんだけど、あれはどうやってやったんだ?
技術メモ
はてブの仕様がわかんないよ→はてなブックマーク件数取得API
Ruby で XMLRPC よくわかんないよ→Rubyist Magazine - 標準添付ライブラリ紹介 【第 1 回】 XMLRPC4R
Ruby で call してもうまくいかないよ→ '*' を忘れていませんか?(Rubyリファレンスマニュアル - FAQ::変数、定数、引数)
ちなみに
おれは XMLRPC で call する時の url の引数にアスタリスクを付けなかったばっかりに20分くらいハマった。……まさか可変長引数が call する時の引数として必要だったとは*1。
追記
年間のはてブ取得はこうやったらできた(ちゃんと調べてないけど、こんなもんだろう)
上記で書いたスクリプトのサイト全体に対するはてブ数をカウントする部分をちょっと改良
url = 'http://d.hatena.ne.jp/seiunsky/' begin for i in 0..7 flag, count = client.call2('bookmark.getTotalCount', url+"200#{i}") print "#{url}200#{i} -> #{count}\n" end rescue end
結果は
http://d.hatena.ne.jp/seiunsky/2000 -> 0
http://d.hatena.ne.jp/seiunsky/2001 -> 0
http://d.hatena.ne.jp/seiunsky/2002 -> 0
http://d.hatena.ne.jp/seiunsky/2003 -> 0
http://d.hatena.ne.jp/seiunsky/2004 -> 0
http://d.hatena.ne.jp/seiunsky/2005 -> 0
http://d.hatena.ne.jp/seiunsky/2006 -> 29
http://d.hatena.ne.jp/seiunsky/2007 -> 9
おおお、できてる!
……っつーかさ、改めてみるとはてブ数の少なさが悲しさを誘う……(´Д`)
これで「よーし、明日からはてブAPI叩きまくっちゃうぞ☆」って言うじょしこうせいとか、はてブの少なさにちょっとキュンときちゃったじょしこうせいはこのページをはてブしまくると良いと思うんだぜ?
*1:おぼろげな記憶でアスタリスクが可変長引数だった覚えはあったんだけど、シンプルに作るうえで必要ないかと思って外してたのだった