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

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

クリスマスなり

投稿日:

 普段「クリスマスなど…」とくだらない屁理屈を言っている私も、子供には平凡な常識を付けたいと思っているから、クリスマスツリーも飾れば、ご馳走も用意するし、プレゼントも用意する。

 次女(小2)にはまだ、サンタクロースが来る。

 その点、長女(小6)など、実に落ち着き払ったものだが、次女は「お父さん、サンタクロース、来た、来た、来たんだよ!!」と例のように大はしゃぎだ。こう喜ばれると、こっちまで嬉しくなる。

「でもね、お父さん」

「?…何だ。どうした。」 「サンタクロースって、きっと、なにか、その辺のおっさんだと思うのよ。」

「??なぜだ?」

「だって、包みに『イーオン』のテープとかシールが貼ってあるんだもん。おっさんがイーオンで買って配ってるんだわ」

…しまった(笑)。

驚いた。

投稿日:

 最近「ツイッター」に凝っていて、あれはあれでなかなか面白いところもあり、ブログの更新も滞りがちな今日この頃である。

 クリスマスである。

 ささやかながら丸鶏を食べ、ワインを飲み、プレゼントなど用意する。

 数日ぶりにこのブログのアクセスログを確認して、なんだかいつもよりアクセスが多いことに気づいた。なんでだろう、と思って調べてみると、このブログが「ブログ人情報局」に紹介されていることがわかった。

 特段誰からも注目されることなどなく、亀がにじり這うように書き進めてきたブログだ。テーマも自宅の新築から雑感、そしてピアノへと遷移してきた。誰に見せようとも、ましてや褒められようとも思わず、思うところを書きなぐってきた。

 だが、そうは言うものの、いかなる人からも全く見られることを期待しない、というほどの強い決意まではない。誰かが見てくれるなら、それはそれで楽しいことだ。現に、ネット上のこととは言うものの、ブログを読んでくださった何人かの方々と、じつにささやかながら交流を持つこともでき、楽しみがひろがった。

 だから、ここへ来て、ちょっと紹介されると言うのはとてもうれしい。

 「なかなかの腕前」、と、褒めて貰えたのも嬉しいことだ。腕前など、とてもとるに足りないが……。

 イイ気にならず、かえって戒めとして、明日はチト気合を入れ、次女との連弾曲を練習しようと思う。

「王様の行進」 その0

投稿日:

 次女との連弾曲、何を弾くのだろう、と思っていたら、先生が子供向けの連弾の楽譜を沢山貸して下さり、「この中から選んで見てください」とのことである。

 貸して下さった楽譜の中に、「私はピアニスト 連弾曲集3」という本がある。

わたしはピアニスト 連弾曲集(3) わたしはピアニスト 連弾曲集(3)
価格:¥ 1,575(税込)
発売日:2002-05-09

 実は去年もすすめられた曲なのだが、この中に「王様の行進」という曲がある。この曲は、ビゼーの「アルルの女」の第2組曲の4曲目、「ファランドール」を編者の田中雅明氏が編曲したものだ。もととなったフランスの民謡も、「3人の王の行列」「王の行進」などという題名であると言う。

 次女と相談して、この曲を弾くことにした。

次女の連弾相手をすすめられる

投稿日:

 昨日は次女のピアノのレッスン日であった。妻によると、今年も次女のピアノの先生から、発表会での次女の連弾相手をお父様是非、とすすめられたという。

 よっしゃ、やりまっせ。

 前回の発表会は2月だったが、今回は2ヶ月近く遅いきたる春、3月28日(日)であるという。それまで、とにかく練習だ。

 だが、一体、どんな曲を弾くんだろう?。