今年の一月に、LogTwitと言うTwitterネイティブWebアクセス解析LogTwitをリリースしたのですが、1月の時点では何も考えずにBasic認証を使っていました。(リリース時のブログエントリ)
ところが8月末からBasic認証が使えなくなってしまうということなので、現在、twitteroauthというライブラリを使いOAuth認証に対応させる作業をしています。ちなみに、利用したtwitteroauthのバージョンは0.0.2-beta3でした。
今回、私がアプリでやりたいこととしては「ユーザ登録してくれたユーザのアカウントでポストする」ということ。そのためにはまず、下記の事が必要になります。
- OAuthでユーザに承認してもらう
- TwitterにPOSTする
OAuthでユーザに承認してもらう
まず、ユーザに承認してもらうためのURLを作成します。
[php] require_once("twitteroauth/twitteroauth.php"); // Consumer keyの値 $consumer_key = "xxxxxxxxxxxxxxxxxxxxxx"; // Consumer secretの値 $consumer_secret = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; $connection = new TwitterOAuth($consumer_key, $consumer_secret); $request_token = $connection->getRequestToken("http://example.com/callback.php"); $SESSION['oauth_token'] = $token = $request_token['oauth_token']; $SESSION['oauth_token_secret'] = $request_token['oauth_token_secret']; $auth_url = $connection->getAuthorizeURL($token, FALSE); [/php]
で、$auth_url に対してリンクを張るなり、header関数などを使うなりしてリダイレクトさせます。この時、getRequestTokenでコールバックURLを指定しないと、認証がうまくいかないので注意。
$auth_urlに飛ぶと、こんな感じの画面が表示されます。ここでユーザがAllowを押すと、getRequestTokenで指定したコールバックURLに自動的に移動します。
コールバックURLに異動するとき、ユーザはoauth_verifierという引数を連れて帰ってきますので、下記のようにaccess_tokenを取得します。
[php] $access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']); [/php]
この$access_tokenをデータベースなどに保存しておくことで、PHPからTwitterにPOST等をすることが出来ます。
TwitterにPOSTする
TwitterにPOSTするためのコードはこんな感じです。
[php] require_once("twitteroauth/twitteroauth.php"); // Consumer keyの値 $consumer_key = "xxxxxxxxxxxxxxxxxxxxxx"; // Consumer secretの値 $consumer_secret = "yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"; $connection = new TwitterOAuth($consumer_key,$consumer_secret,$access_token["oauth_token"], $access_token["oauth_token_secret"]); $connection ->OAuthRequest("https://twitter.com/statuses/update.xml","POST",array("status"=>"Test Post")); [/php]
これで、Twitterに”Test Post”というメッセージが投稿されるはずです。なお、Twitterは同じメッセージの二重投稿が出来ないようになっているので、デバッグする際は投稿メッセージの末尾にUNIXタイム等をつけるなどするとよいと思います。