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にする必要があります。

アプリの作成

イメージとしては以下のようなプログラムを作ります。
テキストボックスに入力された文字をツイートする機能と、タイムラインを表示する機能です。

プログラム

プログラムの流れは以下です。 

    1. コンシュマ/シークレットキーを使用して、リクエスト/シークレットトークンを取得
    2. 認証URLにリダイレクト
    3. アプリの認証を許可し、PINコード取得
    4. リクエスト/シークレットトークン、PINコードを使って、アクセス/シークレットトークンを取得
    5. 以後は、コンシュマ/シークレットキー、アクセス/シークレットトークンを使用してAPIを呼び出す。
<?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>";
}

?>