HTTP_OAuthで認可を受けて twitter API (REST API Methods) を使う

前回の続き。書籍”公開API活用ガイド”の第10章:twitterを読んで実践。
コード打ち込んで動作確認までできた。


メモ

  • PEARライブラリに、HTTP_OAuth, HTTP_Request2, Net_URL2がある
  • アプリケーションの申請が必要:https://dev.twitter.com/


HTTP_OAuthで認可後、タイムライン表示&つぶやき投稿ページ:twitter_oauth.php

<?php session_start(); ?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>twitter OAuth practice</title>
</head>

<body>
<h1>twitter OAuth sample</h1>

<?php
$url = '申請時に登録したコールバックURL';
$consumer_key = '申請時に取得したconsumer key';
$consumer_secret = '申請時に取得したconsumer secret';

include 'HTTP/OAuth/Consumer.php';

$consumer = new HTTP_OAuth_Consumer($consumer_key, $consumer_secret);

$http_request = new HTTP_Request2();
$http_request->setConfig('ssl_verify_peer', false);

$consumer_request = new HTTP_OAuth_Consumer_Request;
$consumer_request->accept($http_request);

$consumer->accept($consumer_request);

if (isset($_SESSION['access_token'])) {
	// 認証済みの場合

	if (isset($_GET['logout'])) {
		// ログアウトする場合
		if ($_GET['logout'] == 'on') {
			session_destroy();
			echo '<a href="' . $url . '">ログアウトしました。ここをクリックしてください。</a>';
		}
	}
	else if (isset($_POST['q']) && ($_POST['q'] != "")) {
		// フォームからつぶやきが投稿されていた場合

		// 保存しておいたアクセストークンを読みだして設定する
		$consumer->setToken($_SESSION['access_token']);
		$consumer->setTokenSecret($_SESSION['access_token_secret']);

		$status = $_POST['q'];
		$response = $consumer->sendRequest("http://api.twitter.com/1/statuses/update.xml", array('status' => $status), "POST");
		$xml = simplexml_load_string($response->getBody());
		if (isset($xml->id)) {
			echo '<a href="http://twitter.com/' . $xml->user->screen_name . '/status/' . $xml->id . '">投稿内容を確認する</a>';
		}
		else {
			echo 'うまく投稿できなかったようです。<br />';
			echo $response->getBody();
		}
	}
	else {
		// それ以外の場合

		// つぶやきフォームを表示
		echo <<<postform
<p>いまどうしてる?</p>
<form method="POST" action="twitter_oauth.php">
<input type="text" name="q" size="80">
<input type="submit" value="ツイート">
</form>
<p><a href="twitter_oauth.php?logout=on">ログアウトしたい場合はこちら</a></p>
postform;

		// 保存しておいたアクセストークンを読みだして設定する
		$consumer->setToken($_SESSION['access_token']);
		$consumer->setTokenSecret($_SESSION['access_token_secret']);

		// APIを利用してホームタイムラインを取得
		$response = $consumer->sendRequest("http://api.twitter.com/1/statuses/home_timeline.xml", array('count' => '20'), "GET");

		// レスポンスXMLを解析する
		$xml = simplexml_load_string($response->getBody());
		if (isset($xml->status->id)) {
			foreach ($xml->status as $status) {
				echo '<img src="' . $status->user->profile_image_url . '" width=48 height=48> ';
				echo '<a href="http://twitter.com/' . $status->user->screen_name . '">' . $status->user->screen_name . '</a>:';
				echo $status->text;
				echo ' <a href="http://twitter.com/' . $status->user->screen_name . '/status/' . $status->id . '">' . $status->created_at . "</a><br />n";
			}
		}
		else {
			echo 'うまく投稿できなかったようです。<br />';
			echo '<pre>' . htmlspecialchars($response->getBody(), ENT_QUOTES) . '</pre>';
		}
	}
}
else {
	// 認証済みでない場合

	if (isset($_GET['oauth_verifier'])) {
		// twitterからのコールバックの場合

		$verifier = $_GET['oauth_verifier'];

		// 保存しておいたリクエストトークンを読みだして設定する
		$consumer->setToken($_SESSION['request_token']);
		$consumer->setTokenSecret($_SESSION['request_token_secret']);

		$consumer->getAccessToken('https://api.twitter.com/oauth/access_token', $verifier);
		$_SESSION['access_token'] = $consumer->getToken();
		$_SESSION['access_token_secret'] = $consumer->getTokenSecret();

		echo '<a href="' . $url . '">認証完了。ここをクリックしてください。</a>';
	}
	else {
		// 認証済みでなく、twitterからのコールバックでもない場合

		// リクエストトークンを取得
		$callback = $url;
		$consumer->getRequestToken('https://api.twitter.com/oauth/request_token', $callback);

		$_SESSION['request_token'] = $consumer->getToken();
		$_SESSION['request_token_secret'] = $consumer->getTokenSecret();

		$auth_url = $consumer->getAuthorizeUrl('https://api.twitter.com/oauth/authorize');

		echo '<a href="' . $auth_url . '">twitterで認証する</a><br />';
	}
}
?>

</body>

</html>
公開API活用ガイド (I・O BOOKS)
公開API活用ガイド (I・O BOOKS)

posted with amazlet at 12.01.24
ZAPA
工学社
売り上げランキング: 149253

関連エントリー

  1. twitter API (REST API Methods) でpublic_timelineを表示
  2. twitter bot (CRONによる定期処理)
  3. twitter API (Search API Methods)
  4. MediaWiki APIでWikipediaの情報を取得する
  5. 楽天ウェブサービス(RWS)を使ってアフィリエイトリンクをつくる(PHP/REST)
This entry was posted in 未分類 and tagged , , , , . Bookmark the permalink.