Mach3.laBlog

PEARでTwitterのOAuthをしてみる備忘録

この記事は賞味期限切れです。(更新から1年が経過しています)

この記事の情報は古くなっています。PEARライブラリの替わりに、下記の記事のライブラリをお勧めします。
シンプルなOAuth認証ライブラリ「HybridAuth」を試してみた
OpauthとtmhOAuthで極めてお手軽にTwitterと連携してみる

Twitterが最早ただのサービスとしてではなく「プラットフォーム」として広まる中で、
これを活用したサービスの開発は我々の一つの課題となりつつあります。
anywhereを利用した認証は以前触れましたが、
今回はPHPでOAuth認証をする方法をまとめてみます。

PEARでTwitterのOAuthをしてみる備忘録

事前準備

アプリケーションの登録

まずはTwitterでアプリケーションを登録しなければなりません。
» New Twitter Application | dev.twitter.com
※個人的にここのCaptchaはかなり手強かったです

必要事項を明記して登録すると、OAuthに必要な情報を出力してくれます。
特に必要な項目は、次の三つ。きちんと控えておきます。

  • Consumer key
  • Consumer secret
  • Registerd OAuth Callback URL
    (Twitter側で認証が完了した後で戻ってくる為のページURL)

PEARパッケージのインストール

以下のパッケージが必要になりますので、インストールしておきます。

STEP:0 認証の準備

まず情報を整理して変数に突っ込んでおきましょう。
また、PEARパッケージのロードとsession_startも忘れずに。

session_start();

// [1] ライブラリのロード
require_once("Services/Twitter.php");
require_once("HTTP/OAuth/Consumer.php");

// [2] URL情報
$request_token_url = "http://api.twitter.com/oauth/request_token";
$access_token_url = "http://api.twitter.com/oauth/access_token";
$authorize_url = "http://api.twitter.com/oauth/authorize";

// [3] アプリケーションの情報
$consumer_key = "<貴方のConsumer Key>";
$consumer_secret = "<貴方のConsumer Secret>";
$callback_url = "<貴方のCallback URL>";

2 URL情報は共通です。
3 アプリケーションの情報は各々固有な物になるので、
登録時にもらったキーと設定したURLを格納します。

STEP1: 「リクエストトークン」を取得

まずはじめにHTTP_OAuthを介して「リクエストトークン」を頂き、
Twitterの認証用のURLを取得します。
そして必要とあらば、リダイレクトさせてあげます。

// [1] インスタンス生成
$consumer = new HTTP_OAuth_Consumer( $consumer_key, $consumer_secret );

// [2] getRequestTokenでリクエストトークンを取得
$consumer->getRequestToken( $request_token_url, $callback_url );

// [3] getToken/getTokenSecretで、トークンをセッションに保存
$_SESSION["request_token"] = $consumer->getToken();
$_SESSION["request_token_secret"] = $consumer->getTokenSecret();

// [4] getAuthorizeUrlでURLを取得
$auth_url = $consumer->getAuthorizeUrl( $authorize_url );

// [5] 必要とあらばリダイレクト
header( "Location: " . $auth_url );

STEP:2 Twitter側でアプリケーションの使用を「許可」する

アプリケーションの使用を許可

認証用のURLに飛ばすとユーザにはこんなページが表示されます。
「許可する」をクリックすると、アプリケーション登録時に設定した「Callback URL」に、
パラメータにトークンを携えて戻ってきてくれます。

こんな感じに。

http://www.example.com/?oauth_token=<トークン>&oauth_verifier=<トークン>

STEP:3 「アクセストークン」を取得する

今度は、STEP2で飛ばされた先の「Callback URL」での処理となります。
ユーザがパラメータに携えてきたトークンを元に、「アクセストークン」を取得します。
STEP1とは別スクリプトになるケースも多いと思いますが、(その前提で書いています)
STEP:0での変数が必要になるので忘れずにロード/格納しておきましょう。

// [1] インスタンスの生成
$consumer = new HTTP_OAuth_Consumer( $consumer_key, $consumer_secret );

// [2] セッションに保存しておいたリクエストトークンを$consumerにセットする
$consumer->setToken( $_SESSION["request_token"] );
$consumer->setTokenSecret( $_SESSION["request_token_secret"] );

// [3] getAccessTokenでアクセストークンを取得
$consumer->getAccessToken( $access_token_url, $_GET["verifier"] );

// [4] セッションにアクセストークンを保存
$_SESSION["access_token"] = $consumer->getToken();
$_SESSION["access_token_secret"] = $consumer->getTokenSecret();

パラメータで渡されたトークンは、3の第二引数で使用されます。
4で生成されたアクセストークンが最終的なトークンとなります。(お疲れ様でした!)

STEP:4 貰った「アクセストークン」でAPIにアクセス

いよいよアクセストークンを元に、TwitterAPIにアクセスします。
今まで通りにHTTP_OAuth_Consumerクラスを用いるのですが、
コンストラクタの第3/第4引数にアクセストークンを渡す点に注意です。

// [1] コンシューマインスタンスを生成
$consumer = new HTTP_OAuth_Consumer(
    $consumer_key,
    $consumer_secret,
    $_SESSION["access_token"],
    $_SESSION["access_token_secret"]
);
// [2] Twitterインスタンスを生成し、コンシューマを渡す
$twitter = new Services_Twitter;
$twitter->setOAuth($consumer);

これで$twitterにTwitterAPIを使う能力が備わったはずです。(なんかかっこいい)
試しにその能力を奮ってみましょう。

// ユーザのホームタイムラインを出力してみる
$timeline = $twitter->statuses->home_timeline();
foreach($tl as $t){
    echo $t->text;
    echo "<br />";
}

連々とツイートが表示されたら成功です。
実際に$twitterにどのような力が備わるのかについては、
公式のTwitterAPIドキュメントをご参照ください。
cf) Twitter API Wiki / Twitter API Documentation

まとめ

とにかくトークンがいっぱい飛び交うので気がとーくんなります。
今後使う機会も多くなって来ると思うので、覚えておかねば…。


2010/10/25
URLをhttpsからhttpに変更。SSLを使う場合は別途設定が必要になります。
PHPでTwitter APIのOAuthを使う方法まとめ – 頭ん中

コメント

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*