【Ruby】【OAuth】【twitter】access_tokenの中身
twitterで認証画面が出たあとに、リダイレクトします。
そのリダイレクト先で、認証されたユーザの情報を得たいと思いました。
そんな時の話です。
参考サイトはやっぱりこちら
http://tech.maid-san.org/archives/166
参考になりすぎて頭が上がりません…
前に、別のサイトで見たものを参考に、irbを使って取得した、access_tokenの中身は以下です(とっといてよかった…!)
ちょっと公開できないような情報がおおいので、そこら辺は全て「ないしょ」にしてあります。し忘れ箇所があったら、お教えいただけるとありがたいです…!!
#<OAuth::AccessToken:ないしょ @secret="ないしょ", @consumer=#<OAuth::Consumer:ないしょ @http_method=:post, @secret="ないしょ", @key="ないしょ", @http=#< Net::HTTP twitter.com:80 open=false>, @options={:request_token_path=>"/oauth/req uest_token", :site=>"http://twitter.com", :authorize_path=>"/oauth/authorize", : scheme=>:header, :access_token_path=>"/oauth/access_token", :oauth_version=>"1.0 ", :http_method=>:post, :signature_method=>"HMAC-SHA1", :proxy=>nil}>, @params={ "oauth_token_secret"=>"ないしょ", :oauth_toke n_secret=>"ないしょ", "user_id"=>"31622922", :user_id=>"31622922", :screen_name=>"sea_mountain", "oauth_token"=>"ないしょ", :oauth_token=>"ないしょ", "screen_name"=>"sea_mountain"}, @token="ないしょ">
なぜこの情報が必要だったかと言いますと…
prm = {:oauth_verifier => oauth_vrfy} access_token = request_token.get_access_token(prm) session["access_token"] = access_token.token
こんな感じで、tokenが取られてきているようなのですが、それ以外にどのようなものが取れるのか知りたかったのです。
上のと比べてみたりした結果、どうやら、@が付いているものが取れるようです。なので、@paramsが欲しいと思ったので、
access_token.paramsとすると、@paramsの子要素に見える部分が全て取ってこれます。
全部取得したあとにどう分けて処理するかはこれからです…
また少しあとで纏めます。
まとめました
追記(7/28)
access_tokenを取得するときに使ったソースです。
参考は上に載せてあるサイト様です…!!
cgi = CGI.new session = CGI::Session.new(cgi,{"tmpdir" => "./tmp"}) oauth_token = cgi["oauth_token"] oauth_vrfy = cgi["oauth_verifier"] consumer = OAuth::Consumer.new( CONSUMER_KEY, CONSUMER_SERCRET, :site => "http://twitter.com" ) request_token = OAuth::RequestToken.new( consumer, session["request_token"], session["request_token_secret"] ) prm = {:oauth_verifier => oauth_vrfy} access_token = request_token.get_access_token(prm)
これでokです…!
後は必要なところで、
access_token.params[:screen_name]
とすると、access_tokenの中の、:screen_nameが取ってこれます。
ただし、注意は、一番最初のrbファイルに、sessionを保存しておかないといけないです!
require 'cgi' require 'cgi/session' require 'oauth/consumer' cgi = CGI.new session = CGI::Session.new(cgi,{"new_session"=>true,"tmpdir" => "./tmp"}) session["request_token"] = request_token.token session["request_token_secret"] = request_token.secret
最低限必要なのはこれで…いいはずです…
追記(2011/02/26)
自分用メモ
DBにaccess_tokenとsecretを保存したあとに、どうやってaccess_tokenを利用出来るようにするか。
def get_access_token access_token = OAuth::AccessToken.new( TwitterClient.consumer, self.access_token, self.access_token_secret ) end
こんな感じでconsumerと保存していたaccess_tokenとsecretを引数に渡してOAuthを利用する。
https://github.com/airs/radiant-group_twitter-extension/commit/ef9495b553fa968d1fbaf19d18a1466223d27442#diff-1