bitlyをRubyで使う

あるURLについて、ネット上で人々が何を言っているか、話題になっているかを知るのに、最近は、はてなブックマークよりもTwitterのほうがいい感じ。特にbit.lyがいい。

bit.lyのAPIRubyで叩いてみた。どのぐらいRTされているかを表示する。

#!/usr/bin/env ruby
require 'rubygems'
require 'open-uri'
require 'pp'
require 'json'

url = ARGV.shift
api_clicks = "http://api.bit.ly/v3/clicks?shortUrl="
api_lookup = "http://api.bit.ly/v3/lookup?url="
key = "&login=USERNAME&apiKey=LONGLONGAPIKEY"

j = open(api_lookup+url+key).read
res = JSON.parse(j)
# pp res
ghash = res["data"]["lookup"][0]["global_hash"]

j = open(api_clicks+ghash+key).read
res = JSON.parse(j)
# pp res

gclicks = res["data"]["clicks"][0]["global_clicks"] 

print " Total number of retweets: #{gclicks}\n"

URLをコマンドラインで渡す。

% retweet http://heroku.com/
 Total number of retweets: 637
%

JSONをhashにするのはいいんだけど、data->lookup[0]->global_hashというのがひどいことになっている気がする。

Rubyならライブラリもあるだろうと思って検索したら、ちゃんとgemになっている。

% sudo gem install bitly
Password:
Successfully installed bitly-0.5.2
1 gem installed
Installing ri documentation for bitly-0.5.2...
Installing RDoc documentation for bitly-0.5.2...
% 
#!/usr/bin/env ruby
require 'rubygems'
require 'bitly'

# user info

user = "USERNMAE"
apikey = "LONGLONGAPIKEY"

# initialize

Bitly.use_api_version_3
bitly = Bitly.new(user, apikey)

# retrieve the stat

url = bitly.shorten(ARGV.shift)
clicks = bitly.clicks(url.global_hash)
num = clicks["global_clicks"]

print " Total number of retweets: #{num}\n"

bitlyライブラリのコードは、ほどよいサイズと見通しで勉強になる。

require 'json'がエラーになるので30分ぐらい悩んだ。irbでは動くのに。実はrequire 'rubygems'と入れるのを忘れていた。Ruby1.9系ばかり使っていたので、1.8にはそんなお作法があったのをすっかり忘れていた。