Twitter REST API - 使用'tweet_mode = extended'参数时,"无法验证您"错误

Joh*_*ter 6 php api twitter rest curl

在从https://api.twitter.com/1.1/statuses/user_timeline.json检索数据时,使用Twitter REST API和cURL时遇到了一些问题.

我在下面设置了以下设置,它完美有效,但是一旦我尝试获得扩展推文(tweet_mode =扩展),但用https://api.twitter.com/1.1/statuses/user_timeline.json?tweet_mode=extended它替换URL 错误并且说Could not authenticate you.,如果我删除参数?tweet_mode=extended它再次正常工作.

var $oauthConsumerKey = "XXX"; // Consumer key
var $oauthConsumerKeySecret = "XXX"; // Consumer key secret
var $oauthToken = "XXX"; // Token
var $oauthTokenSecret = "XXX"; // Token secret

$oauthHash = '';
$oauthHash .= 'oauth_consumer_key=' . $this->oauthConsumerKey . '&';
$oauthHash .= 'oauth_nonce=' . time() . '&';
$oauthHash .= 'oauth_signature_method=HMAC-SHA1&';
$oauthHash .= 'oauth_timestamp=' . time() . '&';
$oauthHash .= 'oauth_token=' . $this->oauthToken . '&';
$oauthHash .= 'oauth_version=1.0';

$base = '';
$base .= 'GET';
$base .= '&';
$base .= rawurlencode('https://api.twitter.com/1.1/statuses/user_timeline.json');
$base .= '&';
$base .= rawurlencode($oauthHash);

$key = '';
$key .= rawurlencode($this->oauthConsumerKeySecret);
$key .= '&';
$key .= rawurlencode($this->oauthTokenSecret);

$signature = base64_encode(hash_hmac('sha1', $base, $key, true));
$signature = rawurlencode($signature);

$oauthHeader = '';
$oauthHeader .= 'oauth_consumer_key="' . $this->oauthConsumerKey . '", ';
$oauthHeader .= 'oauth_nonce="' . time() . '", ';
$oauthHeader .= 'oauth_signature="' . $signature . '", ';
$oauthHeader .= 'oauth_signature_method="HMAC-SHA1", ';
$oauthHeader .= 'oauth_timestamp="' . time() . '", ';
$oauthHeader .= 'oauth_token="' . $this->oauthToken . '", ';
$oauthHeader .= 'oauth_version="1.0", ';
$curlHeader = array("Authorization: Oauth {$oauthHeader}", 'Expect:');


$curlRequest = curl_init();
curl_setopt($curlRequest, CURLOPT_HTTPHEADER, $curlHeader);
curl_setopt($curlRequest, CURLOPT_HEADER, false);
curl_setopt($curlRequest, CURLOPT_URL, 'https://api.twitter.com/1.1/statuses/user_timeline.json');
curl_setopt($curlRequest, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curlRequest, CURLOPT_SSL_VERIFYPEER, false);
$this->twiiterJSON = curl_exec($curlRequest);
curl_close($curlRequest);
Run Code Online (Sandbox Code Playgroud)

我在Postman中设置它来检查并且在Postman中它工作正常所以我生成了一个PHP cURL代码片段并用它进行了测试它似乎工作正常所以任何人都可以帮我弄清楚我做错了什么?我认为这可能与签名有关,但似乎没有参数就可以正常工作.

任何帮助/建议将不胜感激.

Tar*_*ani 2

我不会找出问题所在,而是使用目前有效的方法

\n\n
<?php\n\n$username   = REX_VALUE[1];\n$key        = REX_VALUE[2];     // Consumer Key (API Key)\n$secret     = REX_VALUE[3];     // Consumer Secret (API Secret)\n$counter    = \'0\';              // Z\xc3\xa4hler, wieviele Tweets ausgegeben werden sollen\n\nsetlocale(LC_TIME, "de_DE.utf8");\n\n$quest = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . urlencode($username) . "&tweet_mode=extended&include_rts=false&exclude_replies=true";\n$tokenUrl = "https://api.twitter.com/oauth2/token";\n\n$auth = base64_encode(urlencode($key) . \':\' . urlencode($secret));\n\n// BearerToken holen\n$getToken = curl_init();\ncurl_setopt($getToken, CURLOPT_URL, $tokenUrl);\ncurl_setopt($getToken, CURLOPT_POST, 1);\ncurl_setopt($getToken, CURLOPT_HTTPHEADER, array(\'Authorization: Basic \' . $auth));\ncurl_setopt($getToken, CURLOPT_POSTFIELDS, "grant_type=client_credentials");\ncurl_setopt($getToken, CURLOPT_RETURNTRANSFER, 1);\n\n$token = json_decode(curl_exec($getToken));\n$token = $token->access_token;\ncurl_close($getToken);\n\n// Tweets holen\n$curl = curl_init();\ncurl_setopt($curl, CURLOPT_URL, $quest);\ncurl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);\ncurl_setopt($curl, CURLOPT_HTTPHEADER, array(\'Authorization: Bearer \' . $token));\n$result = curl_exec($curl);\ncurl_close($curl);\n\n$tweets = json_decode($result);\n
Run Code Online (Sandbox Code Playgroud)\n