Twitter获取搜索推文API不适用于哈希标签
Posted
技术标签:
【中文标题】Twitter获取搜索推文API不适用于哈希标签【英文标题】:Twitter get search tweets API not working with hash tag 【发布时间】:2014-03-04 18:43:50 【问题描述】:您好,现在我正在尝试使用 Twitter API 使用主题标签进行关键字搜索。这是我正在使用的网址。
https://api.twitter.com/1.1/search/tweets.json?q=%23bookmyshow
但我没有得到任何结果。从昨天开始,我试图解决这个问题。任何人都可以帮助我解决这个问题。这是我用于搜索的代码
<?php
ini_set('display_errors', 1);
require_once('TwitterAPIExchange.php');
$oauth_access_token = '2329813950-XGm12JrlbxOIHF6mmDPhF8l2ddDHa2PEKPdHYHp';
$oauth_access_token_secret = '1g88J15Qxl24SOn6arfXgAqGH0N1VthxvDIyrK2dZBfu1';
$consumer_key = 'mU6nzH298ZoZCdYaqbyzA';
$consumer_secret = 'gIDEYBiruLf29VEq7Zx75U7bFJrkia9HV8SSw0qjlI';
$token = '2329813950-XGm12JrlbxOIHF6mmDPhF8l2ddDHa2PEKPdHYHp';
$token_secret = '1g88J15Qxl24SOn6arfXgAqGH0N1VthxvDIyrK2dZBfu1';
$consumer_key = 'mU6nzH298ZoZCdYaqbyzA';
$consumer_secret = 'gIDEYBiruLf29VEq7Zx75U7bFJrkia9HV8SSw0qjlI';
$host = 'api.twitter.com';
$method = 'GET';
$path = '/1.1/search/tweets.json'; // api call path api.twitter.com/1.1/search/tweets.json
$query = array( // query parameters
'q' => '%23bookmyshow',
'count' => '2'
);
$oauth = array(
'q' => '%23bookmyshow',
'count' => 2,
'oauth_consumer_key' => $consumer_key,
'oauth_nonce' => time(),
'oauth_signature_method' => 'HMAC-SHA1',
'oauth_token' => $oauth_access_token,
'oauth_timestamp' => time(),
'oauth_version' => '1.0'
);
$oauth = array_map("rawurlencode", $oauth); // must be encoded before sorting
$query = array_map("rawurlencode", $query);
$arr = array_merge($oauth, $query); // combine the values THEN sort
asort($arr); // secondary sort (value)
ksort($arr); // primary sort (key)
// http_build_query automatically encodes, but our parameters
// are already encoded, and must be by this point, so we undo
// the encoding step
$querystring = urldecode(http_build_query($arr, '', '&'));
$url = "https://$host$path";
// mash everything together for the text to hash
$base_string = $method."&".rawurlencode($url)."&".rawurlencode($querystring);
// same with the key
$key = rawurlencode($consumer_secret)."&".rawurlencode($token_secret);
// generate the hash
$signature = rawurlencode(base64_encode(hash_hmac('sha1', $base_string, $key, true)));
// this time we're using a normal GET query, and we're only encoding the query params
// (without the oauth params)
$url .= "?".http_build_query($query);
$oauth['oauth_signature'] = $signature; // don't want to abandon all that work!
ksort($oauth); // probably not necessary, but twitter's demo does it
// also not necessary, but twitter's demo does this too
function add_quotes($str) return '"'.$str.'"';
$oauth = array_map("add_quotes", $oauth);
// this is the full value of the Authorization line
$auth = "OAuth " . urldecode(http_build_query($oauth, '', ', '));
$options = array(
CURLOPT_HTTPHEADER => array("Authorization: $auth"),
//CURLOPT_POSTFIELDS => $postfields,
CURLOPT_HEADER => false,
CURLOPT_URL => $url . '?q=%23bookmyshow&count=2',
CURLOPT_RETURNTRANSFER => true, CURLOPT_SSL_VERIFYPEER => false
);
// do our business
$feed = curl_init();
curl_setopt_array($feed, $options);
$json = curl_exec($feed);
curl_close($feed);
$twitter_data = json_decode($json);
//print_r($twitter_data);
echo "<pre>";
print_r(json_decode($json));
?>
这个文件TwitterAPIExchange.php
是我从Github得到的。
【问题讨论】:
也许你应该在$query
中对你的screen_name 进行urldecode?span>
它不工作。我更新了我的代码
不要对您的完整查询进行 urlencode($oath
和 $query
)。 http_build_query
已经为您做到了。见nl1.php.net/http_build_query。也不要在构建查询后对其进行解码。就像 http_build_query
为你构建的一样。
另外,构建一次完整的请求然后解码它,你的代码是一团糟!
删除所有编码和解码。收集查询所需的所有数据,然后通过http_query_builder
解析。
【参考方案1】:
搜索值的搜索查询中不需要使用%23
。
请使用'q' => 'bookmyshow'
,而不是'q' => '%23bookmyshow'
。
另外,您还没有请求 Twitter 获取推文。阅读此Documentation。如果这是您的令牌秘密,我建议您立即重置您的密钥。转到Twitter Developer 页面以访问您的应用程序并重置它。
【讨论】:
以上是关于Twitter获取搜索推文API不适用于哈希标签的主要内容,如果未能解决你的问题,请参考以下文章
使用 Twitter 搜索 API 的位置和 OAuth 问题
Tweepy:现在可以使用 Twitter 搜索 API 获取旧推文?