TwitterAPIを使って、新規ツイート、タイムライン表示をしてみる。OAuth認証。
OAuth認証を使用して、新規ツイートと、最新の10件を取得できるプログラムを作ってみる。
準備
PEAR使って、必要な二つのライブラリ落とします。x.x.xには自分に合う環境のバージョンを指定
pear install --alldaps Services_Twitter-x.x.x
pear install --alldaps HTTP_OAuth-x.x.x
アプリの登録
TwitterAPIを使用するのに、まずTwitter上にアプリを登録しなくてはいけない。
詳しくは以下を参照。http://pentan.info/web_service/twitter/register_app.html
使用するアプリの登録が終わったら、以下の二つのキーと三つのURLをメモする。プログラム作成時に使います。
※使用するアプリのSSLサーバー構築していない場合は、httpsではなく、httpとしてメモをとっておきましょう。
-
- Consumer key
- Consumer secret
- Request token URL
- Authorize URL
- Access token URL
登録時の注意点として、AccessLevelをアプリの用途によって変更しなくてはいけません。デフォルトはRead-Onlyになっています。今回はツイートすることと、タイムライン取得できるプログラムを作成するため、Read and Writeにする必要があります。
プログラム
プログラムの流れは以下です。
<?php // 出力形式、文字コードの指定 header('Content-type: text/html; charset=UTF-8'); // コンシュマキー define('CONSUMER_KEY', 'ここに自分のコンシュマキーを入れる'); define('CONSUMER_SECRET', 'ここに自分のコンシュマシークレットキーを入れる'); // パッケージの読み込み require_once ('Services/Twitter.php'); require_once ('HTTP/OAuth/Consumer.php'); try{ session_start(); // 各トークン未取得の場合 if ( empty($_SESSION['request_token']) && empty($_SESSION['access_token']) ) { // HTTP_OAuth_Consumerインスタンスを作成 $oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY, CONSUMER_SECRET); // リクエストトークン取得:getRequectToken(リクエストトークンURL、コールバックURL) $oauth->getRequestToken('http://api.twitter.com/oauth/request_token','自分のコールバックURL'); // リクエストトークン格納 $_SESSION['request_token'] = $oauth->getToken(); // リクエストトークンシークレット格納 $_SESSION['request_token_secret'] = $oauth->getTokenSecret(); // OAuth認証ページへリダイレクト:getAutorizeUrl(Authorize URL) $url = $oauth->getAuthorizeUrl('http://twitter.com/oauth/authorize'); header('Location: ' . $url); exit; } // リクエストトークン取得済み、アクセストークン未取得の場合 if ( isset($_SESSION['request_token'],$_GET['oauth_verifier']) && empty($_SESSION['access_token']) ) { // 各パッケージクラスのインスタンスを作成 $twitter = new Services_Twitter; $oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY,CONSUMER_SECRET,$_SESSION['request_token'],$_SESSION['request_token_secret']); // アクセストークンを取得getAccessToken(Access token URL) $oauth->getAccessToken('http://twitter.com/oauth/access_token',$_GET['oauth_verifier'] ); // アクセストークン格納 $_SESSION['access_token'] = $oauth->getToken(); // アクセストークンシークレット格納 $_SESSION['access_token_secret'] = $oauth->getTokenSecret(); // リクエストトークンの割り当てを解除 unset($_SESSION['request_token']); unset($_SESSION['request_token_secret']); } // アクセストークン取得済みの場合 if ( isset($_SESSION['access_token']) ){ // 各パッケージクラスのインスタンスを作成 $twitter = new Services_Twitter; $oauth = new HTTP_OAuth_Consumer(CONSUMER_KEY,CONSUMER_SECRET,$_SESSION['access_token'],$_SESSION['access_token_secret'] ); // OAuth認証でツイッターにアクセス $twitter->setOAuth($oauth); // フォーム作成 twForm(); // メッセージが入力され「Tweet」が押された場合、ツイートする if ( isset($_POST['tweet']) && 0 < @strlen($_POST['tw_msg']) ){ $twitter->statuses->update($_POST['tw_msg']); echo "ツイートしました"; // 「Timeline」が押された場合、最新10件のタイムライン情報を表示 } else if (isset($_POST['timeline'])){ $result = $twitter->statuses->home_timeline(array('count'=>10)); echo '<pre>'; print_r($result); echo '</pre>'; } exit; } } catch (Exception $err) { // エラーメッセージ表示 $err->getMessage(); } // フォーム作成用関数 function twForm() { echo "<form name=\"twf\" method=\"post\" src=\"tw.php\">"; echo "いまどうしてる?:<br>"; echo "<input type=\"text\" name=\"tw_msg\" size=\"100\"><br>"; echo "<input type=\"submit\" name=\"tweet\" value=\"Tweet\"><br>"; echo "<input type=\"submit\" name=\"timeline\" value=\"Timeline\"><br>"; } ?>