OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる
この記事は賞味期限切れです。(更新から1年が経過しています)
PHPでTwitterのAPIを利用する方法は何度かPEARのServices_Twitterと絡めて記事にした事がありましたが、 今回はもっと手軽に導入できるOpauthとtmhOAuthを紹介してみます。
認証はOpauthで
Opauthは、様々なOAuth認証を一手に引き受けてくれる認証フレームワークです。
執筆時に公式に紹介されていた利用可能なサービスは、Twitter・Facebookなどを含め11件。 これらのサービスへの認証機能は「ストラテジー」という形で外部モジュールとして提供されます。 所謂ストラテジーパターンと呼ばれる物ですね。
その使い方は、認証のみにフォーカスしているライブラリなだけあって恐ろしくシンプルで簡単。 早速試してみます。
インストール
公式のダウンロードページからダウンロードするか、 Githubにリポジトリが公開されているのでそこからcloneします。
公式の「Opauth bundled with examples」からなら、Twitter、Google、Facebookのストラテジーも同梱されているので 最初に試す際にはこれがおすすめです。 (それ以外ではストラテジーが空っぽの状態なので、別途ダウンロードしてくる必要があります)
設定
ダウンロードして解凍・設置したら、設定ファイルを用意します。 opauth.config.php などとしておきましょう。
$opauth_config = array(
/**
* アプリケーションへのパス
*/
"path" => "/the/path/to/",
/**
* Twitterで認証した後に戻るコールバックURL。
* {path} は前述のpathを展開してくれる。
*/
"callback_url" => "{path}callback.php",
/**
* ハッシュの生成に使われる文字列。任意の文字列を入れておく。
*/
"security_salt" => md5("foobar"),
/**
* ここからがストラテジーの設定
*/
"Strategy" => array(
/**
* Twitterストラテジーの設定
* key, secret はTwitterの公式から取得。
*/
"Twitter" => array(
"key" => "[consumer_key]",
"secret" => "[consumer_secret]"
)
)
);
consumer_key と consumer_secret は、 事前にTwitterでアプリケーションを登録して、自前の物を取得しておきましょう。
試してみる
Twitterの認証画面へリダイレクト
まず、Twitterの認証画面へリダイレクトするスクリプトを書きます。 ユーザはログイン時はこのページにアクセスする事になります。
<?php
require "/the/path/to/Opauth.php";
require "/the/path/to/opauth.config.php";
new Opauth($opauth_config);
ライブラリと設定を読み込んでインスタンスを初期化するだけです。
認証画面のURLの取得やらリクエストトークンの取得やらリダイレクト処理やら、
面倒な部分は全て代行してくれます。素晴らしい。
アクセストークンを取得
今度は、Twitterの認証画面から返ってきたユーザのアクセストークンを取得します。
デフォルトの設定では、認証情報は全て$_SESSIONに入るので
事前に*session_start()* しておきましょう。
<?php
session_start();
require "/the/path/to/Opauth.php";
require "/the/path/to/opauth.config.php";
/**
* コールバック時には第二引数にfalseを入れて初期化する。
*/
$opauth = new Opauth($opauth_config, false);
/**
* 認証情報を取得します。
*/
if(isset($_SESSION["opauth"]) && isset($_SESSION["credentials"])){
$uid = $_SESSION["opauth"]["auth"]["id_str"]; // Twitterの数字のID
$access_token = $_SESSION["credentials"]["token"]; // アクセストークン
$access_token_secret = $_SESSION["credentials"]["secret"]; // 秘密のアクセストークン
}
コールバック時も、インスタンスを初期化してセッションから情報を取得するだけです。
ここで取得したアクセストークンを使ってTwitterAPIにアクセスするわけですが、
Opauthは認証を代行するライブラリなので、その為の機能は備えていません。
ここから先は、他のライブラリに代行してもらうことにします。
APIの利用はtmhOAuthで
tmhOAuthは、PEARのServices_TwitterのようにTwitterAPIへのアクセスを代行してくれるライブラリです。
勿論認証機能も備えていますが、あまりにもOpauthが楽すぎたので作業分担をしてもらいます。
その特徴としては、(ほぼ)単ファイルで構成されていること。
tmhOAuth.phpをとってきて読み込むだけでその機能を利用する事ができるので、導入が容易いですね。
(正確には、tmhUtilities.php というユーティリティ用のファイルが同梱されていますが、
依存しているわけではありません)
試してみる
基本的には、前項で取得した4つのトークンを引数にして初期化して、
あとはTwitterAPIへのリクエストを行うだけです。
<?php
require "/the/path/to/tmhOAuth.php";
/**
* tmhOAuthを初期化。
* コンストラクタの引数はトークンをまとめた連想配列。
*/
$twitter = new tmhOAuth(
array(
"consumer_key" => "[consumer_key_for_your_application]",
"consumer_secret" => "[consumer_secret_for_your_application]",
"user_token" => "[access_token_of_the_user]",
"user_secret" => "[access_token_secret_of_the_user]"
)
);
/**
* requestメソッドでTwitterAPIにリクエストを送る。
* ここではユーザーのホームタイムラインを取得してみる。
*/
$status = $twitter->request(
"GET", // リクエストメソッド
$twitter->url("1/statuses/home_timeline"), // エンドポイントを指定
array( "count" => 8 ) // パラメータ
);
/**
* requestの返り値はHTTPのステータスコード
*/
if($status == 200){
/**
* データはメンバのresponseの中に、
* さらに生のデータはその中の"response"の中にJSONで格納されている。
*/
$response = $twitter->response;
$data = json_decode($response["response"]);
var_dump($data); // あとは煮たり焼いたりする
}
無事タイムラインを取得出来ましたでしょうか。
requestの返り値に注意しましょう。
こちらのライブラリもまた、かなりシンプルな使い勝手になっていますね。
まとめ
PEARのServices_Twitterには、個人的にいくつかの不安がありました。
- ながらくβ版のままで、あまりメンテナンスされていない
- ローカルコピーでプロジェクトに同梱しづらい
そこで他の選択肢を探していましたところ、
これらの2つのライブラリが候補として挙がって来ました。
お手軽さも上々なので、今後是非試していきたいリソースです。
コメント