WEBサイトの製作、管理、とかの日記ブログです。

<<   2023年06月   >>
SunMonTueWedThuFriSat
    123
45678910
11121314151617
18192021222324
252627282930 
新着記事
カテゴリ
過去ログ
コメント
検索
OAuthでTwitter投稿できましたー
前に認証までやったんだが、疲れたから放置したんだが、
今投稿までできたんでまとめとく。



1.アプリケーションの登録
http://twitter.com/apps
たぶんここ。(ツイッタのホームから行ける)
で、アプリケーションを登録する。
いくつか入力必要ですが、難しくはなかったと思う。
登録すると、
「 Consumer key」
「 Consumer secret」
「http://twitter.com/oauth/request_token」
「http://twitter.com/oauth/access_token」
「http://twitter.com/oauth/authorize」
キーと秘密鍵とアドレス3つ教えてくれる。



2.OAuth認証について
すべてのリクエストでOAuth認証するのだが、
ググると、リクエストヘッダに情報入れてGETしろとか、RESTでパラメータ渡せとか、POSTで渡せとか・・・
POSTでパラメータ渡したらうまくいきました。

http://developer.yahoo.co.jp/other/oauth/
↑Yahoo!デベロッパーネットワークだが、ここはヘッダで渡せって感じで、そのままだとうまくいかないと思うんだが、ここが一番説明わかりやすかった。
AmazonのAPI使うのににてる感じの仕組み。

パラメータを普通のPOSTの時の様に「&」でつなぐんだが、
注意事項としては、
  • 不要の文字のURLエンコードはしない。(半角英数字、「_」「.」「-」「~」はそのままにする。)
  • %ffのように小文字はダメ。%FFのように大文字する。
  • パラメータはキーの順にソートして「&」でつなぐ。
で、
「POST&URL&パラメータ」を文字列として、
「Consumer secret&request secret」のように、コンシュマー秘密鍵とアクセス用の秘密鍵を「&」でつないだキーで、
HMAC-SHA-1で暗号化する。暗号はBase64で渡す。
Perlなら、Digest::SHA::hmac_sha1_base64を使えば楽だが、
Digest::SHA::hmac_sha1_base64のBase64は末尾に「=」がつかないんで、必要な分(4の倍数文字になるように)「=」を追加する。
「POST&URL&パラメータ」は、URLエンコードしたうえで「&」でつなぐ。
パラメータは2重にURLエンコードする感じですね。
URLは、OAuth認証で接続するURL。

で、
「パラメータ&oauth_signature=今作った暗号」
ってな感じで、パラメータの末尾に暗号くっつける。
これをPOSTで送るとレスポンスが帰ってくる。
Twitterの場合、
成功したら200だったかな?普通にレスポンスが帰ってくる。
失敗すると401が帰ってくる。



3.リクエストトークンの取得
http://twitter.com/oauth/request_token
にOAuth認証するとレスポンスとして、トークンと秘密鍵が返ってくる。
OAuth認証する際のパラメータは、
oauth_consumer_key=[Consumer key]
oauth_signature_method='HMAC-SHA1'
oauth_timestamp=(現在時刻1970-01-01T00:00:00からの秒数で。)
oauth_nonce=(適当な値。randの値でOKぽい)
oauth_version='1.0'
で行けた。
これを、2の方法でPOSTする。
アクセス用の秘密鍵はこの時点ではないので、
HMAC-SHA-1用のキーは
「Consumer secret&」
と、右側は空にする。



4.ユーザーにアプリケーションによるアクセスを許可する。
ユーザに
http://twitter.com/oauth/authorize?oauth_token=[3でもらったトークン]
に普通に接続してもらう。
そうすると、
「許可しますか?」
ってな感じのページになり、許可すると、7桁の数字が表示される。



5.アクセストークンの取得
http://twitter.com/oauth/access_token
にOAuth認証で接続する。
リクエストトークンの取得の際のパラメータに、
oauth_verifier=[4で表示された数字]
oauth_token=[3でもらったトークン]
を追加する。
oauth_timestampとoauth_nonceは更新した方がいいと思う。
HMAC-SHA-1用のキーは
「Consumer secret&3でもらった秘密鍵」

そうすると、
アクセス用のトークンと秘密鍵がもらえる。
以後、
OAuth認証時のパラメータ
oauth_token=[今もらったトークン]
HMAC-SHA-1用のキーは
「Consumer secret&今もらった秘密鍵」
ってな感じでAPIが使える。
API操作用のパラメータも、認証用のパラメータとごっちゃにして送ればいい。



6.Twitterに投稿
http://api.twitter.com/1/statuses/update.json
にOAuthでPOSTすると書き込める。
.json
なってるところは、
.xml
だとXMLでレスポンス帰ってくる。
.json
なら、JSON
パラメータは、OAuth認証用のものに、
status=書き込む文字列
を追加。



こんな感じだね。
やたらめんどい仕様だが、
secretってくらいだから、
「Consumer secret」
は本来隠すものだが、
配布するアプリケーションにTwitter機能つけるんなら、
クライアントから直接投稿するんなら隠せないよね。


whblogに、Twitter機能くっつけようと思う。
この記事へのコメント
名前:
URL
コメント:
この記事へのトラックバック :
whblog 1.7