277
295

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【PHP】新TwitterOAuthでログイン機能を実装する

Last updated at Posted at 2015-03-23

TwitterOAuth がいつの間にか新しくなっていたので、新しい使い方をメモしておこうと思います。

意外と簡単かもしれません。

#TwitterOAuth をダウンロードする
https://twitteroauth.com/

kobito.1427101355.400999.png

まず、TwitterOAuth の Web ページから、TwitterOAuth をダウンロードします。Composer でのインストール方法がデフォルトで表示されていますが、「Mannual install」ボタンをクリックすると、TwitterOAuth のダウンロード方法が表示されます。

#APIキーを発行する
https://apps.twitter.com/

kobito.1427103407.446539.png

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 以降で使える、とのことでした。( :point_right: 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"
}

間違いや意見等ありましたら、ぜひコメントください。

このサンプルが動作しない場合も、コメントください!

#参考文献

277
295
13

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
277
295

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?