c/fe

http://d.hatena.ne.jp/uzulla から移行しました。

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するとコールバックされた画面で、二つのトークンが取得できる。
取得したトークンを記述すれば、そのまま使える。