Twitter搜索API返回的结果比Twitter客户端搜索引擎少得多。为什么?

时间:2015-03-06 11:59:23

标签: php api search twitter

我正在使用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);

感谢您的宝贵帮助。

1 个答案:

答案 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文档,但您可能不知道您选择的库如何处理特定情况(如此情况)并错误地完成已经为您完成的工作!