【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