我正在使用Twitter Search API与PHP库TwitterOAuth 0.5.1来处理包含给定主题标签的推文(例如#citylightsorchestra)。
当Web客户端搜索引擎返回类似10条推文的内容时,我的请求(请参阅下面的源代码)仅返回1个结果。有没有办法修改我的请求以增加结果数?
require "twitter.config.php";
require "twitteroauth-0.5.1/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;
$connection = new TwitterOAuth($consumer_key, $consumer_secret, $access_token, $access_token_secret);
$content = $connection->get("search/tweets",
array(
"q" => urlencode("#citylightsorchestra"),
"lang" => "fr",
"count" => "100",
"include_entities" => "true",
"result_type" => "recent"));
var_dump($content);
感谢您的宝贵帮助。
答案 0 :(得分:1)
问题是您(无意中)加倍urlencode()
q
参数。查看the source of TwitterOAuth。您拨打TwitterOAuth::get()
,拨打TwitterOAuth::http()
,然后拨打TwitterOAuth::oAuthRequest()
,然后拨打TwitterOAuth::request()
。在那个深度调用堆栈之后,我们终于到达了库的内容,cURL调用了。您应该注意internally GET variables are passed as so:
switch ($method) {
case 'GET':
if (!empty($postfields)) {
$options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields);
}
break;
// etc...
}
你会在Util::buildHttpQuery()
,your GET parameters are escaped for you中找到它:
public static function buildHttpQuery($params)
{
if (!$params) {
return '';
}
// Urlencode both keys and values
$keys = Util::urlencodeRfc3986(array_keys($params));
$values = Util::urlencodeRfc3986(array_values($params));
$params = array_combine($keys, $values);
// snip...
}
如此有效地使用您的代码而不是发送以下编码的GET参数:
q=%23citylightorchestra
您是双重编码,而是发送:
q=%2523citylightorchestra
那么您正在搜索确切的字符串%23citylightorchestra
。解决方法是简单地删除您的urlencode()
,一切都应该正常工作:
$content = $connection->get("search/tweets", array(
"q" => "#citylightsorchestra",
"lang" => "fr",
"count" => "100",
"include_entities" => "true",
"result_type" => "recent"
));
使用库调用API时,您的第一站应该是库的文档。虽然最终必须遵守官方API文档,但您可能不知道您选择的库如何处理特定情况(如此情况)并错误地完成已经为您完成的工作!