2015/10/25 久米
※ボットなどの他ユーザに無関係なアプリを作る場合は、次の次の画面?あたりで、アクセストークンを取得すればいい。
4節の複雑なアクセストークン取得スクリプトは不要。
※アクセス権を読み書きにする(次の次の画面?あたり)。読みだけだとtweetができない。あとで変更可。
phpライブラリ | OAuth1.0 |
OAuth2.0 | 備考 |
twitteroauth | ○ | × | twitter専用 |
HybridAuth | ○ | ○ | |
eden | ○ | ○ | |
・・・ |
授業では分かりやすいtwitteroauthを使用する。
htdocs | ||||||
┣ |
web3 | |||||
┣ |
oauth | |||||
┣ |
||||||
┣ |
フォルダtwitteroauth | ダウンロードしたライブラリ | twitteroauth-0.6.1をtwitteroauthに名前変更 | |||
┃ |
srcフォルダ、autoload.phpなどが入っている | |||||
┣ |
config.php | ・・・連携用 keyとcallback url | ┓ | |||
┣ |
start.php | ・・・連携用 開始ページ | ┃ | |||
┣ |
callback.php | ・・・連携用 | 自作php | |||
┣ |
checksession.php | ・・・連携用 | ┃ | |||
┣ |
application.php | ・・・自作アプリホーム | ┃ | |||
┣ |
timeline.php | ┃ | ||||
学内プロキシ―を通す場合は、$connection生成直後に、下記スクリプトを実行。
$connection->setProxy(array( 'CURLOPT_PROXY' => 'proxy00.jec.ac.jp', 'CURLOPT_PROXYUSERPWD' => '', 'CURLOPT_PROXYPORT' => 8080, ));
ファイル名 | ソース |
config.php キーと callback url を定義 |
<?php define('CONSUMER_KEY', 'Heh5FrdgV456HyseeSwblAg'); define('CONSUMER_SECRET', '6MzGtf54UTyBawEUT025830FErg5VMLop9seeSwjFGmqK'); define('OAUTH_CALLBACK', 'http://192.168.1.92/web3/oauth/twitter/callback.php'); |
start.php リクエストトークン 取得し、 認証開始ページの リンクを表示 |
<?php session_start(); require_once('config.php'); require_once('twitteroauth/autoload.php'); use Abraham\TwitterOAuth\TwitterOAuth; $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); //request tokenを取得 $request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK)); $_SESSION['oauth_token'] = $request_token["oauth_token"]; $_SESSION['oauth_token_secret'] = $request_token["oauth_token_secret"]; //認証用 url を取得 $url = $connection->url('oauth/authorize', array('oauth_token' => $request_token['oauth_token'])); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Twitter連携の練習アプリ</title> </head> <body> <h1>Twitter連携の練習アプリ</h1> <p><a href="<?php print $url; ?>">自分のTwitterアカウントをこのアプリと連携させる</a></p> </body> </html> |
callback.php アプリ連携承認後 twitter側で このページを 開く様指示される ここで アクセストークン取得 |
<?php session_start(); require_once('config.php'); require_once('twitteroauth/autoload.php'); use Abraham\TwitterOAuth\TwitterOAuth; //URLパラメータからoauth_verifier(ユーザが連携を認証した印)を取得 if(!isset($_GET['oauth_verifier']) || $_GET['oauth_verifier'] === ''){ exit('oauth_verifier error!'); } $oauth_verifier = $_GET['oauth_verifier']; //リクエストトークンでOAuthオブジェクト生成 $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET,$_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); //oauth_verifierを使ってAccess tokenを取得 $access_token = $connection->oauth("oauth/access_token", array("oauth_verifier" => $oauth_verifier)); //セッション関数に入れておいたコールバック用トークンを差し替える $_SESSION['oauth_token'] = $access_token["oauth_token"]; $_SESSION['oauth_token_secret'] = $access_token["oauth_token_secret"]; //user_idとscreen_nameもついでにセッション保存 $_SESSION['user_id'] = $access_token['user_id']; $_SESSION['screen_name'] = $access_token['screen_name']; //全ての準備整ったので(つまりアクセストークン取得できたので)ホームページへリダイレクト header("Location: application.php"); exit; |
checksession.php アクセストークンが あるかチェック用 スクリプト。 各ページで使うので ファイルにしておく。 |
<?php //セッションのアクセストークンのチェック if((isset($_SESSION['oauth_token']) && $_SESSION['oauth_token'] !== NULL) && (isset($_SESSION['oauth_token_secret']) && $_SESSION['oauth_token_secret'] !== NULL)){ //ok donothing }else{ exit("error!!"); } |
application.php 本アプリの ホームページ アクセストークン 取得したので、 あとは自由に APIアクセス |
<?php session_start(); require_once('checksession.php'); //callbackで取得したidと名前 $user_id = $_SESSION['user_id']; $screen_name = $_SESSION['screen_name']; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Twitter連携の練習アプリ</title> </head> <body> <h1>Twitter連携の練習アプリ</h1> <p>連携に成功しました。<br/> こんにちは! <?php print $screen_name; ?>さん<br/> ユーザーID <?php print $user_id; ?></p> <p><a href="timeline.php">ホームタイムライン</a></p> <p><a href="usertimeline.php">ユーザタイムライン</a></p> <p><a href="tweet.php">ツイート(ほんとにツイートするので注意)</a></p> <p><a href="end.php">アプリ連携終了</a></p> </body> </html> |
timeline.php 承認した人の ホームタイムライン 取得 TwitterAPI TwitterOAuth Doc |
<?php session_start(); require_once('config.php'); require_once('twitteroauth/autoload.php'); use Abraham\TwitterOAuth\TwitterOAuth; require_once('checksession.php'); $connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']); //home_timelineを取得 $statuses = $connection->get("statuses/home_timeline", array("count" => 25, "exclude_replies" => true)); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Twitter連携の練習アプリ</title> </head> <body> <h1>Twitter連携の練習アプリ</h1> <p><a href="application.php">ホームに戻る</a></p> <h2>タイムライン</h2> <p><pre><?php var_dump($statuses); ?></pre></p> </body> </html> |
※アクセストークンはユーザごとに固定なので、アプリサーバにアクセストークンを保存しておけば、次からそれを使えば、application.phpから始められる。
逆に言うと、ユーザは一度連携許可すれば、2度目以降は面倒な連携許可作業をしなくてよい。
Twitterアカウントホーム>設定>アプリ連携
から解除
演習1 timeline.php で取得したオブジェクトを綺麗に表示してみよ。(細かいデータは省いて) TwitterAPI
演習2 user_timeline(自分のタイムライン)を取得するusertimeline.phpを作れ。 TwitterAPI
ヒント urlを変えるだけでよい
演習3 ツイートするtweet.phpを作れ。(フォーム投稿でユーザ自身が入力した文字をツイートせよ。) TwitterAPI
ほんとにツイートされるので試すかどうかは各自判断。
その後、timeline.phpへリダイレクトせよ。
ヒント TwitterOAuth Doc のPOSTの項目参照。