Twitter/OAuth
概要
Twitterに外部アプリケーションから投稿する方法。OAuthを利用する。
まえおき
PHPとPearのHTTP_OAuthを利用してTwitterAPIを利用する。
> pear install HTTP_Request2
> pear install HTTP_OAuth
または、チャンネルとバージョン指定で。
>pear install channel://pear.php.net/HTTP_Request2-0.4.1
>pear install channel://pear.php.net/HTTP_OAuth-0.1.4
ちなみに、Windows+xamppの場合は、コマンドプロンプトを立ち上げて
pear install 〜
とする。
流れ
アプリケーション新規登録
http://twitter.com/apps/
よりアプリケーションの情報を登録し、Consumer keyとConsumer secretを入手する。
コールバックURLは、実際に利用するコールバックURLと異なってもOKなので、ローカル開発中は適当に。
アプリケーション登録画面

キー取得

アクセストークンの取得
認証用URLを発行し、アクセストークンを取得する。
01.requestToken.php
session_start();
require_once "HTTP/OAuth/Consumer.php";
$consumerKey = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$consumerSecret = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$callbackUrl = "http://localhost/twitter/02.callback.php";
// 利用準備
$oAuth = new HTTP_OAuth_Consumer($consumerKey, $consumerSecret);
$httpRequest = new HTTP_Request2();
$httpRequest->setConfig("ssl_verify_peer", false);
$consumerRequest = new HTTP_OAuth_Consumer_Request;
$consumerRequest->accept($httpRequest);
$oAuth->accept($consumerRequest);
// リクエストトークンを取得する
$oAuth->getRequestToken("https://twitter.com/oauth/request_token", $callbackUrl);
// 取得したリクエストトークン(Secret)を、セッションに保存(コールバック先で利用するため)
$_SESSION["oauth_request_token_secret"] = $oAuth->getTokenSecret();
// 認証用URLを発行する
$authorizeUrl = $oAuth->getAuthorizeURL("https://twitter.com/oauth/authorize");
// リダイレクト
header("Location: " . $authorizeUrl);
die();
?>
先のコードで、コールバック先に02.callback.phpを指定しているので、利用者により認証画面を通過すると、http://localhost/twitter/02.callback.phpが呼び出される
02.callback.php
session_start();
require_once "HTTP/OAuth/Consumer.php";
$consumerKey = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$consumerSecret = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
// 利用準備
$oAuth = new HTTP_OAuth_Consumer($consumerKey, $consumerSecret);
$httpRequest = new HTTP_Request2();
$httpRequest->setConfig("ssl_verify_peer", false);
$consumerRequest = new HTTP_OAuth_Consumer_Request;
$consumerRequest->accept($httpRequest);
$oAuth->accept($consumerRequest);
// リクエストトークンの設定
$oAuthToken = $_GET{"oauth_token"};
$oAuth->setToken($oAuthToken);
// セッションからリクエストトークン(Secret)を取得する
$oAuth->setTokenSecret($_SESSION["oauth_request_token_secret"]);
// TwitterからGETで渡されたoauth_verifierパラメータ
$oAuthVerifier = $_REQUEST["oauth_verifier"];
// アクセストークンをリクエスト
$oAuth->getAccessToken("https://twitter.com/oauth/access_token", $oAuthVerifier);
// 結果(アプリケーション+ユーザで一意なので、DBやファイルなどに保存しておく)
print $oAuth->getToken();
print "<br>";
print $oAuth->getTokenSecret();
?>
ポスト
03.post.php
session_start();
require_once "HTTP/OAuth/Consumer.php";
$consumerKey = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
$consumerSecret = "[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]";
// 利用準備
$oAuth = new HTTP_OAuth_Consumer($consumerKey, $consumerSecret);
$httpRequest = new HTTP_Request2();
$httpRequest->setConfig("ssl_verify_peer", false);
$consumerRequest = new HTTP_OAuth_Consumer_Request;
$consumerRequest->accept($httpRequest);
$oAuth->accept($consumerRequest);
// アクセストークンを設定
$oAuth->setToken("[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]");
$oAuth->setTokenSecret("[XXXXXXXXXXXXXXXXXXXXXXXXXXXX]");
// 投稿
$result = $oAuth->sendRequest("https://twitter.com/statuses/update.xml", array("status"=>"Test on OAut00h API2"), "POST");
// 結果(ちゃんとパースしましょう)
print_r($result);
?>

