classics.

2010/09/16 Thuflickr

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