结合 2 个地点请求以获取邮政编码
Posted
技术标签:
【中文标题】结合 2 个地点请求以获取邮政编码【英文标题】:Combine 2 place request to get postal code 【发布时间】:2019-06-26 02:28:05 【问题描述】:我想将两个 place-api 调用合二为一,以获取有关列表的更多信息。
例子:
我的第一个脚本请求提供了 API 的名称和地址。但是,Placesearch API 没有提供我需要的邮政编码或其他信息。
我当前的脚本显示了这个:
name;adress,lnt,lng,place_id
但我需要每个列表的更多信息,例如邮政编码,此处未提供。
如何为每个 place_id 包含第二个 API 调用并显示邮政编码?
$apikey = 'KEY';
$url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=51.374,10.1495&rankby=distance&name=keyword&language=de&key=$apikey";
$json = file_get_contents($url);
$obj = json_decode($json, true);
for($i=0; $i<count($obj['results']); $i++)
echo "" . $obj['results'][$i]['name'] . ";" . $obj['results'][$i]['vicinity'] . ";" . $obj['results'][$i]['geometry']['location']['lat'] . ";" . $obj['results'][$i]['geometry']['location']['lng'] . ";" . $obj['results'][$i]['place_id'] . DISPLaY POSTCODE "<BR>";
;
我知道,我需要为每个 place_id 运行此查询:
https://maps.googleapis.com/maps/api/place/details/json?placeid=$place_id=name,rating,formatted_phone_number&key=YOUR_API_KEY
但是我怎样才能将它与第一个结果结合起来呢?我需要:
Name;Adress;Postcode;LAT;LNG;
更新:
第一个请求:
$apikey = 'KEY';
$url = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=51.374,10.1495&rankby=distance&name=keyword&language=de&key=$apikey";
$json = file_get_contents($url);
$obj = json_decode($json, true);
for($i=0; $i<count($obj['results']); $i++)
echo "" . $obj['results'][$i]['name'] . ";" . $obj['results'][$i]['vicinity'] . ";" . $obj['results'][$i]['geometry']['location']['lat'] . ";" . $obj['results'][$i]['geometry']['location']['lng'] . ";" . $obj['results'][$i]['place_id'] . DISPLaY POSTCODE "<BR>";
;
这是对第一个请求的响应,ChIJidzOXaLBpEcRxEKHcEN9fuo 是我必须请求详细信息的地点 ID:
Flinsberger Sportplatz;Heilbad Heiligenstadt;51.3163051;10.1929773;ChIJidzOXaLBpEcRxEKHcEN9fuo
这是 api 调用显示需要的详细信息,我需要并且可以访问:
https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJidzOXaLBpEcRxEKHcEN9fuo=name,rating,formatted_phone_number&key=YOUR_API_KEY
我需要在第一个请求中包含第二个请求,以获得 ex。特定项目的邮政编码,这是我不知道的问题。
结果应该是: 姓名、地址、邮政编码、...、...、...
【问题讨论】:
阅读:developers.google.com/places/web-service/details。它显示您可以使用 JSON 响应中的address_components
字段来查找邮政编码。该链接向您展示了当您知道 place_id 时如何构建查询 URL。
嘿,是的,我知道这个页面,而且我知道如何获得正确的回复。我的问题是如何将这些请求放在一起,所以我得到了我需要的格式。
啊,对不起。好的,那么您有 2 个调用,因此有 2 个 JSON 结果。解析两者。让我们说$obj1
和$obj2
。从$obj1
获取一些信息,从$obj2
获取其他信息以玷污您的位置。每个地方都可以分配一个数组来存储它的信息。如果您在问题中发布示例 JSON 响应,我们可以向您展示如何操作。仅供参考:不要在 cmets 中发布代码,格式会丢失。改为编辑问题。
你不能在一个请求中完成。第一个提供place_id,第二个提供place_id 的详细信息。两个请求,两个结果,结合在您的代码中。
嘿,非常感谢您的帮助,我已经更新了第一篇文章,希望您能理解...再次抱歉英语不好...我知道我必须将两者结合在一起,得到结果,但我不知道如何 :) 再次感谢伙计 :)
【参考方案1】:
在 cmets 之后,我想出了这个。请注意,我自己没有要测试的 API 密钥,这个想法就在那里。您可能需要根据第二个查询(循环中的那个)的 json_decode
函数的结果调整对 $obj2
的引用。
<?php
$apikey = 'KEY';
$url1 = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=51.374,10.1495&rankby=distance&name=keyword&language=de&key=$apikey";
$json1 = file_get_contents($url1);
$obj1 = json_decode($json1, true);
for( $i = 0; $i < count($obj1['results']); $i++)
$place_id = $obj1['results'][$i]['place_id'];
$url2 = "https://maps.googleapis.com/maps/api/place/details/output?json&key=" .$apikey . "&placeid=" . $place_id . "&fields=address_component"
$json2 = file_get_contents($url2);
$obj2 = json_decode($json2, true);
echo "" . $obj1['results'][$i]['name'] . ";" . $obj1['results'][$i]['vicinity'] . ";" . $obj1['results'][$i]['geometry']['location']['lat'] . ";" . $obj1['results'][$i]['geometry']['location']['lng'] . ";" . $obj1['results'][$i]['place_id'] . $obj2['result']['address_components']['postal_code'] . "<br>";
;
?>
我们的想法是根据 2 个查询的结果从 $obj1
和 $obj2
中获取所需的信息。
【讨论】:
嘿,我认为这看起来很棒,会在喝完咖啡后尝试一下 :) 但是是的,看起来不错……平均而言,鉴于您的回答,我发现这可能有用:***.com/questions/19176816/… 但是我会先试试你的例子......非常感谢 嗨,是的,您可以将数组合并在一起,然后从该单个数组中获取所有信息。两者都有效。以上是关于结合 2 个地点请求以获取邮政编码的主要内容,如果未能解决你的问题,请参考以下文章
如何调整此 javascript 以返回少了最后 2 个字符的邮政编码? [复制]