Algolia: получение данных с помощью CURL (PHP) возвращает результаты, отличные от результатов примера с местами. js - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь получить поиск мест с помощью Algolia, но с помощью моего сервера. Я попытался воспроизвести поиск точно так же, как в приведенном примере (https://community.algolia.com/places/examples.html - первый простой ввод), но система возвращает немного другой результат. В частности, если вы введете Paris во вводе, вы увидите, что сначала отображается город Париж, а затем другие результаты, что является правильным способом. Но когда я делаю тот же запрос с CURL, он возвращает Paris 17e Arrondissement, затем Paris 8e Arrondissement и другие. Фактический город Париж появляется только как 5-й результат.

$cURLConnection = curl_init('https://places-dsn.algolia.net/1/places/query?x-algolia-agent=Algolia%20for%20JavaScript%20(3.35.1)%3B%20Browser%20(lite)%3B%20Algolia%20Places%201.18.2&x-algolia-application-id=MYAPPID&x-algolia-api-key=MYAPIKEY');
curl_setopt($cURLConnection, CURLOPT_POST, 1);
curl_setopt($cURLConnection, CURLOPT_POSTFIELDS, '{"params":"hitsPerPage=10&language=en&query='.$keyword.'"}');

curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($cURLConnection);
curl_close($cURLConnection);
exit($result);

Что могло быть причиной такого поведения? Спасибо.

1 Ответ

0 голосов
/ 10 мая 2020

Найдены нужные параметры. Проблема заключалась в том, что aroundLatLngViaIP включен по умолчанию, поэтому результаты показывают результаты, близкие к местоположению сервера. На этот раз я также правильно написал код с помощью документации REST API и сделал сжатие gzip для ускорения получения результатов:

$cURLConnection = curl_init('https://places-dsn.algolia.net/1/places/query');
curl_setopt($cURLConnection, CURLOPT_POST, 1);
curl_setopt($cURLConnection, CURLOPT_POSTFIELDS, '{"query": "'.$keyword.'", "language" : "fr", "aroundLatLngViaIP" : "false", "hitsPerPage" : "10"}');

curl_setopt($cURLConnection, CURLOPT_RETURNTRANSFER, true);

$headers = [
    'X-Algolia-Application-Id: MyAppKey',
    'X-Algolia-API-Key: MyAPIKey',
    'Accept: application/json',
    'Accept-Encoding: gzip, deflate, br',
    'Connection: keep-alive',
    'content-type: application/x-www-form-urlencoded',
    'Host: places-dsn.algolia.net'
];

curl_setopt($cURLConnection, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($cURLConnection);
curl_close($cURLConnection);
if ( (ord($result[0])==0x1f) && (ord($result[1])==0x8b) ) {
    // skip header and ungzip the data
    $result = gzinflate(substr($result,10));
}
...