2015-06-22 133 views
2

我有什麼,我覺得正確寫入的代碼,但每當我試圖把它我得到來自谷歌拒絕的權限。谷歌短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

你曾經通過捲曲試過嗎? –

+0

我做到了,同樣的結果 - 我也寧可不使用捲曲,除非我必須...... –

+0

我真的沒有與谷歌urlshortener API的經驗,所以我不能幫助任何進一步。但在任何情況下,我會去的捲曲,因爲它是最快的(你可以搜索的file_get_contents,捲曲等方法之間的各種速度基準)。爲響應 –

回答

1

看來我需要在URL

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

這現在工作手動指定密鑰。在API檢查密鑰(或缺少這些)時,必定會有一些有趣的事情發生。

編輯:爲了在以後任何人,這是我的完整功能

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