【问题标题】:Twitter search API returns much fewer results than the Twitter client search engine. Why?Twitter 搜索 API 返回的结果比 Twitter 客户端搜索引擎少得多。为什么?
【发布时间】:2015-05-08 00:43:39
【问题描述】:

我正在使用带有 PHP 库 TwitterOAuth 0.5.1 的 Twitter 搜索 API 来处理包含给定主题标签(例如#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);

感谢您的宝贵帮助。

【问题讨论】:

  • 您必须对"q" 参数进行urlencode 吗?我从未使用过TwitterOAuth,但我猜它会为你做到这一点。另外,您是否在 Twitter 会话中使用法语作为默认语言进行搜索?
  • 根据 Twitter API 文档:请确保在发出请求之前对这些查询进行 URL 编码。由于#citylightsorchestra 是一场将在法国举行的数字演出,因此我只请求以法语编写的推文作为过滤预处理。

标签: php api search twitter


【解决方案1】:

问题是您(无意中)双重urlencode()ing 您的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 文档,但您可能不知道您选择的库如何处理特定情况(例如这个),并且错误地完成了已经为您完成的工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-26
    相关资源
    最近更新 更多