Twitter絡みで、OAuth Echoを使いたかったので書いてみた。
ネットの情報を色々と見ていると、人それぞれというか、動くのかな?っていうのもあったりして、軽く振り回された感あり :|
書いたソースコードはgithubに置いておきます&下の方に貼り付けておきます。
http://gist.github.com/497821
お役に立つようでしたら、ご自由にどうぞ。
以下、RequestTokenを取得するURLの作り方を簡単にまとめます。
RequestTokenはTwitterに署名付きのパラメータを送ることによってもらうことが出来きます。
http://twitter.com/oauth/request_token?&<各種パラメータ>&<署名>
この各種パラメータは次の通り。
- oauth_consumer_key: 各自のConsumerKey
- oauth_signature_method: "HMAC-SHA1" 他にもあるらしいが今回はこれ固定。
- oauth_nonce: その場限りの値。ランダム文字列を利用。
- oauth_timestamp: 現在時刻を秒で表した値。1900年を起算にっていう例のやつ。
- oauth_version: OAuthのバージョン値。"1.0"固定。
URL構築時にはお約束の key=value を&で連結。
署名がちょっと面倒。
まずは署名の準備。署名にはHMAC-SHA1形式を利用。
キーを作成するときは "ConsumerSecret&OAuthToken" とする。もちろん、ConsumerSecretもOAuthTokenも自分の値で書き換えてください。
初回はOAuthTokenをまだ取得してないので空文字列となり、結果的に "ConsumerSecret&" となります。
続いて、署名するための文字列を作成します。
- パラメータを名称順にソート。
- パラメータを連結(key1=value&key2=value2&...)。これを仮に<Params>とする。keyとvalueをそれぞれエンコードする必要があるという情報も見たが、今回はエンコードしても同じなので、してません。
- "GET&encode(http://twitter.com/oauth/request_token)&encode(<Params>)" を作成。encodeはURLエンコード。
ここで作成した "GET..." という文字列を先程作成したキーで署名します。
署名した値をBase64エンコードし、その後、URLエンコードします。
これがRequestTokenをもらうためのURLの一部となる署名です。
生成したURLを叩いて "oauth_token=..." というレスポンスが帰ってくれば成功です。
もし、うまくいかなかった場合に見直した方がいいと思われるところ。
- 署名用のキーを生成するところ。ConsumerSecretとOAuthTokenを利用しているか?OAuthTokenが無い場合は "ConsumerSecret&" のように&で終わっているか?
- 署名する値("GET&http://...")の生成は正しいか?
- 署名した値をBase64→URLエンコードしているか?
それほど難しいわけじゃないけど、はまるとミスっている箇所を見つけるのがちょっと大変かも。
Read More