Google Place Search не возвращает результат - PullRequest
0 голосов
/ 30 января 2019

Мне нужно получить данные о местоположении на основе заданного текста.Как пример, если я ищу Aldi в карте Google, он показывает мне много данных с нумерацией страниц.Мне нужно получить этот результат, используя Google Места API.

Я попробовал это с двумя вызовами API.Но он возвращает мне следующий результат

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Aldi&key=MY_KEY

Результат

{
   "html_attributions" : [],
   "results" : [],
   "status" : "ZERO_RESULTS"
}

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=ALDI&inputtype=textquery&fields=place_id,name,formatted_address,geometry&key=MY_KEY

Результат

{
   "candidates" : [],
   "status" : "ZERO_RESULTS"
}

Мне нужно получить данные на основе заданного имени.Может кто-нибудь узнать причину.

Ответы [ 3 ]

0 голосов
/ 20 февраля 2019

Существует три типа поиска, предоставляемые API Адресов: Поиск Места , Поиск поблизости и Текстовый поиск .Каждый позволяет указать местоположение с радиусом, с которого можно начать поиск.Местоположение указывается в виде пары широта / долгота.Вы получили ZERO_RESULTS, потому что вы не указали местоположение для своего запроса.Если параметр location не указан, «API использует смещение IP-адреса по умолчанию» согласно документации.Таким образом, нет магазинов Aldi в пределах диапазона расположения вашего IP-адреса.

Найти место вернет только один результат, хотя, по моему опыту, иногда он возвращает два.И Поиск поблизости и Текстовый поиск вернут до 60 результатов поиска.Все три поисковых запроса Place позволяют указывать радиус вокруг вашего местоположения до 50 километров.Если вам нужно найти места Aldi по всему миру, вам нужно сделать немало запросов.

Я нахожусь неделями в подобном проекте, чтобы найти все места для списка сетей ресторанов в США.Я обнаружил, что Ближайший поиск - лучший выбор для моего варианта использования, и его следует всегда учитывать, прежде чем переходить к текстовому поиску проекта.Я проверил поиск Aldi с помощью поиска рядом и текстового поиска и обнаружил, что они предоставляют идентичный набор результатов place_id .Этот запрос на поиск в окрестностях найдет все местоположения Алди в пределах 50 километров от Нью-Йорка:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=40.785276%2C-73.9651827&name=Aldi&radius=50000&key=MY_API_KEY

Это то же самое, что и текстовый поиск:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Aldi&location=40.785276%2C-73.9651827&radius=50000&key=MY_API_KEY

Так почему нас должно волновать?Поиск текста в соответствии с документацией API «... возвращает все доступные поля данных для выбранного места, и вам будет выставлен соответствующий счет».Кроме того, «... служба текстового поиска подлежит десятикратному умножению. То есть каждый ваш запрос текстового поиска будет учитываться как 10 запросов против вашей квоты».Запрос на поиск в окрестностях дешевле и не подлежит 10-кратному множителю.Он возвращает подмножество доступных полей данных, которые вы можете счесть достаточными.Если вам нужны дополнительные поля данных, вы можете получить только то, что вам нужно, из запроса Places Detail.Сделайте математику для вашего приложения, прежде чем выбрать текстовый поиск.Это может быть значительно дешевле при использовании поиска рядом с последующими запросами Places Detail, если это необходимо.В любом случае, вы не хотите, чтобы вас шокировали, когда вы неожиданно попали в пределы квоты из-за 10-кратного множителя ИЛИ выставленные расходы на транзакции превысили ваши ожидания!

Я обнаружил дополнительные препятствия, которые следует учитывать для проектов, пытающихся найти все местоположения для бизнеса на большой территории:

  1. API Адресов предпочтет места в пределах вашего радиуса, но будетвключите места за пределами вашего радиуса, если он определит, что они актуальны и в пределах 60 мест.У меня были места, возвращенные более чем в 450 километрах от запрошенной позиции поиска.
  2. Результаты будут возвращены для мест с названиями, которые НЕ соответствуют тому, что вы искали.В моем поиске ресторана Benihana в Сиэтле запрос на поиск поблизости возвращает только ресторан с именем Hamansu.По результатам расследования, это связано с тем, что в Сиэтле нет бениханы, однако Хамансу похож на Бенихану в том, что здесь подают японские блюда на гриле у стола.В документации API говорится, что ваш поисковый запрос будет «сопоставлен со всем контентом, который Google проиндексировал для этого места, включая, помимо прочего, имя, тип и адрес, а также отзывы клиентов и другой сторонний контент».
  3. Результаты возвращаются по 20 за раз.Если есть еще результаты, предоставляется page_token, чтобы сделать запрос на получение следующей страницы, содержащей до 20 результатов.Каждый запрос платный.Вам будет выставлен счет за 3 запроса, необходимые для получения 60 результатов.Я не говорю, что это плохо, просто помните о расходах и использовании квот, которые вы несете с этим API.
  4. Если для вашего радиуса имеется более 60 результатов, вы не нашли все возможные местоположения в нем.И вы не можете с уверенностью определить, какой эффективный радиус был покрыт для 60 результатов.Вам нужно искать с достаточно маленьким радиусом, чтобы получить <60 результатов для каждого запроса.Поиск по всему миру потребует большой квоты и долларового бюджета.</li>
0 голосов
/ 07 июля 2019

@ Художественный ответ, отмеченный более высокими голосами, является лишь частично правильным.Ответ предполагает, что API Find Place (например, maps / api / place / findplacefromtext) обычно возвращает 1 результат, максимум 2. Я склонен с ним согласиться.Даже если ваш поиск достигнет нескольких целей, с помощью API Find Place будет возвращена только одна.Следовательно, он рекомендует использовать поиск рядом или текстовый поиск, оба из которых дадут не более 60 результатов.

Однако для этих двух поисков требуется некоторая форма параметра местоположения, в противном случае они, скорее всего, вернут 0 результатов, по умолчанию используя ваш IP-адрес, как он указывает.Но он рекомендует использовать местоположение, сопровождаемое параметром радиуса.Проблема в том, что параметр radius имеет максимальный предел.Так что он не будет нацеливаться на все типы вещей, которые вы хотите, если вы ищете по всей стране, например, в Соединенных Штатах.

Правда в том, что вам не нужно использовать местоположение и радиус.Есть еще один вариант, называемый регион.И вы можете использовать регион для поиска по всему расстоянию страны.

Что @Art предлагает:

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=25.7392%2C-80.3103&name=Law%Offices%of%Alex&radius=50000&key=KEY

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Law%Offices%of%Alex&location=25.7392%2C-80.3103&radius=50000&key=KEY

Aболее обширная альтернатива:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Law%Offices%of%Alex&region=us&key=KEY

0 голосов
/ 31 января 2019

Вы должны знать, что поиск API Адресов не предназначен для предоставления результатов по всему миру.В ваших примерах вы указываете только текстовое значение 'Aldi'.Однако, чтобы получить результаты, вы должны также указать, где вы ищете.

Например, если я хочу сместить результаты в направлении Барселоны в Испании, я должен добавить местоположение и радиус в свой запрос

https://maps.googleapis.com/maps/api/place/textsearch/json?query=Aldi&location=41.3850639%2C2.1734035&radius=10000&key=MY_API_KEY

Этот запрос вернет Aldiсупермаркеты в районе Барселоны, как показано на моем скриншоте

enter image description here

То же самое для поиска места, вы должны указать смещение местоположения

https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=Aldi&inputtype=textquery&fields=formatted_address,geometry,name,place_id&locationbias=circle%3A1000%4041.3850639%2C2.1734035&key=MY_API_KEY

Также обратите внимание, что Поиск места возвращает только один результат.

Надеюсь, это решит ваши сомнения.

...