Chat on Pusher

Pusher を使ってチャットアプリを作った。コレ → http://chatto.heroku.com/。バックエンドは相変わらず Sinatra。Twitter のアカウントを使ってチャットができる。チャットの内容をツイートしたりする機能はなし。
Pusher 周りは Pusher のサイトに Demo として掲載されている Pusher Chat を、Twitter 周りは jugyo さんの Twiwt:Chat を参考にさせていただいた。ってかまねた。
作っていて一番困ったのが、Twitter の screen name の取得方法が分らなかったこと。Twitter 関連のライブラリは gem の Twitter を使用している。OAuth の認証はできても、そこから自分の screen name がとれなかった。
参考にさせていただいた Twiwt:Chat (Python) では screen name は取得できているので、Twitter の API からとれないということはなさそうだった。どうやって取得しているのだろうとソースを覗くと、どうも この辺り が該当箇所のようだ。
gem の Twitter でそれに対応してるのが ここ 。ここの access_token をダンプしてみると

#<OAuth::AccessToken:0x2b8fda1a4e48
 ...
 @params=
  {:oauth_token=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
   :user_id=>"0000000000",
   "oauth_token_secret"=>"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
   :screen_name=>"yamamucho",
   "user_id"=>"0000000000",
   :oauth_token_secret=>"yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
   "oauth_token"=>"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
   "screen_name"=>"yamamucho"},
 ...

@params に screen name が に入っているということがわかった。
ので、次のようにして get_access_token の戻り値をメンバに保存しておくようにした。これで @access_token.params[:screen_name] とかで、screen name を取得できる。

class Twitter::OAuth
  def authorize_from_request(rtoken, rsecret, verifier_or_pin)
    request_token = ::OAuth::RequestToken.new(signing_consumer, rtoken, rsecret)
    @access_token = request_token.get_access_token(:oauth_verifier => verifier_or_pin)
    @atoken, @asecret = @access_token.token, @access_token.secret
  end
end

こんな対応でよいのかしら。他の部分に影響はでないのか?とりあえず自分が使う機能だけであれば問題は出ていないけど。

11/23 追記

githubにソースをupした。https://github.com/ymmtmsys/chatto