前回の続き。書籍”公開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
関連エントリー