Twitter API を OAuth認証で使う場合の勘所

投稿日:

 このテのエントリを書くのは、私には大変めずらしいことだが、備忘録がわりに書く。

 ツイッター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
  (出力略)

 などとする。私の環境の場合だが、まあ、多分、どんな環境でも考え方は同じだろう。

 それから、ツイッターのコンシューマキーとコンシューマシークレットを取る。これには、ツイッターのフォームから申込む。

 この申し込みでは、「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つのパラメータをペーストして作動させれば、ツイッターに「ほげほげ」と書き込まれたことだろう。

 こうすることにより、自分のアプリケーション名をタイムラインに表示するなどできるようになる。

投稿者: 佐藤俊夫

 50代後半の爺。技術者。元陸上自衛官。2等陸佐で定年退官。ITストラテジストテクニカルエンジニア(システム管理)基本情報技術者

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください