Read it LaterをRubyで取得する

Tags: [ Ruby ] [ API ] Published: 2011/03/02

ブラウザからログインせずともRILを見たい! 追加したい! ということで。

前準備

  • はじめにapikeyを取得するためにhttp://readitlaterlist.com/api/signup/にアクセスします。*1
  • 必須項目(AppNameとContact Email)を記入し、Generate API Keyします。
  • 取得したapikeyを取っておきます。

記事を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形式では、こんなフォーマットで返ってくるみたい。

{

  "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

   },

...

http://readitlaterlist.com/api/docs/#get

さしあたり、欲しいのは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をやりたい。むしろそっちが目的!

*1: ReadItLaterのアカウントを持っていない場合は、あらかじめ作っておきます。

*2: 順不同でもよい


Author: kk_Ataka / Powered by Jekyll on GitHub Pages