読者です 読者をやめる 読者になる 読者になる

kur.jp

バイオリンと自転車をこよなく愛するkurのチラシの裏。たまには技術的なことを書いたりするかも知れません。

PHPでTwitterのOAuth認証

今年の一月に、LogTwitと言うTwitterネイティブWebアクセス解析LogTwitをリリースしたのですが、1月の時点では何も考えずにBasic認証を使っていました。(リリース時のブログエントリ

ところが8月末からBasic認証が使えなくなってしまうということなので、現在、twitteroauthというライブラリを使いOAuth認証に対応させる作業をしています。ちなみに、利用したtwitteroauthのバージョンは0.0.2-beta3でした。

今回、私がアプリでやりたいこととしては「ユーザ登録してくれたユーザのアカウントでポストする」ということ。そのためにはまず、下記の事が必要になります。

  1. OAuthでユーザに承認してもらう
  2. 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に自動的に移動します。

image

コールバック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(""Test Post")); [/php]

これで、Twitterに”Test Post”というメッセージが投稿されるはずです。なお、Twitterは同じメッセージの二重投稿が出来ないようになっているので、デバッグする際は投稿メッセージの末尾にUNIXタイム等をつけるなどするとよいと思います。