Read it LaterをRubyで取得する

[Ruby][API]Read it LaterをRubyで取得する

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

前準備

[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

   },

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

すると表示は、

[f:id:kk_Ataka:20110302192703p:image]

おお、ニコニコ動画! 次はAddをやりたい。むしろそっちが目的!

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

[2] 順不同でもよい

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2011/12/27 [Evernote] [Ruby] [API] EvernoteのAPIをRubyから叩きたい
  2. 2011/03/08 [Ruby] [API] RubyではてなのWSSE認証をしてはてブにブクマをポストする
  3. 2011/01/23 [Ruby] [Twitter] [API] RubyでTwitterにツイートをキメてみる
  4. 2012/05/21 [SlideShare] [Heroku] [Ruby] [API] SlideShareのAPIを叩いてスライドをDLするRubyスクリプトをHerokuにデプロイした
  5. 2010/12/07 [Ruby] [Twitter] [API] RubyでTwitterのタイムラインを取得してみる
  6. 2010/11/30 [Ruby] [Twitter] [API] RubyでTwitterのOAuth認証をしてみる その2
  7. 2010/11/21 [Ruby] [Twitter] [API] RubyでTwitterのOAuth認証をしてみる
  8. 2011/12/26 [Ruby] [Haml] [Sinatra] SinatraでHaml入門
  9. 2011/12/21 [Ruby] Ruby実行時のオプションをよろしく解析してくれるoptparseを使ってみる
  10. 2011/12/15 [Ruby] [Solaris] [Redmine] RedmineとApacheを連携させるPassengerをインストールできなかった
  11. 2011/12/07 [Ruby] ZenTestでRSpecを自動実行できるようにした
  12. 2011/12/05 [Ruby] [Redmine] RedmineでプラグインインストールしたらTemplateErrorが出た
  13. 2011/12/04 [Ruby] [Mac] [Unix] 複数のRuby環境の管理・切替ができるrvmをインストールした
  14. 2011/11/30 [Ruby] [Heroku] rvm環境でRuby実行時にReadlineエラーが起きた時の対処法
  15. 2011/11/29 [Ruby] pikでインストールしたRubyでbundle exec rubyしたらエラーになった 解決編