Read it LaterをRubyで取得する
ブラウザからログインせずともRILを見たい! 追加したい! ということで。
前準備
- はじめにapikeyを取得するためにhttp://readitlaterlist.com/api/signup/にアクセスします。*1
- 必須項目(AppNameとContact Email)を記入し、Generate API Keyします。
- 取得したapikeyを取っておきます。
- APIの概要はhttp://readitlaterlist.com/api/docs/に載っているので、基本的にはこれを見ながらできる…はず。
記事を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
すると、こんな感じに返ってきます。
json形式では、こんなフォーマットで返ってくるみたい。
{
http://readitlaterlist.com/api/docs/#get
"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
すると表示は、
おお、ニコニコ動画! 次はAddをやりたい。むしろそっちが目的!