Получение более 20 результатов с Google Places API - PullRequest
33 голосов
/ 06 августа 2011

Я хочу разработать картографическое приложение, которое будет отображать банки рядом с данным местом.

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

Ответы [ 7 ]

16 голосов
/ 07 августа 2011

ОБНОВЛЕНИЕ : Поскольку я первоначально написал этот ответ, API был усовершенствован, что сделало этот ответ устаревшим (или, по крайней мере, неполным). См. Как получить более 20 результатов из API Google Адресов? для получения дополнительной информации.

ОРИГИНАЛЬНЫЙ ОТВЕТ :

В документации говорится, что API Places возвращает до 20 результатов. Это не означает, что существует какой-либо способ изменить это ограничение. Таким образом, короткий ответ выглядит так: Вы не можете.

Конечно, вы могли бы подделать его, выполнив запросы для нескольких мест, а затем объединяя / дедуплицируя результаты. Это своего рода дешевый хак, и может не очень хорошо работать. И я сначала проверю, чтобы убедиться, что это не нарушает условия обслуживания.

14 голосов
/ 28 июня 2012

Теперь возможно иметь более 20 результатов (но не более 60), в API был добавлен параметр page_token .

Возвращает следующие 20 результатов из ранее выполненного поиска. Установка параметра page_token выполнит поиск с теми же параметрами, которые использовались ранее - все параметры, кроме page_token, будут игнорироваться.

Также вы можете обратиться к доступу к дополнительным результатам , чтобы увидеть пример того, как выполнить нумерацию страниц.

7 голосов
/ 13 сентября 2012

Google api извлекает результат 20 на одной странице, предположим, что вы хотите использовать результат следующей страницы 20, затем мы используем next_page_token из Google pag xml result.

1) https://maps.googleapis.com/maps/api/place/search/xml?location=Enter latitude,Enter Longitude&radius=10000&types=store&hasNextPage=true&nextPage()=true&sensor=false&key=Enter Google_Map_key

на втором шаге вы используете первыйданные страницы next_Page_token

2)https://maps.googleapis.com/maps/api/place/search/xml?location=Enter Latitude,Enter Longitude&radius=10000&types=store&hasNextPage=true&nextPage()=true&sensor=false&key=enter google_map_key &pagetoken="Enter the first page token Value"
3 голосов
/ 27 июля 2012

В ответ на Eduardo Google добавил это сейчас, но в документации по Places также говорится:

Максимальное количество результатов, которое может быть возвращено, равно 60.

так что до сих пор есть крышка.Кроме того, к вашему сведению, есть задержка для того, когда «next_page_token» станет действительным, как заявляет Google:

Существует небольшая задержка между моментом выдачи next_page_token и его вступлением в силу.

и вот официальные документы API Адресов:

https://developers.google.com/places/documentation/

2 голосов
/ 04 апреля 2017

Вот пример кода, который будет искать дополнительные результаты

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web.Script.Serialization;


namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var url = $"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={args[0]}&radius={args[1]}&type=restaurant&keyword={args[2]}&key={args[3]}";

            dynamic res = null;
            var places = new List<PlacesAPIRestaurants>();
            using (var client = new HttpClient())
            {
                while (res == null || HasProperty(res, "next_page_token"))
                {
                    if (res != null && HasProperty(res, "next_page_token"))
                    {
                        if (url.Contains("pagetoken"))
                            url = url.Split(new string[] { "&pagetoken=" }, StringSplitOptions.None)[0];
                        url += "&pagetoken=" + res["next_page_token"];

                    }
                    var response = client.GetStringAsync(url).Result;
                    JavaScriptSerializer json = new JavaScriptSerializer();
                    res = json.Deserialize<dynamic>(response);
                    if (res["status"] == "OK")
                    {
                        foreach (var place in res["results"])
                        {
                            var name = place["name"];
                            var rating = HasProperty(place,"rating") ? place["rating"] : null;
                            var address = place["vicinity"];
                            places.Add(new PlacesAPIRestaurants
                            {
                                Address = address,
                                Name = name,
                                Rating = rating
                            });
                        }
                    }
                    else if (res["status"] == "OVER_QUERY_LIMIT")
                    {
                        return;
                    }
                }
            }
        }

        public static bool HasProperty(dynamic obj, string name)
        {
            try
            {
                var value = obj[name];
                return true;
            }
            catch (KeyNotFoundException)
            {
                return false;
            }
        }
    }
}

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

0 голосов
/ 26 сентября 2013

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

Установите радиус, равный некоторому значению, при котором невозможно получить более 20 (60) банков. Затем упростите (с графическим интерфейсом) для пользователя ручное создание большего количества запросов - что-то вроде рисования запроса.

Возвращение тысяч банков в более крупный регион, вероятно, потребует от вас полагаться на свою собственную базу данных банков - что может быть достигнуто, если вы систематически работаете с ней.

0 голосов
/ 07 августа 2011

Не уверен, что вы можете получить больше.

API Places возвращает до 20 результатов создания.

http://code.google.com/apis/maps/documentation/places/#PlaceSearchResponses

...