Средство сокращения URL Google не работает с использованием file_get_contents

#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);