2015-06-22 5 views
2

У меня есть то, что я думаю правильно написанный код, но всякий раз, когда я пытаюсь его назвать, я получаю разрешение от Google.Google Short URL API: Запрещено

file_get_contents(https://www.googleapis.com/urlshortener/v1/url): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden 

Это не предел скорости или что-нибудь, как я в настоящее время ноль когда-либо использовал ...

я бы подумал, что это происходит из-за неправильного ключа API, но я попытался сбросить его с количество раз. Существует ли какое-то время простоя, когда API впервые применяется?

Или мне не хватает настроек заголовка или чего-то еще такого же малого?

public function getShortUrl() 
{ 
    $longUrl = "http://example.com/"; 
    $apiKey = "MY REAL KEY IS HERE"; 

    $opts = array(
     'http' => 
      array(
       'method' => 'POST', 
       'header' => "Content-type: application/json", 
       'content' => json_encode(array(
        'longUrl' => $longUrl, 
        'key'  => $apiKey 
       )) 
      ) 
    ); 

    $context = stream_context_create($opts); 

    $result = file_get_contents("https://www.googleapis.com/urlshortener/v1/url", false, $context); 

    //decode the returned JSON object 
    return json_decode($result, true); 
} 
+0

Пытались ли вы с Curl? –

+0

Я сделал, тот же результат - я бы тоже не использовал cURL, если я действительно не должен ... –

+0

У меня нет опыта работы с API-интерфейсом Google urlshortener, поэтому я больше не могу помочь. Но в любом случае я бы пошел с cURL, так как это быстрее (вы можете искать различные тесты скорости между файловыми_контентами, завитки и другими методами). –

ответ

1

Кажется, мне нужно вручную указать ключ в URL

$result = file_get_contents("https://www.googleapis.com/urlshortener/v1/url?key=" . $apiKey, false, $context); 

Это теперь работает. Должно быть что-то смешное в том, как API проверяет POST для ключа (или его отсутствие).

Edit: Для тех, кто в будущем это моя полная функция

public static function getShortUrl($link = "http://example.com") 
{ 
    define("API_BASE_URL", "https://www.googleapis.com/urlshortener/v1/url?"); 
    define("API_KEY", "PUT YOUR KEY HERE"); 

    // Used for file_get_contents 
    $fileOpts = array(
     'key' => API_KEY, 
     'fields' => 'id' // We want ONLY the short URL 
    ); 

    // Used for stream_context_create 
    $streamOpts = array(
     'http' => 
      array(
       'method' => 'POST', 
       'header' => [ 
        "Content-type: application/json", 
       ], 
       'content' => json_encode(array(
        'longUrl' => $link, 
       )) 
      ) 
    ); 

    $context = stream_context_create($streamOpts); 
    $result = file_get_contents(API_BASE_URL . http_build_query($fileOpts), false, $context); 

    return json_decode($result, false)->id; 
} 
+0

спасибо за этот код, работающий очень хорошо .... – Paramjeet