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の項目参照。