Я использую 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);
Спасибо за вашу драгоценную помощь.
Проблема в том, что вы (непреднамеренно) 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 - это то, что в конечном итоге должно выполняться, вы можете не знать, как выбранная вами библиотека обрабатывает определенные случаи (например, эту) и неправильно выполняет работу, которая уже выполнена для вас!
"q"
? Я никогда не использовалTwitterOAuth
, но думаю, что он сделает это за вас. Кроме того, вы выполняете поиск из сеанса в Твиттере с выбранным по умолчанию французским языком?