どうも探し方が悪かったらしい。他にも似たように悩んでる人多いですね。
Oauth client initialization in python for tumblr API using Python-oauth2
http://stackoverflow.com/questions/7569018/oauth-client-initialization-in-python-for-tumblr-api-using-python-oauth2
↓の人が貼り付けたgist
https://gist.github.com/1242662
ほほう、python だと oauth/2モジュールが存在すると?そりゃそうでしょうね。
https://launchpad.net/ubuntu/+source/python-oauth2/
ホントだ。流石はubuntu。
小生の使ってるのはLinux Mintですが、mintリポジトリに無いものはubuntuリポジトリに探しにいくので、使えます。ありがたや。
2012年7月2日月曜日
2012年7月1日日曜日
OAuth 勉強中 (1) Request_Token取得まで
どれどれ。
何れにしても、必ずWebを経由しなければならないようですね。であれば、単独アプリよりは、Web Applicationの方が有利かな。Request_Tokenの要求で、自動的にリダイレクトしてもらえるようだし。
この中で、変数群のカテゴライズをするなら
- まずアプリケーションの申請をして、Consumer_key, Consumer_secret をもらう。
- これらの値は、Webサービス側の都合で完全に決まる。基本16進数の文字列。っぽいが。
- Request Token を生成してもらう。
- Webサービスの特定のURL Request token URL に、後述のパラメタ付きで投げると、oauth_token/oauth_token_secret がもらえる。
- このoauth_tokenは、次回の通信から、sha_secretの計算に付け加える。
- sha_secret = Consumer_secret + "&" + oauth_token
- そのoauth_tokenを伴って、Web認証画面に飛ばす。authorize URLとか言う。
- Webベースアプリケーションの場合はリダイレクトで飛ばせるが、単独アプリの場合は、URLを表示して、そのページを手動で開いてもらう必要がある。
- PINを発行してもらう。
- PIN→ oauth_verifier とかに入れるのが一般的らしい
message_org_dict={アレ、意外と判りやすい?!もっと全然判らなかったような気がしたけど。あーそうか、Access Token とか Request Tokenとか、用語があちこちでカスってるのが判りにくかったのか。ネーミングのセンスが悪いです。劇的に。
oauth_consumer_key: Consumer_key,
#oauth_signature: シグネチャ。
oauth_signature_method=大抵 "HMAC-SHA1 ",
oauth_timestamp: time.time(),
#oauth_nonce:
#oauth_version:
}
#signatureの計算は、実は宛先URLに依存するように出来ていて
oauth_token = "";message_str = "&".join( [ "GET", url, "&".join( [ key + "=" + message_org_dict[key] for key in sorted( message_org_dict.keys() )
] ) ) ;
sha_secret = Consumer_secret + "&" + oauth_token;
signature_hex=hmac.new( sha_secret , urllib.quote(message_str,""), hashlib.sha1).digest().encode("base64").strip(); message_org_dict.update( { "oauth_signature":signature_hex } )#これで漸く通信できます。
何れにしても、必ずWebを経由しなければならないようですね。であれば、単独アプリよりは、Web Applicationの方が有利かな。Request_Tokenの要求で、自動的にリダイレクトしてもらえるようだし。
この中で、変数群のカテゴライズをするなら
- Webサービス依存
- url :ライブラリの内部とかに保持する?
- 登録アカウント依存 :外部ファイルでjsonとかにして置く。ハードコーディングは嫌いです。
- Consumer_key
- Consumer_secret
- セッション依存: PHPであれば$_SESSIONにぶち込める
- request_token
- (oauth_verify)
登録:
投稿 (Atom)