前回の続き。
とりあえずZend_Oauthで、普通にOAuthログインを行ってみます。
ちなみにZend_Service_Twitterというのがあるのですが、こちらは使いません。
なにそれ。
やることは実はチュートリアルに全部書いてあります。
index.php
<?php //あ //require require_once('Zend/Oauth/Consumer.php'); //セッション session_start(); //OAuthオプション $zf_oauth_config = array( //twitterにログイン後戻ってくるURL 'callbackUrl' => 'http://localhost/callback.php', //リダイレクト先の情報 'siteUrl' => 'http://twitter.com/oauth', 'requestTokenUrl' => 'https://twitter.com/oauth/request_token', 'accessTokenUrl' => 'https://twitter.com/oauth/access_token', 'authorizeUrl' => 'https://twitter.com/oauth/authorize', //Consumer keyとConsumer secret 'consumerKey' => '1234567890', 'consumerSecret' => '9876543210' ); $zf_oauth = new Zend_Oauth_Consumer($zf_oauth_config); //リクエストトークンを保存しておく $zf_request_token = $zf_oauth->getRequestToken(); $_SESSION['TWITTER_REQUEST_TOKEN'] = $zf_request_token; //リダイレクト実行 $zf_oauth->redirect();
まずindex.phpでtwitterサイトへのリダイレクトを行います。
'callbackUrl'にtwitterサイトでの認証成功後にリダイレクトを行うURLを入れます。
'consumerKey'と'consumerSecret'には、前回作成したTwitterアプリのConsumer keyとConsumer secretを突っ込みます。
サンプルなので適当な数値が入ってますが実際は数十桁の英数文字列です。
リダイレクト先の情報は基本的に固定なので変える必要はないみたいです。
実行すると、Zend_Oauth_Consumer::getRequestToken()で認証用のトークンを取得できます。
これは認証後にPHPからtwitterにアクセスする際に必要になる情報なので、必ず保存しておきます。
チュートリアルではserialize()してから保存していますが、中身は単なる配列なので別にシリアライズする必要はありません。
最後にZend_Oauth_Consumer::redirect()で、twitterサイトにリダイレクトを行います。
この際リクエストに?oauth_token=**という形式の長いパラメータが付きます。
twitter側では、このパラメータが付いたリクエストにアカウント操作の許可を与えるかどうかをユーザに聞きます。
許可を与えると'callbackUrl'で指定したURLにリダイレクトで戻ってきます。
このときに?oauth_token=**&oauth_verifier=**という二種類のパラメータが返ってきます。
oauth_tokenはリクエストに与えられた文字列で、oauth_verifierはベリファイ用の文字列です。
この返り値を使ってZend_Oauth_Consumerで最終的な認証を行います。
callback.php
<?php //require require_once('Zend/Oauth/Consumer.php'); //セッション session_start(); //OAuthオプション $zf_oauth_config = array( //必要らしい 'callbackUrl' => 'http://localhost/callback.php', 'siteUrl' => 'http://twitter.com/oauth', //Consumer keyとConsumer secret 'consumerKey' => '1234567890', 'consumerSecret' => '9876543210' ); $zf_oauth = new Zend_Oauth_Consumer($zf_oauth_config); //アクセストークンを取得 $zf_access_token = $zf_oauth->getAccessToken( $_REQUEST ,$_SESSION['TWITTER_REQUEST_TOKEN'] ); //アクセストークンを保存 $_SESSION['TWITTER_ACCESS_TOKEN'] = $zf_access_token; //リクエストトークンはもはや不要 $_SESSION['TWITTER_REQUEST_TOKEN'] = NULL;
アクセストークンを取得することができました。
今後twitterにアクセスする際、アクセストークンをくっつけて送信すると、twitter側ではそのリクエストは認証が行われたものだと判断して操作を許可します。
簡単に解説してみます。
まずindex.phpではコンシューマキー等からリクエストトークンを作成します。
twitterサイトに行く際にはリクエストトークンをくっつけて送信します。
twitterサイトで認証を行うと、リクエストトークンと共にベリファイコードが返ってきます。
callback.phpではベリファイコード等からアクセストークンを作成します。
このアクセストークンが、twitterで認証を行った証となります。
ここまでくれば後は簡単で、セッションに保存したアクセストークンを利用してtwitterの操作を行うことができます。
send.php
<?php //require require_once('Zend/Oauth/Consumer.php'); require_once('Zend/Json.php'); //セッション session_start(); //OAuthオプション $zf_oauth_config = array( //必要らしい 'callbackUrl' => 'http://localhost/callback.php', 'siteUrl' => 'http://twitter.com/oauth', //Consumer keyとConsumer secret 'consumerKey' => '1234567890', 'consumerSecret' => '9876543210' ); $zf_oauth = new Zend_Oauth_Consumer($zf_oauth_config); //アクセストークンを取得 $zf_access_token = $_SESSION['TWITTER_ACCESS_TOKEN']; //twitterに投稿する //Zend_Oauth_Clientを取得 $zf_client = $zf_access_token->getHttpClient($zf_oauth_config); //投稿先をセット $zf_client->setUri('http://twitter.com/statuses/update.json'); $zf_client->setMethod(Zend_Http_Client::POST); //投稿内容をセット $zf_client->setParameterPost('status', 'テスト投稿'); //リクエスト実行 $response = $zf_client->request(); //返り値を確認 $data = Zend_Json::decode($response->getBody()); $result = $response->getBody(); if (isset($data->text)) { $result = 'true'; }
なんかあんまり簡単に見えませんね。
次回はZend_Service_Twitterでも使ってみましょう。
ちなみに公式サイトサンプルの11行目は
$client = $token->getHttpClient($configuration);
ってなってますが正しくは
$client = $token->getHttpClient($config);
ですな。
PR
トラックバック
トラックバックURL: