PHP-код для добавления нового места в Google Адреса через API - PullRequest
8 голосов
/ 26 июня 2011

Я работаю над интеграцией API Google Адресов в веб-приложение. Мне удалось успешно создать код, позволяющий пользователям искать места с помощью API и отображать результаты в приложении, так что это круто.

То, что я не смог выяснить, - это как разрешить пользователям приложения добавлять новые места. То, что Google говорит, выполнимо. У них есть некоторая документация об этом здесь -

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

Но пример кода отсутствует, и у меня возникли некоторые трудности при разработке кода PHP для реализации вызова add.


Это код, который я придумал до сих пор. Я заменил свой фактический ключ 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>";
?> 

1 Ответ

8 голосов
/ 29 июня 2011

Есть несколько проблем с вашим кодом.

Во-первых, вы бы использовали 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>";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...