このテのエントリを書くのは、私には大変めずらしいことだが、備忘録がわりに書く。
ツイッターAPIとOAuthをphpで使うのは、結局のところ、例えば「記事を書く場合」なら、
<?
$oauth =
new OAuth("コンシューマキー", "コンシューマシークレット",
OAUTH_SIG_METHOD_HMACSHA1,
OAUTH_AUTH_TYPE_URI);
$oauth -> setToken("アクセストークン", "アクセストークンシークレット");
$oauth -> fetch("http://twitter.com/statuses/update.xml",
array("status" => "ほげほげ"),
OAUTH_HTTP_METHOD_POST);
?>
……というコードを実行させる、ということである。これで、ツイッターに「ほげほげ」と書き込まれる。
それだけだ。それ以外に何もない。
ただ、そこまでにいろいろとやることがある。
まず、phpで「OAuth」オブジェクトが使えるようになっていなければならない。それを楽にセットするためにはpeclが動いていなければならない。今日現在はphpのOAuthはまだbetaであることにも注意が必要だ。
そこで、
# yum install php-pear
(途中出力及び対話略)
# yum install php-devel
(途中出力及び対話略)
# yum install curl-devel
(途中出力及び対話略)
# pecl install oauth-beta
(途中出力及び対話略)
# echo ‘
extension=oauth.so
‘ >>/etc/php.ini
# /etc/rc.d/init.d/httpd restart
(出力略)
などとする。私の環境の場合だが、まあ、多分、どんな環境でも考え方は同じだろう。
それから、ツイッターのコンシューマキーとコンシューマシークレットを取る。これには、ツイッターのフォームから申込む。
-
Applications Using Twitter(申し込みの入り口)
この申し込みでは、「Application Type」に「Browser」を選び、「Callback URL」に公開サーバに置いたプログラムのURLを正しく入力する必要がある。他の欄は適当で良い。「Application Name」は日本語も大丈夫だから、オリジナリティあふれる、気に入った名前にするといいだろう。
うまく申し込めば、画面が遷移し、コンシューマキーConsumer key、コンシューマシークレットConsumer secret、またその他の必要なAPIのURLが表示されるので、これをコピーして保存する。
次にやることは、アクセストークンとアクセストークンシークレットを取ることだ。
phpのマニュアルの中の「ウェブサービス」の項目の中に「OAuth」の項目があるから、それを見る。その中に、OAuthを使う一例がある。
これをコピーして、少しカスタマイズする。このカスタマイズの目的は、アクセストークンとアクセストークンシークレットをツイッターから貰い、それを表示させることにある。プログラムのファイル名は、あらかじめ「Callback URL」で申込んだものにする。私は次のようにカスタマイズした。
<?
//
// oauth.php
//
$CONSUMER_KEY = "取得したコンシューマキー";
$CONSUMER_SECRET = "取得したコンシューマシークレット";
$REQUEST_TOKEN_URL = "http://twitter.com/oauth/request_token";
$ACCESS_TOKEN_URL = "http://twitter.com/oauth/access_token";
$AUTHORIZE_URL = "http://twitter.com/oauth/authorize";
$TIMELINE_URL = "http://twitter.com/statuses/home_timeline.xml";
//
session_start();
if(!isset($_GET[‘oauth_token’]) && $_SESSION[‘state’] == 1){
$_SESSION[‘state’] = 0;
}
try {
$oauth
= new OAuth($CONSUMER_KEY, $CONSUMER_SECRET,
OAUTH_SIG_METHOD_HMACSHA1,
OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
if(!isset($_GET[‘oauth_token’]) && !$_SESSION[‘state’]) {
$request_token_info = $oauth -> getRequestToken($REQUEST_TOKEN_URL);
$_SESSION[‘secret’] = $request_token_info[‘oauth_token_secret’];
$_SESSION[‘state’] = 1;
header(‘Location: ‘.$AUTHORIZE_URL.
‘?oauth_token=’.$request_token_info[‘oauth_token’]);
exit;
} else if($_SESSION[‘state’] == 1) {
$oauth -> setToken($_GET[‘oauth_token’],$_SESSION[‘secret’]);
$access_token_info = $oauth -> getAccessToken($ACCESS_TOKEN_URL);
$_SESSION[‘state’] = 2;
$_SESSION[‘token’] = $access_token_info[‘oauth_token’];
$_SESSION[‘secret’] = $access_token_info[‘oauth_token_secret’];
}
echo "<p>ACCESS_TOKEN=".$_SESSION[‘token’]."\n";
echo "<p>ACCESS_TOKEN_SECRET=".$_SESSION[‘secret’]."\n";
echo "<p>\n";
$oauth -> setToken($_SESSION[‘token’],$_SESSION[‘secret’]);
$oauth->fetch($TIMELINE_URL);
$xml = $oauth -> getLastResponse();
print_r($xml);
} catch(OAuthException $E) {
print_r($E);
}
?>
これを「Callback URL」で申し込んでおいた公開サーバに正しく置く。
次にこのファイルにブラウザでアクセスする。この時に、起動しているブラウザが先にあるなら、一旦全部終了させ、新しく起動したブラウザでアクセスすることをおすすめする。そうしないと、最初はいいが、2度目・3度目に失敗する。
画面は一度ツイッターのサイトに遷移し、ユーザ名とパスワードを要求される。入力して「許可」のボタンをクリックすると、画面がまた遷移し、もとのスクリプトに帰ってくる。万事がうまくいっていれば、その時に「ACCESS_TOKEN=なになに・・・」「ACCESS_TOKEN_SECRET=なになに・・・」と表示され、その下にタイムラインが表示される。生XMLで表示されるかも知れないし、文字列がつながって表示されるかも知れない。それは環境による。うまく行かないときは、どこかが間違っている。
この「ACCESS_TOKEN」と「ACCESS_TOKEN_SECRET」をコピーしてとっておく。
本来ならば、「ACCESS_TOKEN」と「ACCESS_TOKEN_SECRET」は一定の期間で捨てられるので、このことはその都度その都度行わなければならないのだが、ツイッターは期限がないらしく、「ACCESS_TOKEN」と「ACCESS_TOKEN_SECRET」がずっと使える。
これで、「コンシューマキー」「コンシューマシークレット」「アクセストークン」「アクセストークンシークレット」の4つが揃った。
そこで、冒頭のコードとなる。冒頭のコードに得られた4つのパラメータをペーストして作動させれば、ツイッターに「ほげほげ」と書き込まれたことだろう。
こうすることにより、自分のアプリケーション名をタイムラインに表示するなどできるようになる。