结合两个地方的要求以获取邮政编码

时间:2019-06-26 02:28:05

标签: php arrays json google-places-api

我想将两个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调用,显示我需要并可以访问的Needed详细信息:

https://maps.googleapis.com/maps/api/place/details/json?placeid=ChIJidzOXaLBpEcRxEKHcEN9fuo=name,rating,formatted_phone_number&key=YOUR_API_KEY

我需要在第1个请求中包含第2个请求,才能获得ex。特定项目的邮政编码,这是我不知道的问题。

,结果应为: 名称,地址,邮政编码,...,...,...

1 个答案:

答案 0 :(得分:0)

在评论之后,我想到了这个。请注意,我自己没有要测试的API密钥,这个想法就在那里。您可能需要根据第二个查询(循环中的查询)的$obj2函数的结果来调整对json_decode的引用。

<?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获得所需的信息。