先日の続きで、Twitter APIのOAuthを使った具体的なPHPプログラムです。
PEARライブラリの用意
まずは、PEARライブラリを活用するので、以下のパッケージをダウンロード、インストールします。
コンシュマキーの設定
前回のアプリ登録で取得したコンシューマキーを設定します。
コンシューマキーは、Twitterのサイトでログインした後、以下のページから取得できます。
該当するアプリケーションをクリックし、「Consumer key」と「Consumer secret」を取得します。
PHPでコンシューマキーを設定する流れです。
require_once('HTTP/Request2.php'); require_once('HTTP/OAuth/Consumer.php'); $consumer = new HTTP_OAuth_Consumer("Consumer key", "Consumer secret"); $http_request = new HTTP_Request2(); $http_request->setConfig('ssl_verify_peer', false); $consumer_request = new HTTP_OAuth_Consumer_Request(); $consumer_request->accept($http_request); $consumer->accept($consumer_request);
認証URLを取得
リクエストトークンを取得し、それを元に認証URLを取得します。リクエストトークンを得る際には、コールバックURLを合わせて投げます。
$consumer->getRequestToken('https://twitter.com/oauth/request_token', 'コールバックURL'); $request_token = $consumer->getToken(); $request_token_secret = $consumer->getTokenSecret(); $auth_url = $consumer->getAuthorizeUrl('https://twitter.com/oauth/authorize');
取得した「$auth_url」へアクセスすると、Twitter本サイトの認証画面に遷移します。認証画面で認証を経ると、先にセットした「コールバックURL」に自動遷移するしくみです。
アクセストークンを取得
認証に成功してコールバックしてきたら、アクセストークンが投げられてくるので、これをセッションやDBなどに保持しておくと後々便利です。
$consumer->setToken($request_token); $consumer->setTokenSecret($request_token_secret); $verifier = $_GET['oauth_verifier']; $consumer->getAccessToken('https://twitter.com/oauth/access_token', $verifier); $access_token = $consumer->getToken(); $access_token_secret = $consumer->getTokenSecret();
認証が成功した場合、「oauth_verifier」がコールバックで返ってきます。一方で、認証が失敗した場合には「denied」が返ってきます。これらを判定して、処理を分けるといいでしょう。
つぶやいてみる
取得したアクセストークンを使って、「てすとです」とつぶやく例です。
$consumer->setToken($access_token); $consumer->setTokenSecret($access_token_secret); $res = $consumer->sendRequest("https://twitter.com/statuses/update.xml", array('status' => 'てすとです'), "POST");
アクセストークンを使うことで、フォローしたり、リツイートしてり、設定を変更したりと、Twitter本サイトで可能な操作がほとんどできてしまいます。
アクセストークンを保持することで、認証の処理をスキップして連続で処理することができます。つまり、上の例だと「コンシュマキーの設定」から「つぶやいてみる」が実行できるわけです。アクセストークンがあればなんでもできちゃうので、保持するにしても扱いに注意が必要です。
また、急激な普及をみせるTwitterだけに、Twitter APIの仕様は日々変更されています。上の例は、現時点での動作は確認済みですが、今後は保障できません。
コメントする