#php #google-app-engine #file-get-contents #url-shortener #google-url-shortener
#php #google-app-engine #file-get-contents #средство сокращения url #google-url-shortener
Вопрос:
Я пытаюсь сократить URL с помощью Google api, мой сайт размещен на Google app engine, поэтому я не могу использовать CURL, приходится использовать file_get_contents
$link = 'http://wwww.example.com';
$data = array('longUrl' => $link, 'key' => $apiKey);
$data = http_build_query($data);
$context = [
'http' => [
'method' => 'post',
'header'=>'Content-Type:application/json',
'content' => $data
]
];
$context = stream_context_create($context);
$result = file_get_contents('https://www.googleapis.com/urlshortener/v1/url', false, $context);
$json = json_decode($result);
print_r($json);
Приведенный выше код выдает ошибку
stdClass Object
(
[error] => stdClass Object
(
[errors] => Array
(
[0] => stdClass Object
(
[domain] => global
[reason] => parseError
[message] => Parse Error
)
)
[code] => 400
[message] => Parse Error
)
)
Пожалуйста, поправьте меня, где я делаю неправильно: (
Комментарии:
1. Вы определили
$apiKey
? Попробуйтеecho http_build_query($data);
посмотреть, что оно показывает2. да, я определил apikey и http_build_query ($ data); также выполняет свою work..am не получается определить, где проблема на самом деле решается?
3. Затем попробуйте ` echo file_get_contents(‘ googleapis.com/urlshortener/v1/url ‘, false, $ context);` чтобы посмотреть, каков ответ.
Ответ №1:
API ожидает тело запроса в JSON-кодировке (см.https://developers.google.com/url-shortener/v1/url#resource ), поэтому вам действительно следует использовать json_encode вместо http_build_query.
Комментарии:
1. Большое спасибо 🙂 Я не заметил его в форме json … в любом случае, большое спасибо 🙂 (Y)
Ответ №2:
Для всех, кто сталкивался с этим, я смог заставить его работать со следующим:
$link = 'http://www.google.com';
$data = array('longUrl' => $link);
$context = [
'http' => [
'method' => 'post',
'header'=>'Content-Type:application/json',
'content' => json_encode($data)
]
];
$context = stream_context_create($context);
$result = file_get_contents('https://www.googleapis.com/urlshortener/v1/url?key=your_key_here', false, $context);
// Return the JSONified results
$this->output->set_output($result);