rubyでTwitterBot
ちょっと今TwitterBotを作ることになってまして。(僕が作るのは特にBotの制御部分)
詳しいことはそのうちまた書くと思うのですが、夏ぐらいにTwitterからデータを取る必要があってRuby Twitter Gemを使ったので、まあすぐできるだろうと思っていたのです。
昔はメールアドレスとパスワードによるログイン(Twitter::HTTPAuth)が使われていたが、
Twitterの仕様変更より、2010/8/31で使えなくなりました(Twitter::OAuthに変更)
ちょwwwwwwww
まあごにょごにょ言ってても仕方ないので、
Route 477
見ながらアプリとしてTwitterに登録、atokenを取得、まではさこっとできました。しかしここで問題発生。
uninitialized constant Twitter::OAuth
どうやらruby twitter gem はバージョン1.0.0になって仕様が変わった模様。ライブラリの中みたら確かにoauth.rbがなかった。調べるのも面倒だったので、
gem install twitter --version'=0.9.8'
とかして古いバージョンを落としてくる(よく見るとリファレンスにも0.9.8準拠って書いてある)。
これでどんどん進めようとするものの、最後のところで投稿できないよって怒られる。どうやらうちのWSはproxy越しなので、proxyを指定しなければいけないよう。しかしここでもTwitter::OAuthのproxy指定の方法がわからない
(HTTPAuthはTwitter::HTTPAuth.http_proxy(PROXY_NAME,PROXY_PORT)とか指定すればよかった)。
いくつか調べていると、ruby twitter gem使わずにoauthから
@consumer = OAuth::Consumer.new(TOKEN, KEY, { :site => 'http://app.twitter.com', :proxy => 'http://PROXY_NAME:PROXY_PORT', })
とか指定できるっぽい。でもruby twitter gem使いたいしなー…
結論としては、gems/1.8/gems/twitter-0.9.8/lib/twitter/oauth.rbを書き換えて、optionsの引数にproxyを取れるようにしました。
プロキシを超えてRuby Twitter GemでOAuth認証が通らない - oTheRwoRld
丸々ここに書いてあるとおりやっただけ…
if options[:sign_in] @consumer_options[:authorize_path] = '/oauth/authenticate' end
の後に、
if options[:proxy] @consumer_options[:proxy] = options[:proxy] end
と書き加えて、
tw_oauth = Twitter::OAuth.new(CONSUMER_KEY,CONSUMER_SECRET,{:proxy=>'http://PROXY_NAME:PROXY_PORT'})
とかやればOauthでもproxy越しにTwitterに投稿することができますよ、と。
あー…長かった…