我有一个这样的网址,搜索某个位置的内容:
https://maps.google.com/maps?q=dentist+Austin+Texas&hl=en&mrt=yf=l
我需要前两个结果列表,如(“Dentist Mr.Example1”,“Dentist Ex.2”)。
观看此问题:What parameters should I use in a Google Maps URL to go to a lat-lon?,我认为网址是正确的。
看着这一个:Get latitude and longitude automatically using php, API 我尝试了这两个选项:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($data);
还有这个:
$content= file_get_contents($url);
preg_match_all("|<span class=\"pp-place-title\">(.*?)</span></span>|",$content,$result);
在这两种情况下,我都没有任何结果。 提前谢谢!
答案 0 :(得分:2)
我有一个这样的网址,搜索某个位置的内容:
https://maps.google.com/maps?q=dentist+Austin+Texas&hl=en&mrt=yf=l
我需要前两个结果列表(“牙医。” Mr.Example1“,”Dentist Ex.2“)。
这是 Google Maps API请求。
你走了:
$searchTerm = 'dentist+austin+texas';
$url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $searchTerm;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$array = json_decode($response, true);
// var_dump($array);
// Output
$array = $array['results'];
foreach($array as $index => $component)
{
echo '#' . $index . ' ' . $component['formatted_address'] . '<br>';
// show only the first 2 items (#0 & #1)
if($index === 1) {
break;
}
}
一些注意事项:
参考:https://developers.google.com/maps/documentation/geocoding/
这几乎是完美的,但我想得到电话号码和排名(评论的星星)。
最初的问题是使用Google Maps API列出奥斯汀牙医的第一个结果,tx。
此附加要求会更改要使用的API / Web服务,以便检索丰富的数据。您想要更多关于地址的details。
数据元素“phone_number”和“rating”是Google Places Webservice (Place Details)的一部分。您需要将密钥添加到请求网址(&key=API_KEY
)才能访问此服务。
https://developers.google.com/places/webservice/details#PlaceDetailsRequests
这是地方明细要求:
1)从第一个请求中提取“place_id”。
2)通过后续请求,您可以通过“Place Details”webservice检索有关每个地点的详细信息。
示例:这里我使用placeid
作为第一个条目:
新代码:
<?php
// Google GeoCode API
$address = 'dentist+austin+texas';
$array = getGoogleGeoCode($address);
$array = $array['results'];
//var_dump($array);
foreach($array as $index => $component)
{
echo '#' . $index . ' ' . $component['formatted_address'] . ', ' ;
// subsequent request for "Place Details"
$details = getGooglePlaceDetails($component['place_id']);
$details = $details['result'];
//var_dump($details);
echo 'Phone: ' . $details['formatted_phone_number']. ', ' ;
// rating contains the place's rating, from 1.0 to 5.0, based on aggregated user reviews.
if(isset($details['rating'])) {
echo 'Rating: ' . $details['rating'];
}
// show only the first two entries
/*if($index === 1) {
break;
}*/
echo '<br>';
}
function getGooglePlaceDetails($placeid)
{
// your google API key
$key = 'AIzaSyCj9yH5x6_5_Om8ebAO2pBlaqJZB-TIViY';
$url = 'https://maps.googleapis.com/maps/api/place/details/json?placeid=' . $placeid . '&key=' . $key;
return curlRequest($url);
}
function getGoogleGeoCode($address)
{
$url = 'https://maps.googleapis.com/maps/api/geocode/json?address=' . $address;
return curlRequest($url);
}
function curlRequest($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
结果:
rating
并不总是存在,因为它是基于评论的。只需使用var_dump($details);
查看其中的内容并选择您需要的内容。