Ruby で User Streams の OAuth + https 対応
そろそろ User Streams の Basic 認証打ち切ったり https 限定にしたりするぞとかいうアナウンスが出てたりしていて、じゃあ OAuth に移行するかということで今更やってみた。
EventMachine だとか gem のアレとかアレとかあるのだけれど、なんか EventMachine でやったら数分でエラーも吐かずに流れなくなったり、その他の使える雰囲気を醸し出していた gem 達もうまく起動しなかったので、自分の解決策を書いておく。あと mongodb にそのまま入れるからjson そのまま欲しいというのもある。
まずこれの each_line メソッドを、User Streams を利用するコードに追加しておく。これはBasic認証の頃からのコード使い回し。
あと OAuth gem は入れておく。sudo gem install oauth とかそんな感じで。そしてそれに ruby-oauth にブロックを渡せるようにする - EAGLE 雑記 のパッチ適用。最後に、自分の環境だけなのかもしれないけれど、URL を https にしたらエラー吐いたので、oauth-0.4.3だとlib/oauth/client.rb 319行目あたりの OpenSSL::SSL::VERIFY_PEER を OpenSSL::SSL::VERIFY_NONE にした。
で、User Streams接続部分はこんな感じになった。いまのところ目立った不具合はないので多分大丈夫だろう。
consumer = OAuth::Consumer.new(CONSUMER_KEY, CONSUMER_SECRET, :site => 'http://twitter.com')
access_token = OAuth::AccessToken.new(consumer, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
access_token.get(USER_STREAMS_URL) do |response|
if response.code == '200'
response.each_line("\r\n") do |line|
status = JSON.parse(line) rescue next
Thread.start(status){|s|
shori(s)
}
end
end
end
Comments