Подтвердить что ты не робот

Получение более 20 результатов с помощью API Google Адресов

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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 data​​p >

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"

Ответ 4

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

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

так что у него все еще есть кепка. также FYI, есть задержка для того, когда "next_page_token" станет действительным, поскольку Google заявляет:

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

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

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

Ответ 6

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

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

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

Ответ 7

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

   dynamic res = null;
   using (var client = new HttpClient())
    {
        while (res == null || HasProperty(res, "next_page_token"))
        {
            var url =  string.Format("https://maps.googleapis.com/maps/api/place/nearbysearch/json?location={0},{1}&radius={4}&keyword={2}&key={3}", locationTobeSearched.latitude, locationTobeSearched.longitude, keywords, googlePlacesApiKey, radius);
            if (res != null && HasProperty(res, "next_page_token"))
             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 match in res["results"])
                {
                   //do your bidding
                }
            }
            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;
        }
    }

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