ruby の googlereaderライブラリ で Google Reader API を使ってみた
結構便利。
インストール
最初はgooglereaderライブラリをインストール。
$ sudo gem install googlereader
認証
これだけでOK. これはgooglreaderライブラリじゃなくて一緒にインストールしたgooglebaseライブラリの機能ですね。
require 'rubygems' require 'google/reader' require 'pp' config = { :email => "example@gmail.com" , :password => "mypassword" } pp Google::Base.establish_connection(config[:email], config[:password])
結果こんな感じに。
warning: peer certificate won't be verified in this SSL session #<Google::Base:0x2b5ed7901210 @email="example@gmail.com", @password="mypassword", @sid= "DQAAAHkAAADmvlp1cjxsJvuR_C4nHXxHCfPC7AC4pAGUkMkd-qIp7fkcHyQB8ILAdR_eS_MTd86ZQyu-1CjMAPchL0fNXFgWsqEl0hCZ_BHNh2fpbqdsAK4yLP2sNozQyih60lxxDI7GkyV_WEDED5j3mYAML8xmf9KCl1b8NpChVZNwqDSROw">
SSLの警告
でもwarningがでてた。以下を追加すればいいみたい。
http://www.5dollarwhitebox.org/drupal/node/64
class Net::HTTP alias_method :old_initialize, :initialize def initialize(*args) old_initialize(*args) @ssl_context = OpenSSL::SSL::SSLContext.new @ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE end end
Googleアカウントのsidとtoken
結構重要。
config = { :email => "example@gmail.com" , :password => "mypassword" } cnn = Google::Base.establish_connection(config[:email], config[:password]) puts cnn.sid #=> DQAAAHoAAAATvLdZ_QOcge_R5OOm4ZLL8oK86YluqOvfPkzPiY4KbwGJg3sNlvNlbvx8h3wFdQThQ1lFgo724_nHZGKyCqQsYEmXEUgrEFh4BH99vRmX3rV7Ab_kWPng5lWfZEy85583Jn7eBI5Qtz-KzUZ_xIDAYeYxhDc4UUscJyAd7d1sOA puts Google::Reader::Base.get_token #=> KLWHOyYBAAA.Jq5UlKPYuleY5CeK8SGq4w.t-Oo2RGpMbDRIRPwW5gh3A
未読件数を取得
reading-listというやつが総未読数になるっぽい。
p Google::Reader::Count.all[0].count #=> 15 Google::Reader::Count.all.each {|feed| puts "count:#{feed.count} google_id:#{feed.google_id}" } #=> count:15 google_id:user/09054545224190070545/state/com.google/reading-list #=> count:7 google_id:feed/http://blog.goo.ne.jp/newseko/rss2.xml #=> count:8 google_id:feed/http://ichita.blog.so-net.ne.jp/index.rdf
すべてのラベルを取得
starred, shared, blogger-following, というのが予約であるっぽい。broadcast というラベルも出てきた気がする。
pp Google::Reader::Label.all.map {|label|label.name} #=> ["starred", "shared", "jimin", "minshu", "broadcast", "blogger-following"]
ラベルを指定して取得
おっと、山本一太が未読だったか。まあいいや。
pp Google::Reader::Label.new("jimin") #=> #<Google::Reader::Label:0x2abd8d707810 @count=0, @name="jimin", @shared=true> Google::Reader::Label.new("jimin").entries.each {|feed| puts "#{feed.links[0].href} #{feed.title}" } #=> http://ichita.blog.so-net.ne.jp/2010-01-17 政権党VS検察という異様 #=> http://ichita.blog.so-net.ne.jp/2010-01-16-4 50にして惑う政治家 #=> http://ichita.blog.so-net.ne.jp/2010-01-16-3 中曽根弘文後援会、14年ぶりの挨拶
未読を既読に変更
これで山本一太のアイテムはすべて既読になりました。良かった良かった。
token = Google::Reader::Base.get_token state = Google::Reader::State::READ unread = Google::Reader::Label.new("jimin").entries(:unread, :n => 10) while true break if unread.size == 0 unread.each {|feed| ret = Google::Base.post(url, :form_data => {:i => feed.id, :a => state, :T => token}) puts "#{ret}: #{feed.title} #{feed.links[0].href}" } unread = Google::Reader::Label.new("jimin").entries(:unread, :n => 10, :c => unread.continuation) end #=> OK: 建設業界の悲鳴 http://ichita.blog.so-net.ne.jp/2010-01-16-2 #=> OK: 小沢幹事長が失脚したら... http://ichita.blog.so-net.ne.jp/2010-01-16-1 #=> OK: 山本一太が組みたいと思う政治家 http://ichita.blog.so-net.ne.jp/2010-01-16
購読しているフィードを解除
Google::Base.post をちょろっと変更するだけです。ここのEditAPIを参照。
2010/01/30追加
config = { :email => "example@gmail.com" , :password => "mypassword" } cnn = Google::Base.establish_connection(config[:email], config[:password]) Google::Reader::Base.establish_connection(config[:email], config[:password]) token = Google::Reader::Base.get_token url = Google::Reader::SUBSCRIPTION_EDIT_URL Google::Reader::Subscription.all.each {|feed| id = feed.google_id ret = Google::Base.post(url, :form_data => {:s => id, :ac => 'unsubscribe', :T => token}) puts [ret,id].join(":") }
フィードを新たに登録
2010/01/30追加
config = { :email => "example@gmail.com" , :password => "mypassword" } cnn = Google::Base.establish_connection(config[:email], config[:password]) Google::Reader::Base.establish_connection(config[:email], config[:password]) token = Google::Reader::Base.get_token url = Google::Reader::SUBSCRIPTION_EDIT_URL %w( http://blog.goo.ne.jp/newseko/rss2.xml http://ichita.blog.so-net.ne.jp/index.rdf http://katsuya.weblogs.jp/blog/atom.xml ).each {|feed| id = "feed/#{feed}" ret = Google::Base.post(url, :form_data => {:s => id, :ac => 'subscribe', :T => token}) puts [ret,id].join(":") }