HTTP_OAuthでアクセストークンを取得するときにユーザIDとスクリーン名を取得できるようにするための修正
Twitter API 仕様書*1によると、アクセストークンを取得するための認証に成功すると、アクセストークン、アクセストークンシークレットの他にユーザID、スクリーン名が返ってくることになっています。
PEARのHTTP_OAuthのバージョン0.1.18では認証成功時にアクセストークンとアクセストークンシークレットは取得できます。しかし、ユーザIDおよびスクリーン名を取得することはできないようです。
なので、これらを取得できるように修正してみました。
修正の対象となるのは、Consumer.php内のクラスHTTP_OAuth_Consumerです。
クラス変数を追加する
<?php protected $userId = null; protected $screenName = null; ?>
既存のメソッドに書き加える
<? public function getAccessToken($url, $verifier = '', array $additional = array(), $method = 'POST' ) { if ($this->getToken() === null || $this->getTokenSecret() === null) { throw new HTTP_OAuth_Exception('No token or token_secret'); } $this->debug('Getting access token from ' . $url); $additional['oauth_verifier'] = $verifier; $this->debug('verifier: ' . $verifier); $response = $this->sendRequest($url, $additional, $method); $data = $response->getDataFromBody(); if (empty($data['oauth_token']) || empty($data['oauth_token_secret'])) { throw new HTTP_OAuth_Consumer_Exception_InvalidResponse( 'Failed getting token and token secret from response', $response ); } $this->setToken($data['oauth_token']); $this->setTokenSecret($data['oauth_token_secret']); /* * ここから追加 */ $this->setUserId($data['user_id']); $this->setScreenName($data['screen_name']); /* * 追加ここまで */ } ?>
メソッドを新たに追加する
<? public function getUserId() { return $this->userId; } public function setUserId($userId) { $this->userId = $userId; } public function getScreenName() { return $this->screenName; } public function setScreenName($screenName) { $this->screenName = $screenName; } ?>
使い方
スクリーン名、ユーザIDを取得するときはアクセストークン等を取得するときに、以下のようにすれば取得できます。
<?php $screenName = $consumer->getScreenName(); $userId = $consumer->getUserId(); ?>