rubygemsのtwitterを使ったOAuth認証クライアントスクリプト(プロキシ対応?)
以前のエントリで書いたtwitter client scriptが動かなくなったので、新たに書いてみました。
動かなくなった理由
# 以前書いたスクリプトより引用。 Twitter::HTTPAuth.http_proxy( PROXY_ADDR, PROXY_PORT ) base = Twitter::Base.new( Twitter::HTTPAuth.new( USERNAME, PASSWORD ) )
basic認証を使うHTTPAuthから、OAuthに変更する必要があります。
新たなスクリプト
#!/usr/bin/ruby require 'rubygems' require 'twitter' require 'time' OAUTH_CONSUMER_KEY = 'dummy_key' OAUTH_CONSUMER_SECRET = 'dummy_secret' OAUTH_ACCESS_TOKEN = 'dummy_token' OAUTH_ACCESS_SECRET = 'dummy_secret' PROXY_ADDR = nil def request( base, getting_replies ) if getting_replies then return base.mentions end return base.friends_timeline end oauth = Twitter::OAuth.new( OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET ) # oauth = Twitter::OAuth.new( OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, {:proxy => PROXY_ADDR} ) oauth.authorize_from_access( OAUTH_ACCESS_TOKEN, OAUTH_ACCESS_SECRET ) # oauth.access_token.consumer.options[ :proxy ] = PROXY_ADDR base = Twitter::Base.new( oauth ) getting_replies = nil if ARGV[ 0 ] == '-r' then getting_replies = true ARGV.shift end if ARGV.size > 0 then base.update( ARGV.join( ' ' ) ) end request( base, getting_replies ).reverse.each do |s| puts "#{s.user.screen_name} : #{s.text} [ #{Time.parse(s.created_at).strftime( '%Y/%m/%d %H:%M' )}]" end
変更箇所
変更した箇所は以下です。HTTPAuth(basic認証)からOAuth(OAuth認証)に変更しました。
oauth = Twitter::OAuth.new( OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET ) oauth.authorize_from_access( OAUTH_ACCESS_TOKEN, OAUTH_ACCESS_SECRET ) base = Twitter::Base.new( oauth )
こちらも変更しました。repliesよりもmentionsメソッドの使用が推奨されているからです。
return base.mentions
proxyについて
最初はこれでいけると思ったんですが、自分の環境ではうまくいきませんでした。
oauth.access_token.consumer.options[ :proxy ] = PROXY_ADDR
なので、こちらを参考に、twitter.rbを編集しました。編集内容はリンク先を参照。
そして、コンストラクタにproxyの設定を渡せばOK.
oauth = Twitter::OAuth.new( OAUTH_CONSUMER_KEY, OAUTH_CONSUMER_SECRET, {:proxy => PROXY_ADDR} )
終わりに
token, secretを取得してしまえば後は簡単なんですが、そこまでが非常に面倒でした。
理解してしまえば楽なんですけど。