Ruby で Twitter の OAuth を使うサンプル
OAuth の勉強する時に参考になればと思います。 OAuth の勉強は OAuth Core 1.0 Revision A を読むのが一番わかりやすいと思うんで、それで勉強しつつ具体例をこのライブラリの中身を見る、という感じで。
VCTwitter::OAuth モジュール
下記が今回作成したライブラリです。
VCTwitter::OAuth モジュールの中には
- VCTwitter::OAuth::Agent クラス
- VCTwitter::OAuth::ParameterList クラス
が含まれています。
VCTwitter::OAuth::Agent オブジェクトを使用して Request Token や Access Token の取得、さらに Twitter への OAuth を介した GET メソッド、POST メソッドによるアクセスを行う事ができます。 VCTwitter::OAuth::ParameterList オブジェクトは GET メソッドや POST メソッドでアクセスする時にパラメータを VCTwitter::OAuth::Agent オブジェクトに渡すために使用します。 まあ詳しい動きなどは中身を見てもらえれば。
サンプル
VCTwitter::OAuth モジュールを使用して Access Token を取得するサンプルです。 Application Type は Client を想定してます。 (Application Type が Browser である Consumer Key で以下のサンプルを実行すると多分 "callback_url に oob を指定できるのは Client だけ!" みたいなエラーが出ると思います。)
#! /usr/bin/ruby1.9 # -*- coding: utf-8 -*- STDOUT.set_encoding( Encoding.locale_charmap ) # vc_twitter_oauth.rb を Load path 以外の場所に置いた場合, # vc_twitter_oauth.rb へのパスを $LOAD_PATH に追加する必要がある #$LOAD_PATH.push( "xxx" ) # vc_twitter_oauth.rb の読み込み # これで VCTwitter::OAuth::ParameterList と VCTwitter::OAuth::Agent を使えるようになる require "vc_twitter_oauth" # Consumer Key と Consumer Secret の設定 consumer_key = "XXXXXXXXXXXXXXXXXXXX" consumer_secret = "XXXXXXXXXXXXXXXXXXXX" # とりあえず VCTwitter::OAuth::Agent オブジェクトを取得 agent = VCTwitter::OAuth::Agent.new( consumer_key, consumer_secret ) # Request Token 取得 (引数 "oob" は callback_url なしの指定) # 返り値として, req_pair には 2 つの要素を持つ Array オブジェクトが代入される. # 1 つ目の要素が request_token を表す String, 2 つ目が request_token_secret を表す String. req_pair = agent.obtain_request_token( "oob" ) # ユーザには Twitter の OAuth 認証ページにアクセスさせ, 暗証番号を入力させる puts "http://twitter.com/oauth/authorize?" + VCTwitter::OAuth::ParameterList.new( { "oauth_token" => req_pair[0] } ). to_query_string() + " にアクセスして暗証番号を取得し, 入力してください." print "暗証番号 : " verifier = STDIN.gets().chomp() # 入力してもらった暗証番号で, Access Token を取得 acc_pair = agent.obtain_access_token( verifier ) p "Access token と Access token secret", acc_pair token = acc_pair[0] token_secret = acc_pair[1] # このまま agent を使用して get や post もできるし, # 取得した token と token secret を保存しておき, 次回からは # agent = VCTwitter::OAuth::Agent.new( consumer_key, consumer_secret, token, token_secret ) # という風にインスタンス化できる. # そのまま get を行う puts agent.get( "twitter.com", "/statuses/mentions.xml" ) # 新たに VCTwitter::OAuth::Agent オブジェクトを生成し, get を行う other_agent = VCTwitter::OAuth::Agent.new( consumer_key, consumer_secret, token, token_secret ) puts other_agent.get( "twitter.com", "/statuses/mentions.xml" ) exit 0
追記 【2009-12-11 02:22 JST】
このモジュール内では Ruby ライブラリ openssl を使用しているのですが、環境によっては openssl がインストールされていない事もあるようです。
Ubuntu 9.10 (Karmic) の場合について、openssl のインストール方法 を書きましたので、openssl がインストールされていない場合は参考にしてください。