如何从Google Places API获得20+的结果?

我正在开发一个应用程序,我正在获取用户附近的ATM的列表。 为此,我使用Google Places API,但每次只返回20个结果。 我想获得更多的结果。 在API文档中提到它会返回20结果,但我想知道有什么办法可以获得更多的数据,或者我必须为此创build自己的数据库? 另外我在API中发现,它没有印度的所有ATM机。 这些信息对于某些位置也是不准确的。 所以请build议我一些想法,我应该使用我自己的数据库或不? 我知道我可以在Google Places中注册地点,但问题是每次只返回20个结果; 如果无论如何这个问题得到解决,那么使用Places API将会很好。

请好心帮助我…..

Solutions Collecting From Web of "如何从Google Places API获得20+的结果?"

根据文档: http : //code.google.com/intl/zh-CN/apis/maps/documentation/places/#PlaceSearchResponses

编辑:地方API现在支持多达60个结果的分页。 详情请参阅下文。

Places API每个查询最多可返回20个机构。 但是,每个search可以返回多达60个结果,分为三个页面。 如果您的search将返回超过20,那么search响应将包含一个额外的参数 – next_page_token。 将next_page_token的值传递给新地点search的page_token参数,以查看下一组20个结果。

也有严格的服务条款,指定您不能预取,caching或存储内容,除非它是您允许存储的内容标识符或密钥,即来自地方search的参考标记: http : //code.google.com /intl/en/apis/maps/terms.html#section_10_1_3

关于在印度无法findATM的问题。 所有的地方在typesestablishment之前被分类,直到谷歌有足够的元数据关于一个地方在ATMcafebar等更具体的地方types分类。解决方法可能会find更多的结果是在请求中使用keyword参数像“自动取款机”,“银行”或“财务”的价值。 根据文档: http : //code.google.com/apis/maps/documentation/places/将keyword参数与所有可用字段进行匹配,包括但不限于名称,types和地址以及客户评论和其他第三方内容。

Google API在一个页面中提取20个结果假设您想要使用下一个页面20结果,那么我们使用google first page xml中的next_page_token作为结果。

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"

您可以使用Google API JAVA客户端来完成此操作 – 以下是使用Java客户端获取所有60个结​​果的示例。

 public PlacesList search(double latitude, double longitude, double radius, String types) throws Exception { try { HttpRequestFactory httpRequestFactory = createRequestFactory(HTTP_TRANSPORT); HttpRequest request = httpRequestFactory .buildGetRequest(new GenericUrl("https://maps.googleapis.com/maps/api/place/search/json?")); request.getUrl().put("key", YOUR_API_KEY); request.getUrl().put("location", latitude + "," + longitude); request.getUrl().put("radius", radius); request.getUrl().put("sensor", "false"); request.getUrl().put("types", types); PlacesList list = request.execute().parseAs(PlacesList.class); if(list.next_page_token!=null || list.next_page_token!=""){ Thread.sleep(4000); /*Since the token can be used after a short time it has been generated*/ request.getUrl().put("pagetoken",list.next_page_token); PlacesList temp = request.execute().parseAs(PlacesList.class); list.results.addAll(temp.results); if(temp.next_page_token!=null||temp.next_page_token!=""){ Thread.sleep(4000); request.getUrl().put("pagetoken",temp.next_page_token); PlacesList tempList = request.execute().parseAs(PlacesList.class); list.results.addAll(tempList.results); } } return list; } catch (HttpResponseException e) { return null; } } 

在Google地方信息页上: https : //developers.google.com/places/documentation/search在“雷达search请求”下,使用: https : //maps.googleapis.com/maps/api/place/radarsearch / output?参数,您可以使用此调用获得200个结果,但请注意,每个调用对您的配额使用5个请求。

请使用下面的参数在URL下面尝试

URL =“ http://www.google.com/maps?q=restaurant&ie=UTF8&hl=zh-CN&sll=0.000000,0.000000&sspn=0.000000,0.000000&vps=3&sa=N&start=20

哪里开始=结果的数量说,例如从0或10开始20或20 –

您可以从下一页令牌获得更多结果:

 https://maps.googleapis.com/maps/api/place/textsearch/json?query=[your search key word]&location=latitude,longitude&radius=value&key=[your API key]&next_page_token=next_page_token value