PHPで、Botを作成する場合などで使う、アクセス用のトークンを取得する
前に書いた方法(http://d.hatena.ne.jp/uzulla/20100215#p3)で、不特定多数のユーザーがOAuthを用いて一つのプログラムを用い、Twitterにそれぞれの権限でアクセスができるが、あくまで不特定多数のユーザーの為の物であり、常時同じアカウントを利用してBot的な物を動作させるには適さない。
BOTなどを動作させるなら、ID/PASSの代わりにアクセス用のトークンを別に二つ取得し、保存しておくとよい。
(下のコードだと、ACCESS_TOKENと、ACCESS_TOKEN_SECRET がアクセス用のトークン)
下のコードをつかうと、アクセス用のトークンが取得できる。
<?php define('CONSUMER_KEY', '***');//http://twitter.com/apps/ から取得 define('CONSUMER_SECRET', '***');//http://twitter.com/apps/ から取得 define('ACCESS_TOKEN', '***');//トークンを取得するだけなら、不要。 define('ACCESS_TOKEN_SECRET', '***');//トークンを取得するだけなら、不要。 $callbackurl = 'http://hostname/filename.php';//このスクリプトの設置場所 require_once 'Services/Twitter.php'; require_once 'HTTP/OAuth/Consumer.php'; if (isset($_GET['token_renew'])) { // filename.php?token_renew=y とかでアクセスする session_start(); $oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY, CONSUMER_SECRET); $oauth->getRequestToken('http://twitter.com/oauth/request_token',$callbackurl); $_SESSION['token'] = $oauth->getToken(); $_SESSION['token_secret'] = $oauth->getTokenSecret(); $url = $oauth->getAuthorizeUrl('http://twitter.com/oauth/authorize'); header ("location: {$url}"); exit; }else if(isset($_GET['oauth_verifier'])) { //TwitterのOauth画面から帰ってきて、TOKENを表示する session_start(); $oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['token'], $_SESSION['token_secret']); $oauth->getAccessToken('http://twitter.com/oauth/access_token', $_GET['oauth_verifier']); //$twitter->setOAuth($oauth); $_SESSION['token2'] = $oauth->getToken(); $_SESSION['token_secret2'] = $oauth->getTokenSecret(); echo "以下のトークンを利用する"."<br>"; echo "access token:". $_SESSION['token2']."<br>"; echo "access token secret:". $_SESSION['token_secret2']."<br>"; session_destroy(); exit; } else { //ここはトークンを利用した普通の処理例、トークンを取得するだけなら、不要。 $twitter = new Services_Twitter; $twitter->setOption( 'format', 'xml' ); $oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); $twitter->setOAuth($oauth); try { print_r( $twitter->statuses->user_timeline( array('id'=>'uzulla' ) ) ); } catch (Exception $e) { echo $e->getMessage(); } }
これを設置して、
http://hostname/filename.php?token_renew=y
とアクセスすると、おなじみのOAuth認証画面が表示され、Allowするとコールバックされた画面で、二つのトークンが取得できる。
取得したトークンを記述すれば、そのまま使える。