前回の続き。書籍”公開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)
posted with amazlet at 12.01.24
ZAPA
工学社
売り上げランキング: 149253
工学社
売り上げランキング: 149253
関連エントリー
