WebプログラミングⅢ

 目次へ 前へ 次へ

2015/10/25 久米

5.OAuth

5-1. Twitter連携アプリ

1.Twitterにアプリを登録

Twitterアプリ登録

※ボットなどの他ユーザに無関係なアプリを作る場合は、次の次の画面?あたりで、アクセストークンを取得すればいい。
4節の複雑なアクセストークン取得スクリプトは不要。

※アクセス権を読み書きにする(次の次の画面?あたり)。読みだけだとtweetができない。あとで変更可。

 

2.ライブラリをダウンロード

phpライブラリ

OAuth1.0

OAuth2.0 備考
twitteroauth × twitter専用
HybridAuth  
eden  
・・・      

授業では分かりやすいtwitteroauthを使用する。

 

3.ファイル構成

htdocs            
web3          
 
oauth        
   
twitter      
     
フォルダ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  
     
     

 

4.連携アプリ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度目以降は面倒な連携許可作業をしなくてよい。

5.連携解除

Twitterアカウントホーム>設定>アプリ連携
から解除

 


演習1 timeline.php で取得したオブジェクトを綺麗に表示してみよ。(細かいデータは省いて) TwitterAPI

演習2 user_timeline(自分のタイムライン)を取得するusertimeline.phpを作れ。 TwitterAPI
 
ヒント urlを変えるだけでよい

演習3 ツイートするtweet.phpを作れ。(フォーム投稿でユーザ自身が入力した文字をツイートせよ。) TwitterAPI
ほんとにツイートされるので試すかどうかは各自判断。
その後、timeline.phpへリダイレクトせよ。
 
ヒント TwitterOAuth Doc のPOSTの項目参照。