14

Zend_Service_Twitter コンポーネントは、2013 年 3 月 5 日に非推奨となる Twitters API v1.0 用のままです。そのため、Twitter API インタラクション v1.1 を備えた新しい Web サイトを作成したいと考えました。v1.0 ではすべて正常に動作しますが、URL を から に変更する/1//1.1/、HTTP ヘッダー コード 400 と JSON エラー メッセージBad Authentication data(コード: 215)で失敗します。

リクエストとアクセストークンを取得するには、同じままで、変更なしで既に機能しますが、このような資格情報を確認したい場合は、上記で説明したエラーが発生します。

// Take a look for the code here: http://framework.zend.com/manual/1.12/en/zend.oauth.introduction.html
$accessToken = $twitterAuth->getAccessToken($_GET, unserialize($_SESSION['TWITTER_REQUEST_TOKEN']));


// I have a valid access token and now the problematic part
$twitter = new Zend_Service_Twitter(array(
    'username' => $accessToken->getParam('screen_name'),
    'accessToken' => $accessToken
));
print_r($twitter->account->verifyCredentials());

その中のverifyCredentialsのコードを次のように変更しZend/Service/Twitter.phpました:

public function accountVerifyCredentials()
{
    $this->_init();
    $response = $this->_get('/1/account/verify_credentials.xml');
    return new Zend_Rest_Client_Result($response->getBody());
}

// to

public function accountVerifyCredentials()
{
    $this->_init();
    $response = $this->_get('/1.1/account/verify_credentials.json');
    return Zend_Json::decode($response->getBody());
}

今、return Zend_Json[...]この行の前に追加しました:

print_r($this->_localHttpClient->getLastRequest());

// And I get this output of it:

GET /1.1/account/verify_credentials.json HTTP/1.1
Host: api.twitter.com
Connection: close
Accept-encoding: gzip, deflate
User-Agent: Zend_Http_Client
Accept-Charset: ISO-8859-1,utf-8
Authorization: OAuth realm="",oauth_consumer_key="",oauth_nonce="91b6160db351060cdf4c774c78e2d0f2",oauth_signature_method="HMAC-SHA1",oauth_timestamp="1349107209",oauth_version="1.0",oauth_token="hereismytoken",oauth_signature="hereisavalidsignature"

ご覧のとおり、oauth_consumer_key(そしてrealmあまりにも) は空です。それがエラーでしょうか?このエラーを解決するにはどうすればよいですか (より厳密な新しい API バージョンのため?)? どういうわけか設定してもoauth_consumer_keyよろしいでしょうか?はいの場合、どうすればそれを管理できますか?

編集: Zend Framework のイシュー トラッカーに関するバグ レポートも既に見つけました: http://framework.zend.com/issues/browse/ZF-12409 (たぶん、賛成票を投じますか?)

4

4 に答える 4

9

ZF 1.12.3 では、オプションで直接ではなく、oauthOptions オプションで consumerKey と consumerSecret を渡すことで回避できます。

        $options = array(
            'username' => /*...*/,
            'accessToken' => /*...*/,
            'oauthOptions' => array(
                'consumerKey' => /*...*/,
                'consumerSecret' => /*...*/,
            )
        );
于 2013-04-14T17:40:10.773 に答える
1

Zend_Twitter_Service コンポーネントでこの問題を修正するまでの間、次の回避策を実行できます。

customerKeycustomerSecretを Zend_Service_Twitterに送信する必要があります

$twitter = new Zend_Service_Twitter(array(
                'consumerKey' => $this->consumer_key,
                'consumerSecret' => $this->consumer_secret,
                'username' => $user->screenName,
                'accessToken' => unserialize($user->token)
));
于 2012-11-28T16:18:07.773 に答える
0

今日、私は同じ問題を抱えています-ZendFrameworkはAPI1で動作します。

私は次のような新しいクラスを作成しました

class Zend_Service_Twitter11 extends Zend_Service_Twitter

そして、私が必要とする関数をオーバーライドします。

statusUpdate
statusReplies

于 2013-03-11T14:56:47.547 に答える
0
    $this->_session = new Zend_Session_Namespace('auth_twitter');
    $config = Zend_Registry::get('config')->twitter->toArray();
    $access_tokenSession = unserialize($this->_session->access_token);



    $accessToken = new Zend_Oauth_Token_Access();
    $accessToken->setToken($access_tokenSession->oauth_token);
    $accessToken->setTokenSecret($access_tokenSession->oauth_token_secret);

    $temp = array();
    $temp['oauthOptions']['consumerKey'] = $config['consumerKey'];
    $temp['oauthOptions']['consumerSecret'] = $config['consumerSecret'];
    $temp['accessToken'] = $accessToken;
    $temp['username'] = $access_tokenSession->screen_name;


    $this->_twitter = new Zend_Service_Twitter($temp, null);

    $this->_twitter->account->accountVerifyCredentials()->toValue()
于 2013-06-12T12:52:29.053 に答える