Twitterへ自動ログイン -> oauth認証
複数Twitterアカウントのフォロー管理や投稿などを、まとめて管理したいとします。
これらの作業を自動化するためにはTwitterが公開するAPIを利用するのがよいでしょう。
しかし、これを利用する場合、最初にOAuth認証が必須でこれには手動ブラウザ操作を伴います。
そこで、OAuth認証時のブラウザ操作をrubyとMechanizeを使って自動化します。
Mechanizeはgem install 'mechanize'
なりしてインストールしてください。
【注意】 本記事の内容を試す場合は自己責任にてお願いします。またTwitter webの仕様変更などで動作しなくなる場合があります。
下記のようなコードを作成します。
7,8行目にはTwitterアプリケーションキー(consumer key & consumer secret key)を設定してください。
アプリケーションキーはhttps://apps.twitter.com/などから入手してください。
今回は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 <ユーザ名> -p <パスワード>
あとはよしなに。