読者です 読者をやめる 読者になる 読者になる

Lolidroid.txt

メモ書きです。

Twitterへ自動ログイン -> oauth認証 

複数Twitterアカウントのフォロー管理や投稿などを、まとめて管理したいとします。
これらの作業を自動化するためにはTwitterが公開するAPIを利用するのがよいでしょう。 しかし、これを利用する場合、最初にOAuth認証に伴う手動ブラウザ操作が発生します。

そこで、このブラウザ操作をrubyMechanizeを使って自動化します。

Mechanizeはgem install 'mechanize'なりしてインストールしてください。

※ 本記事の内容を試す場合は自己責任にてお願いします。またTwitter webの仕様変更などで動作しなくなる場合があります。

下記のようなコードを作成します。

7,8行目にはTwitterアプリケーションキーを入力してください。アプリケーションキーここから入手できます。今回はPIN認証を自動化しました。

require 'optparse'
require 'mechanize'
require 'oauth'
require 'oauth/consumer'

# 以下を書き換える
CONSUMER_KEY    = 'consumer key をここに'
CONSUMER_SECRET = 'consumer secret keyをここに'

# Parse Option 
args = {}
OptionParser.new do |parser|
    parser.on('-u', '--username USERNAME'){|v| args[:username] = v}
    parser.on('-p', '--password PASSWORD'){|v| args[:password] = v}
    parser.parse!(ARGV)
end

username = args[:username]
password = args[:password]

agent = Mechanize.new

agent.verify_mode = OpenSSL::SSL::VERIFY_NONE
agent.follow_meta_refresh = true
agent.user_agent = 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko'

# Login to Twitter
page = agent.get("https://twitter.com/")

form = page.forms[1]
form["session[username_or_email]"] = username
form["session[password]"] = password
page = form.submit

# Get Request token (use Twitter API)
consumer=OAuth::Consumer.new( CONSUMER_KEY,CONSUMER_SECRET, {
    :site=>"https://api.twitter.com"
})
request_token=consumer.get_request_token
auth_url = request_token.authorize_url

# Open request url
page = agent.get(auth_url).form_with(:id =>'oauth_form').submit 

# Parse PIN code
code = page.at('code').content

# Send PIN code
access_token = request_token.get_access_token(:oauth_verifier => code)

puts access_token.token
puts access_token.secret

上のコードを実行すると標準出力にアクセスキーが出力されます。

ruby twiauth.rb -u Lolidroid -p "ここにパスワード"

あとはよしなに。