RailsでTwitterのOAuth使ってみた
参考にしたサイト
http://tech.lampetty.net/tech/index.php/archives/323
ありがとうございました。
ほぼこの通りですが、トークンの中身や、アクセス・トークンを取得した後にそれを使いまわすやり方に少し苦労したので備忘録メモ。
一応、キーは全て大文字のアルファベットに置き換えてあります。わかりづらいかもしれませんが。。予めご了承ください。
Callback 関数内の動作
request_token の生成
生成
request_token = OAuth::RequestToken.new( consumer, session[:request_token], session[:request_token_secret] )
- session の中身
session {:session_id=>"SESSION_ID", :request_token=>"REQUEST_TOKEN", :request_token_secret=>"REQUEST_TOKEN_SECRET"}
- request_token の中身
#<OAuth::RequestToken:0xb7a5e6ac @params={}, @token="TOKEN", # session[:request_token] @secret="SECRET"> # session[:request_token_secret] @consumer=#<OAuth::Consumer:0xb7a558cc @http=#<Net::HTTP twitter.com:80 open=false>, @key="CONSUMER_KEY", @secret="CONSUMER_SECRET", @options={:site=>"http://twitter.com", :authorize_path=>"/oauth/authorize", :access_token_path=>"/oauth/access_token", :oauth_version=>"1.0", :signature_method=>"HMAC-SHA1", :http_method=>:post, :proxy=>nil, :request_token_path=>"/oauth/request_token", :scheme=>:header}, @http_method=:post>,
access_token の生成
access_token = request_token.get_access_token( {}, :oauth_token => params[:oauth_token], :oauth_verifier => params[:oauth_verifier] )
- access_token の中身。基本的にrequest_tokenにparams が追加されただけ。
#<OAuth::AccessToken:0xb7a3d970 @params={"oauth_token"=>"OAUTH_TOKEN", :oauth_token=>"OAUTH_TOKEN", "oauth_token_secret"=>"OAUTH_TOKEN_SECRET", :oauth_token_secret=>"OAUTH_TOKEN_SECRET", :user_id=>"USER_ID", "user_id"=>"USER_ID", :screen_name=>"SCREEN_NAME", "screen_name"=>"SCREEN_NAME"}, @token="OAUTH_TOKEN", @secret="OAUTH_TOKEN"> @consumer=#<OAuth::Consumer:0xb7a558cc @http=#<Net::HTTP twitter.com:80 open=false>, @key="CONSUMER_KEY", @secret="CONSUMER_SECRET", @options={:site=>"http://twitter.com", :authorize_path=>"/oauth/authorize", :access_token_path=>"/oauth/access_token", :oauth_version=>"1.0", :signature_method=>"HMAC-SHA1", :http_method=>:post, :proxy=>nil, :request_token_path=>"/oauth/request_token", :scheme=>:header}, @http_method=:post>,
params のハッシュがシンボルと文字列の両方入ってるのは1つにできないのかな。。
「user_id」と「screen_name」が予め両方入っていたので、トークンもそれに合わしてるっぽい。
動作確認
Callback関数で取得したアクセス・トークン(oauch_token)とトークン・シークレット(oauch_token_secret) を保持しておいて、それを使ってAPIをたたく。
class TwitterController < ApplicationController def index consumer_key = "CONSUMER_KEY" consumer_secret = "CONSUMER_KEY" oauth_token = "OAUTH_TOKEN" oauth_token_secret = "OAUTH_TOKEN_SECRET" consumer = OAuth::Consumer.new(consumer_key, consumer_secret, {:site => 'http://api.twitter.com'}) access_token = OAuth::AccessToken.new(consumer, oauth_token, oauth_token_secret) response = access_token.get('/statuses/friends_timeline.json') @timeline = JSON.parse(response.body) render :text => @timeline end end
その他参考にしたサイト
http://www.atmarkit.co.jp/fsecurity/special/106oauth/oauth03.html
- oauth-plugin
http://code.google.com/p/oauth-plugin/wiki/AccessToken
いじょー(・ω・)