TwitterOAuth がいつの間にか新しくなっていたので、新しい使い方をメモしておこうと思います。
意外と簡単かもしれません。
#TwitterOAuth をダウンロードする
https://twitteroauth.com/
まず、TwitterOAuth の Web ページから、TwitterOAuth をダウンロードします。Composer でのインストール方法がデフォルトで表示されていますが、「Mannual install」ボタンをクリックすると、TwitterOAuth のダウンロード方法が表示されます。
#APIキーを発行する
https://apps.twitter.com/
API キーの取得方法については割愛。
#ディレクトリ構成はこんな感じ
- http://www.example.com/
- common.php
- login.php
- callback.php
- mypage.php
- twitteroauth (上記URLからダウンロードしてきたファイル群)
#Twitter API を弄るために必要な値を定義する
<?php
//common.php
define( 'CONSUMER_KEY', 'Twitterのコンシュマーキー(APIキー)' );
define( 'CONSUMER_SECRET', 'Twitterのコンシュマーシークレット(APIシークレット)' );
define( 'OAUTH_CALLBACK', 'http://www.example.com/callback.php' );
#login.phpを作る
<?php
session_start();
require_once 'common.php';
require_once 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
//TwitterOAuth をインスタンス化
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);
//コールバックURLをここでセット
$request_token = $connection->oauth('oauth/request_token', array('oauth_callback' => OAUTH_CALLBACK));
//callback.phpで使うのでセッションに入れる
$_SESSION['oauth_token'] = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];
//Twitter.com 上の認証画面のURLを取得( この行についてはコメント欄も参照 )
$url = $connection->url('oauth/authenticate', array('oauth_token' => $request_token['oauth_token']));
//Twitter.com の認証画面へリダイレクト
header( 'location: '. $url );
#callback.phpを作る
Twitterの認証画面からここにリダイレクトされます。この処理が終わったら、 mypage.php
にリダイレクトされます。
<?php
session_start();
require_once 'common.php';
require_once 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
//login.phpでセットしたセッション
$request_token = []; // [] は array() の短縮記法。詳しくは以下の「追々記」参照
$request_token['oauth_token'] = $_SESSION['oauth_token'];
$request_token['oauth_token_secret'] = $_SESSION['oauth_token_secret'];
//Twitterから返されたOAuthトークンと、あらかじめlogin.phpで入れておいたセッション上のものと一致するかをチェック
if (isset($_REQUEST['oauth_token']) && $request_token['oauth_token'] !== $_REQUEST['oauth_token']) {
die( 'Error!' );
}
//OAuth トークンも用いて TwitterOAuth をインスタンス化
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $request_token['oauth_token'], $request_token['oauth_token_secret']);
//アプリでは、access_token(配列になっています)をうまく使って、Twitter上のアカウントを操作していきます
$_SESSION['access_token'] = $connection->oauth("oauth/access_token", array("oauth_verifier" => $_REQUEST['oauth_verifier']));
/*
ちなみに、この変数の中に、OAuthトークンとトークンシークレットが配列となって入っています。
*/
//セッションIDをリジェネレート
session_regenerate_id();
//マイページへリダイレクト
header( 'location: /mypage.php' );
##追記(2015/03/26)
11行目が $request_token = []
となっていましたが、動かない場合がある、ということで調べてみたところ、この短縮記法は、PHP 5.4 以降で使える、とのことでした。( http://php.net/manual/ja/language.types.array.php )
###追々記(2015/03/27)
PHP 5.4 から、 array()
の短縮記法である、 []
が使えます。
//以下の2行は、どちらも同じことをしている。
$hoge = array();
$hoge = [];
つまり、PHP 5.3 またはそれ以前を使っている場合、 []
は使えないということですが、 PHP 5.3 はすでにサポートが切れている ので、極力バージョンアップして、みんなで []
を使おう!ということです。(詳しくは、コメント欄参照)
@le_panda_noir さん、@mpyw さん、ありがとうございました!
#mypage.phpを作る
ここで、ユーザー情報を表示します。
<?php
session_start();
require_once 'common.php';
require_once 'twitteroauth/autoload.php';
use Abraham\TwitterOAuth\TwitterOAuth;
//セッションに入れておいたさっきの配列
$access_token = $_SESSION['access_token'];
//OAuthトークンとシークレットも使って TwitterOAuth をインスタンス化
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);
//ユーザー情報をGET
$user = $connection->get("account/verify_credentials");
//(ここらへんは、Twitter の API ドキュメントをうまく使ってください)
//GETしたユーザー情報をvar_dump
var_dump( $user );
こうすると、 $user
に、ユーザー情報が オブジェクトとして 格納されます。
実行結果の例:
object(stdClass)[7]
public 'id' => int 1224353684
public 'id_str' => string '1224353684' (length=10)
public 'name' => string 'SofPyon' (length=38)
public 'screen_name' => string 'sofpyon' (length=7)
public 'location' => string 'Japan' (length=5)
public 'profile_location' => null
(以下、まだまだ続くので省略)
あとは、ユーザー情報を表示したい場所に、以下のように出力すればOK(念のため htmlspecialchars()
などをかけた方が良い )
あなたの名前:
<?php echo $user->name; ?>
#Twitter API のドキュメントはここ
https://dev.twitter.com/rest/public
#(参考) $_SESSION['access_token']
について(2015-05-04追加)
配列。
- oauth_token
- oauth_token_secret
- user_id - 数字のID
- screen_name - これが、いわゆる Twitter ID
//例
array(4) {
["oauth_token"]=>
string(50) "(OAuthトークン)"
["oauth_token_secret"]=>
string(45) "(OAuthトークンシークレット)"
["user_id"]=>
string(10) "1224353684"
["screen_name"]=>
string(7) "sofpyon"
}
間違いや意見等ありましたら、ぜひコメントください。
このサンプルが動作しない場合も、コメントください!
#参考文献
- Sign in with Twitter - TwitterOAuth
- https://twitteroauth.com/redirect.php