[Ruby][API]Read it LaterをRubyで取得する
ブラウザからログインせずともRILを見たい! 追加したい! ということで。
前準備
- はじめにapikeyを取得するためにhttp://readitlaterlist.com/api/signup/にアクセスします。[1]
- 必須項目(AppNameとContact Email)を記入し、Generate API Keyします。
- 取得したapikeyを取っておきます。
[f:id:kk_Ataka:20110302190610p:image]
記事をGetする
以下のパラメータを生成し、URLのおしりに?AAA=BBB&CCC=DDD…形式でくっつけてhttps://readitlaterlist.com/v2/getに送ります。[2]パラメータは他にもあるけど、とりあえずこれだけあれば取得はできます。
|*apikey(必須)|今生成したapikey|
|*username(必須)|Read It Laterのアカウント|
|*password(必須)|パスワード|
|*format|レスポンスのフォーマット。jsonかxmlが選択できる。デフォルトはjson|
パスワードが丸見えなのでショルダーハックとかされるとアレですが…。
ソースコード
ここまでをRubyで書いてみました。jsonの解析はTwitterから取得したツイートを解析したときと同じようにsimplejsonparserを使用させていただきました。
require 'uri'
require 'net/http'
# http://rubyforge.org/snippet/detail.php?type=snippet&id=148
require 'simplejsonparser'
require 'pp'
# RIL取得用のURL
url = "https://readitlaterlist.com/v2/get"
# アカウント名とパスワード
username = "kk_Ataka"
password = PASSWORD
# apikey
apikey = APIKEY
# format json or xml
format = "json"
# パラメータ作成
param = "username=#{username}&password=#{password}&apikey=#{apikey}&format=#{format}"
# GETする
uri = URI.parse(url)
proxy_class = Net::HTTP::Proxy(ARGV[0], 8080)
http = proxy_class.new(uri.host)
http.start do |http|
res = http.get(uri.path + "?#{param}")
if res.code == "200" then
json = res.body
# jsonparseでparseしてもらう
jsonparse = JsonParser.new.parse(json)
pp jsonparse
else
print "#{res.code}\n"
end
end
すると、こんな感じに返ってきます。
[f:id:kk_Ataka:20110302190611j:image]
json形式では、こんなフォーマットで返ってくるみたい。
{
”status”:“1”, // 1=normal, 2=no changes since your provided ‘since’
”since”:“1245626956’, // timestamp of this response
”list”:{
”93817”:{
”item_id”:“93817” // unique id identifying the url
”url”:”http://url.com”,
”title”:“Page Title”,
”time_updated”:“1245626956”, // time the item was last added/changed
”time_added”:“1245626956”, // time item was added to list
”tags”:“comma,seperated,list”,
”state”:“0”, // 0=unread, 1=read
},
…
さしあたり、欲しいのはlist内のurl,titleくらいなんだけど、これどうやって取得するんだろう。うまい方法が思い浮かばなかったので、一旦listのkeyを全部取得してkey分forを回すというあまりイケてない方法に。parse以降をこう変えました。
# jsonparseでparseしてもらう
jsonparse = JsonParser.new.parse(json)
# listのキーを取得
keys = jsonparse["list"].keys
for i in 0..keys.length-1
print_url = jsonparse["list"][keys[i]]["url"]
print_title = jsonparse["list"][keys[i]]["title"]
print "#{print_title} ■ #{print_url}\n"
end
すると表示は、
[f:id:kk_Ataka:20110302192703p:image]
おお、ニコニコ動画! 次はAddをやりたい。むしろそっちが目的!
[1] ReadItLaterのアカウントを持っていない場合は、あらかじめ作っておきます。
[2] 順不同でもよい