通过 API 向 Google Places 添加新地点的 PHP 代码

Posted

技术标签:

【中文标题】通过 API 向 Google Places 添加新地点的 PHP 代码【英文标题】:PHP code for adding new place to Google Places via API 【发布时间】:2011-09-22 19:20:11 【问题描述】:

我正在努力将 Google 的 Places API 集成到网络应用程序中。我已经能够成功地创建代码以允许用户使用 API 搜索地点并在应用程序中显示结果,这很酷。

我一直想不通的是如何允许该应用的用户添加新地点。谷歌所说的东西是可行的。他们在这里有一些文档 -

https://code.google.com/apis/maps/documentation/places/#adding_a_place

但是没有示例代码,我在编写 php 代码来实现 add 调用时遇到了一些困难。


这是迄今为止我想出的代码。我在这里用 your key 替换了我的实际 API 密钥。

我不断收到格式错误的帖子错误 -

400。这是一个错误。 您的客户发出了格式错误或非法的请求。这就是我们所知道的。


<?php

function ProcessCurl($URL, $fieldString) //Initiate Curl request and send back the result
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADERS, array('Content-Type: application/json'));
        curl_setopt($ch, CURLOPT_URL, $URL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
        curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
        curl_setopt($ch, CURLOPT_POSTFIELDS, array('json'=>json_encode($fieldString)));
        $resulta = curl_exec ($ch);
        if (curl_errno($ch)) 
                print curl_error($ch);
         else 
        curl_close($ch);
        
        echo $resulta;
    

$jsonpost = '
  "location": 
    "lat": -33.8669710,
    "lng": 151.1958750
   ,
  "accuracy": 50,
   "name": "Daves Test!",
   "types": ["shoe_store"],
  "language": "en-AU"
';
 $url = "https://maps.googleapis.com/maps/api/place/add/json?sensor=false&key=your key";

 $results = ProcessCurl ($url, $jsonpost);

 echo $results."<BR>";
?> 

【问题讨论】:

如果您展示您为尝试执行此操作而编写的代码将会很有帮助。 就像按照给定的格式做一个 POST 请求一样简单。有很多不同的方法可以做到这一点,如果您想要示例代码,向我们展示您已经在使用的内容会很有帮助。 (cURL?套接字?一些库?) 【参考方案1】:

您的代码存在一些问题。

首先,您将使用CURLOPT_HTTPHEADERS,而实际上它是CURLOPT_HTTPHEADER(没有尾随的“S”)。该行应为:

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));

接下来,Google 不希望您传递参数名称,而只是传递一个值。另一件事是 $jsonpost 已经是 JSON,因此无需调用 json_encode。该行应为:

curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldString);

有关更多信息,请查看 Google 文档:http://code.google.com/apis/maps/documentation/places/#adding_a_place。

您的完整代码,已修复、测试并可以运行:

<?php

function ProcessCurl($URL, $fieldString) //Initiate Curl request and send back the result
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
        curl_setopt($ch, CURLOPT_URL, $URL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        //curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $fieldString);
        $resulta = curl_exec ($ch);
        if (curl_errno($ch)) 
                print curl_error($ch);
         else 
        curl_close($ch);
        
        echo $resulta;
    

$jsonpost = '
  "location": 
    "lat": -33.8669710,
    "lng": 151.1958750
   ,
  "accuracy": 50,
   "name": "Daves Test!",
   "types": ["shoe_store"],
  "language": "en-AU"
';

$url = "https://maps.googleapis.com/maps/api/place/add/json?sensor=false&key=";

$results = ProcessCurl ($url, $jsonpost);

echo $results."<BR>";

【讨论】:

这确实完全有效。感谢您澄清我哪里出错了。深表感谢。 您好,我在提供的链接上找不到使用 API 添加新位置的文档。是否还支持使用 API 添加地点?

以上是关于通过 API 向 Google Places 添加新地点的 PHP 代码的主要内容,如果未能解决你的问题,请参考以下文章

是否可以通过 Google Places API 获取“热门时间”信息

使用 Google Places API 时的 REQUEST_DENIED

Google Places API Android:自动完成关闭太快

Google Places web api 不与 superagent 合作

从 Google Places API 获取地址信息

适用于 Android 的 Google Places API:地图立即消失