API поиска в Твиттере возвращает намного меньше результатов, чем поисковая система клиента Твиттера. Почему?

0

Я использую API-интерфейс Twitter Search с библиотекой PHP TwitterOAuth 0.5.1 для обработки твитов, содержащих заданный хэштаг (например, #citylightorchestra).

Мой запрос (см. Исходный код ниже) возвращает только 1 результат, когда поисковая машина веб-клиента возвращает что-то вроде 10 твитов. Есть ли способ изменить мой запрос, чтобы увеличить счетчик результатов?

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
    Вы должны urlencode параметра "q" ? Я никогда не использовал TwitterOAuth , но думаю, что он сделает это за вас. Кроме того, вы выполняете поиск из сеанса в Твиттере с выбранным по умолчанию французским языком?
  • 0
    В соответствии с документацией Twitter API: Пожалуйста, убедитесь, что URL-адрес кодирует эти запросы перед выполнением запроса . Поскольку #citylightsorchestra - это цифровое представление, которое будет проходить во Франции, я запрашиваю только твиты, написанные на французском языке, в качестве предварительной обработки фильтрации.
Теги:
search
twitter

1 ответ

1

Проблема в том, что вы (непреднамеренно) double- urlencode() ваш параметр q. Проверьте источник TwitterOAuth. Вы вызываете TwitterOAuth::get(), который вызывает TwitterOAuth::http(), который, в свою очередь, вызывает TwitterOAuth::oAuthRequest(), который затем вызывает TwitterOAuth::oAuthRequest() TwitterOAuth::request(). И после этого глубокого набора вызовов мы наконец добираемся до мяса библиотеки, звонки cURL. Следует отметить, что внутренние переменные GET передаются так:

switch ($method) {
    case 'GET':
        if (!empty($postfields)) {
            $options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields);
        }
        break;

    // etc...
}

И вы обнаружите, что в Util::buildHttpQuery() ваши параметры GET Util::buildHttpQuery() для вас:

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 - это то, что в конечном итоге должно выполняться, вы можете не знать, как выбранная вами библиотека обрабатывает определенные случаи (например, эту) и неправильно выполняет работу, которая уже выполнена для вас!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню