places nearby name google example address google-maps-api-3 google-places-api

google maps api 3 - nearby - Obteniendo más de 20 resultados con la API de Google Places



google places api example (7)

Ahora es posible tener más de 20 resultados (pero hasta 60), se agregó un parámetro page_token a la API.

Devuelve los siguientes 20 resultados de una búsqueda ejecutada previamente. El establecimiento de un parámetro page_token ejecutará una búsqueda con los mismos parámetros utilizados anteriormente; se ignorarán todos los parámetros que no sean page_token.

También puede consultar la sección de acceso a resultados adicionales para ver un ejemplo sobre cómo hacer la paginación.

Quiero desarrollar una aplicación de mapas que muestre los bancos cerca de un lugar determinado.

Utilizo la biblioteca Places para buscar y cada vez solo devuelve 20 resultados. ¿Qué debo hacer si quiero más resultados?


Aquí hay un ejemplo de código que buscará resultados adicionales

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; } } } }

Espero que esto te ahorre algo de tiempo.


En respuesta a Eduardo, Google lo agregó ahora, pero la documentación de Places también afirma:

La cantidad máxima de resultados que pueden devolverse es 60.

por lo que todavía tiene un límite. Además, para su información, hay un retraso para que el "next_page_token" sea válido, como lo indica Google:

Existe un pequeño retraso entre el momento en que se emite next_page_token y cuándo será válido.

y aquí están los documentos API de Places oficiales:

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


Google api busca el resultado 20 en una página, supongamos que desea utilizar el resultado de la página siguiente 20, luego usamos el resultado next_page_token from 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

en el segundo paso, usa los datos next_Page_token de la primera página

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"



Si el problema es que no todos los bancos que existen dentro del radio de búsqueda pueden no ser devueltos, sugiero que se limite el radio de búsqueda en lugar de emitir múltiples consultas automatizadas.

Establezca el radio en un valor en el que sea imposible obtener más de 20 (60) bancos. Luego haga que sea más fácil (en lo que respecta a la GUI) que el usuario genere más consultas de forma manual, es como pintar una consulta.

Devolver miles de bancos en una región más grande probablemente requerirá que dependas de tu propia base de datos de bancos, lo que podría lograrse si trabajas sistemáticamente en ella.


ACTUALIZACIÓN : Desde que originalmente escribí esta respuesta, se mejoró la API, por lo que esta respuesta está desactualizada (o, al menos, incompleta). Consulte ¿Cómo obtener más de 20 resultados de la API de Google Places? para más información.

RESPUESTA ORIGINAL :

La documentation dice que la API de Places devuelve hasta 20 resultados. No indica que haya alguna forma de cambiar ese límite. Entonces, la respuesta corta parece ser: No puedes.

Por supuesto, es posible que pueda falsificarlo realizando consultas para varias ubicaciones y luego fusionando / desduplicando los resultados. Sin embargo, es un truco barato y podría no funcionar muy bien. Y verificaría primero para asegurarme de que no infringe los términos del servicio.