Twitter oauth認証をphp、PECL oauthを使って通す方法
- 概要
TwitterAPIにphp5 + PECL oauth + curlを使ってoauth認証を通し書き込みをする
一連の流れです
この流れは「ブラウザアプリケーション」での流れになります
- 準備
http://dev.twitter.com/apps より「新しいアプリケーションを登録する」をクリック
アプリケーション名: (アプリの名前を入れましょう。これがTweetの下に表示されるものになります)
アプリケーションの説明: (アプリの説明を入れましょう)
アプリケーションのウェブサイトURL (これがTweetの下に表示される名前のリンクものになります)
所属会社/団体 (特に入力の必要はなさそうです)
アプリケーションの種類 (ブラウザアプリケーションを選択してください)
コールバックURL: (下記のコールバックプログラムを置く場所のURLです)
Default Access type: ( Read & Write を選んでください)
アプリケーションのアイコン: (見栄えのいいのを設定しておくのがいいのではないか・と・・BOTであれば特に必要ないかな)
Consumer key と Consumer secret が発行されるので、この値を各PGに設定する
- 処理フロー
login.phpにアクセスする。
このタイミングでrequest_tokenが発行されるので、request_token-oauth_tokenは引数で持ちまわってくれるが
request_token-oauth_token_secretは保持しないといけないので、cookieなどに保存しておく
*request_tokenはワンタイムセッションな情報。一連の処理が済んでしまえば必要ないし、再利用も出来ない。
アクセスすると、認証URLが発行されるので
そのURLにアクセスすると、ブラウザでログインしていない状態ならログインを求められ、
引き続き、アプリケーションを許可するかを聞いてくるので「許可をクリックする」
Twitter側で認証処理が動き出し、最後にcallback.phpのページに自動的に移る。
このタイミングでaccess_tokenが発行される。
これがbasic認証に当たるユーザのID,PASSの変わりに成るもの。
このaccess_tokenの各値をDBに保存などしておき、
そのユーザのつぶやきとして処理したいときに使う
tweet.phpにアクセスする。
発行されたaccess_tokenを用いてTweet(update.xml)が行われる。
- 注意すること
キーやシークレットキーが3つあるので、混乱しがち・・
気をつけないと、ハマリマス
- プログラム
-
- login.php
<?php $req_token_url = 'http://twitter.com/oauth/request_token'; $consumer_key = 'アプリケーションを登録したときに発行されたConsumer key'; $consumer_secret = 'アプリケーションを登録したときに発行されたConsumer secret'; $oauth = new OAuth($consumer_key,$consumer_secret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $request_token = $oauth->getRequestToken($req_token_url); setcookie('request_token_oauth_token_secret', $request_token['oauth_token_secret']); echo 'http://twitter.com/oauth/authorize?oauth_token='.$request_token['oauth_token'];
-
- callback.php
<?php $consumer_key = 'アプリケーションを登録したときに発行されたConsumer key'; $consumer_secret = 'アプリケーションを登録したときに発行されたConsumer secret'; $oauth = new OAuth($consumer_key,$consumer_secret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $oauth->setToken($_GET['oauth_token'],$_COOKIE['request_token_oauth_token_secret']); $access_token = $oauth->getAccessToken('http://api.twitter.com/oauth/access_token'); echo "access_token_oauth_token :".$access_token["oauth_token"] ."<br>\n"; echo "access_token_oauth_token_secret :".$access_token["oauth_token_secret"]."<br>\n"; echo "access_token_user_id :".$access_token["user_id"] ."<br>\n"; echo "access_token_screen_name :".$access_token["screen_name"] ."<br>\n";
<?php $consumer_key = 'アプリケーションを登録したときに発行されたConsumer key'; $consumer_secret = 'アプリケーションを登録したときに発行されたConsumer secret'; $oauth = new OAuth($consumer_key,$consumer_secret,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI); $access_token["oauth_token"] ="callback.phpで発行されたaccess_token_oauth_token"; $access_token["oauth_token_secret"] ="callback.phpで発行されたaccess_token_oauth_token_secret"; //つぶやきたい文章 ただし、同じ文章を連続投稿するとエラーになるので注意!(403になる様子) $params = array( 'status' => 'mou ittyo-' ); $oauth->setToken($access_token["oauth_token"],$access_token["oauth_token_secret"]); $oauth->fetch('http://api.twitter.com/1/statuses/update.xml', $params, OAUTH_HTTP_METHOD_POST ); var_dump( json_decode( $oauth->getLastResponse() ) );
setToken($access_token["oauth_token"],$access_token["oauth_token_secret"]);
//$oauth->fetch( $twurl , $params, OAUTH_HTTP_METHOD_POST );
//echo $oauth->getLastResponse() ;
//アンフォローする
//$userid="5117831"; //< http://twitter.com/imaiworks のID
//$twurl="http://api.twitter.com/1/friendships/destroy/".$userid.".xml";
//$oauth->setToken($access_token["oauth_token"],$access_token["oauth_token_secret"]);
//$oauth->fetch( $twurl , $params, OAUTH_HTTP_METHOD_POST );
//echo $oauth->getLastResponse() ;
//つぶやく ただし、同じ文章を連続投稿するとエラーになるので注意!(403になる様子)
$params = array( 'status' => 'つぶやきます' );
$oauth->setToken($access_token["oauth_token"],$access_token["oauth_token_secret"]);
$oauth->fetch('http://api.twitter.com/1/statuses/update.xml', $params, OAUTH_HTTP_METHOD_POST );
var_dump( json_decode( $oauth->getLastResponse() ) );
2010/5/10 tweet.phpのconsumer_key、consumer_secret の説明に記述ミスがあったので修正しました