TitaniumMobile勉強記

Web系エンジニア向けのキャリアアドバイザーやってましたが現在はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連(Node.js、Titanium)あたり

Google Reader非公式API 利用しての既読管理

Google Reader非公式APIは英語の情報でhttp://code.google.com/p/pyrfeed/wiki/GoogleReaderAPI:title=があるけど、その翻訳された情報をたまたまこちらで見つけたので今朝から読み解いていました。

読み始めたきっかけというのは、Google Reader で Starred のアイテム(エントリ)→ Evernoteへクリッピングという流れは完成したけど、出来ればStarredの状態にした日付を参照した上でEvernoteへクリッピングしたいから。

現在作ったAppleScriptだと、Starredのエントリーの更新日(配信日?)を見ているため、例えば

Google ReaderのStarred アイテム取得

そのうちxx日以内に更新されたエントリの元のURL取得

該当ページに移動してXML/HTMLパース処理

のような処理になっているためStarredにしたのが、前日だったとしても元エントリの配信日が2週間前とかだったりすると上記処理ではこのエントリはヒットしないからでこれを出来ればどうにかしたいなぁーと思っています。

とりあえずドキュメントを読んで色々わかったけど、例えば以下URLにアクセスすれば最近Starredにしたアイテムが取得できる。
http://www.google.com/reader/atom/user/-/state/com.google/starred
末尾に 「?」をつけて、それに続けて必要なパラメータをつけると、例えばこんな感じにすると最近Sにしたアイテム1件取得ということになる
http://www.google.com/reader/atom/user/-/state/com.google/starred?n=1

Starredにかぎらず、例えば、最近読んだアイテム10件取得したいっていう場合にはこんな感じでOK
http://www.google.com/reader/atom/user/-/state/com.google/read?n=10

ここまで調べていてふと思ったのが、Google Readerを基点にしてInput/Outputすることが多いから、ライフログの管理のためにEvernote活用するのは面白いかなぁと思ってきて、Google Readerで既読にしたエントリのタイトル&URLのみを抜粋し、それを定期的にEvernoteへクリッピングしておいて、週次レビューでサットタイトルを読み返すなんっていう妄想をちょっとしてみました。

http://d.hatena.ne.jp/dharry/20100117/1263724784:title=を参考にして、自分のGoogleReaderでチェックの優先度が低い「*read title」というカテゴリのブログの最新10件を未読から既読にするためはこんな感じでOKっていうのがわかった

require 'rubygems'
require 'google/reader'
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
config =  { :email => "xxxxx@gmail.com" , :password => "xxxxx" }
cnn = Google::Base.establish_connection(config[:email], config[:password])


token = Google::Reader::Base.get_token
state = Google::Reader::State::READ
unread = Google::Reader::Label.new("*read title").entries(:unread, :n => 10)

url = "http://www.google.com/reader/api/0/edit-tag"

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("*read title").entries(:unread, :n => 10, :c => unread.continuation)

実行した結果はこんな感じに表示されます

OK: Congress slams China and Microsoft, praises Google (David Goldman/CNN Money) http://www.techmeme.com/100324/p89#a100324p89
OK: モンゴルが日本人の短期ビザ免除へ 4月1日から http://rss.asahi.com/click.phdo?i=072979710f5374d8068ac618cec323ff
OK: 「排ガスゼロ」電気自動車タクシー、東京デビュー http://rss.asahi.com/click.phdo?i=3bf882db6548437fc87d9fa1aadc9e71
OK: <CNET Japan>新領域「クラウド」にチャレンジするニフティに話をきいてみた http://rss.asahi.com/click.phdo?i=2684f71195f79adc5500d66f5d198df6
OK: 開幕3連勝「私だけにチャンス」 宮里藍、会見で意欲 http://rss.asahi.com/click.phdo?i=e2322c1a92d5986617add1405d642010
OK: <ZDNet Japan>大企業における海外拠点のWAN予算は新市場開拓の機運に乗り拡大傾向--IDC Japan調べ http://rss.asahi.com/click.phdo?i=6bf8f3168a788fdaf1cf42e4b4eff671
OK: KDDIから取締役3人 JCOM株主総会で承認 http://rss.asahi.com/click.phdo?i=eb0f40000d44f47ee3dbfb9481dd449a
OK: <CNET Japan>シャープ、2番組同時に約10倍録画の新「AQUOSブルーレイ」--シャープブランドのBDメディアも http://rss.asahi.com/click.phdo?i=007df8fe81e41e84c7da3015bad0df91
OK: <GameSpot Japan>カノジョたちにまた逢える--「ラブプラス+2010年夏発売決定&プレサイト公開 http://rss.asahi.com/click.phdo?i=44534c4ce5f32a1eb0edaf5d91590120
OK: My Funny Valentine・Bill Evans&Jim Hall.:UNDERCURRENT [HQCD]・第1曲 http://www.kanshin.com/keyword/2111682