当从https://api.twitter.com/1.1/statuses/user_timeline.json检索数据时,我在使用Twitter REST API和cURL时遇到了小问题
我在下面进行了以下设置,这些设置可以正常运行,但是一旦我尝试获取扩展的tweet(tweet_mode = extended),但用其替换URLhttps://api.twitter.com/1.1/statuses/user_timeline.json?tweet_mode=extended
就会出错并提示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);
我在Postman中进行了设置,以进行检查,并在Postman中正常运行,因此我生成了一个PHP cURL代码段并对其进行了测试,而且似乎也可以正常运行,因此有人可以帮助我弄清楚我在做什么错吗?我认为这可能与签名有关,但没有参数似乎可以正常工作。
任何帮助/建议,将不胜感激。
与其找出问题所在,不如使用目前有效的方法。
<?php
$username = REX_VALUE[1];
$key = REX_VALUE[2]; // Consumer Key (API Key)
$secret = REX_VALUE[3]; // Consumer Secret (API Secret)
$counter = '0'; // Zähler, wieviele Tweets ausgegeben werden sollen
setlocale(LC_TIME, "de_DE.utf8");
$quest = "https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" . urlencode($username) . "&tweet_mode=extended&include_rts=false&exclude_replies=true";
$tokenUrl = "https://api.twitter.com/oauth2/token";
$auth = base64_encode(urlencode($key) . ':' . urlencode($secret));
// BearerToken holen
$getToken = curl_init();
curl_setopt($getToken, CURLOPT_URL, $tokenUrl);
curl_setopt($getToken, CURLOPT_POST, 1);
curl_setopt($getToken, CURLOPT_HTTPHEADER, array('Authorization: Basic ' . $auth));
curl_setopt($getToken, CURLOPT_POSTFIELDS, "grant_type=client_credentials");
curl_setopt($getToken, CURLOPT_RETURNTRANSFER, 1);
$token = json_decode(curl_exec($getToken));
$token = $token->access_token;
curl_close($getToken);
// Tweets holen
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $quest);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . $token));
$result = curl_exec($curl);
curl_close($curl);
$tweets = json_decode($result);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句