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();
?>