从 google maps 地方 api 读取 json 文件(使用 javascript 或 php)

Posted

技术标签:

【中文标题】从 google maps 地方 api 读取 json 文件(使用 javascript 或 php)【英文标题】:Reading the json file from google maps places api (with javascript or php) 【发布时间】:2011-10-26 09:14:34 【问题描述】:

我正在构建一个应用程序,我试图在其中获取靠近给定纬度和经度的地点列表。

我有一个 api 密钥,在我的浏览器 url 上输入它可以工作,并给我一个包含地点数据的 json 文件。

https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I

但是当我尝试获取并解析它时,虽然 j 查询它没有给我任何东西。

$(document).ready(function()
$.getJSON('https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I',
 function(data) 
  alert(data);
);

我发现了以下有关堆栈溢出的问题,但它们无法让我找到答案。

parse google place json with javascript

How do I use Google Places to get an array of Place names?

编辑:

我试图通过

使用 php 获取文件的内容
echo file_get_contents("https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I");

并使用php获取文件内容。

但是有没有办法用 jquery 或 javascript 来解析这个?

感谢您的帮助。

【问题讨论】:

检查您的 WAMP 发行版的更新。常见的有 HTTPS 可用。你用的是哪一个? 相关:How to enable HTTPS stream wrappers(WAMP 也是) 在我的 windows 框中,使用 HTTPS 流包装器 (PHP 5.3.6) 可从 php.net 获得的默认 PHP 没有问题。 wrapper 至少需要启用 openssl 扩展。检查该扩展程序是否可用并成功加载。 我已经在我的 php.ini 中更改了行 extension=php_openssl.dll .... 还尝试运行 但这在列表中没有给出“https”.. 不仅取消注释该行,还请检查 openssl 扩展是否实际加载,例如cmd:php -m 或执行phpinfo() 【参考方案1】:

不允许使用 ajax(直接)跨域请求。我试过了:

echo file_get_contents("https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I");

它对我有用(启用了 wamp 2.0 openssl)。

如果你成功了,你可以在同一个域的页面上使用你的ajax脚本来获取内容。

编辑:

这个想法是对你的 php 页面进行 ajax 调用,php 页面从 de google api 获取数据并返回它。 jquery 自动解析 json :)

在代码中:

$.ajax(
  url: 'url_to_your_php',
  data: 
    location:'-33.8670522,151.1957362',
    radius:500,
    sensor:false,
    key:'AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I',
  dataType: "json"
  type: "GET", //or POST if you want => update your php in that case
  success: function( data ) 
    for(var i in data.results)
       doSomthingWithYourLocation(data.results[i]);
    
  ,
  error: function (request, status, error) 
    //handle errors
  
);

你的 php 应该这样做:

<?php 
    header('Content-type: application/json');
    echo file_get_contents("https://maps.googleapis.com/maps/api/place/search/json?" .
      "location=-" . $_GET['location'] .
      "&radius=" . $_GET['radius'] .
      "&sensor=" . $_GET['sensor'] .
      "&key=" .$_GET['key']);
?>

最好检查 php 文件中的输入,但这应该可以。

【讨论】:

是的.. 但是打开的 ssl 也没有被加载.. 我取消了 php.ini 行的注释。还有什么事情要做。或者我应该重新安装wamp。如何在启用 open ssl 的情况下安装?【参考方案2】:

从一个域加载的脚本无法向另一个域发出 ajax 请求。使用 Google Maps JavaScript api 加载您的数据。

【讨论】:

我尝试了以下链接中的代码code.google.com/apis/maps/documentation/javascript/places.html ..in Place Search Requests 在哪里可以找到附近的地方,我们需要先启动地图。 '服务 = 新的 google.maps.places.PlacesService(map);服务.搜索(请求,回调);' ..可以将其转换为无需启动地图的请求。 我很确定这是不可能的。 Maps API 的想法是使用 Maps,而不是从 Google 获取免费信息。顺便说一句,服务条款 (code.google.com/intl/fr-FR/apis/maps/terms.html) 说:“您不得在没有相应 Google 地图的情况下使用或显示内容,除非 Maps API 文档明确允许您这样做”。通过 PHP 访问 API 违反了 TOS。 但是我得到的数据是我在问题中给出的文件 url。我的问题是通过 php 或 javascript 解析它。【参考方案3】:

可以在这里访问 javascript API 的地方:http://code.google.com/apis/maps/documentation/javascript/places.html

【讨论】:

【参考方案4】:

你可以这样解析你的对象数据:

$(document).ready(function()
    $.getJSON('https://maps.googleapis.com/maps/api/place/search/json?location=-33.8670522,151.1957362&radius=500&sensor=false&key=AIzaSyAImBQiqvaXOQtqeK8VC-9I96kMmB6Mz7I', function(data) 
        $.each(data, function(index,place) 
            alert(place.name);
        );
    );
);

希望对你有帮助。

【讨论】:

它对你有用吗?我认为由于同源政策,它不会起作用。让我检查一下。 :)

以上是关于从 google maps 地方 api 读取 json 文件(使用 javascript 或 php)的主要内容,如果未能解决你的问题,请参考以下文章

Google Maps API 错误:此 API 密钥无权使用此服务或 API。地方 API 错误:ApiTargetBlockedMapError

从 Google Maps API 中的单个 LatLong 确定缩放级别

TypeError:无法使用 google-maps api 和 rapidapi 读取 null 的属性(读取“sw”)

从google网站API获取图片网址(附近的搜索)

Google Maps JS Api:无法读取 null 的属性“offsetwidth”[重复]

从给定的城市谷歌地方 API 检索所有地区和子地区