2013-10-10 26 views
0

我試圖撥打以下網址獲得使用Python返回的JSON:調用從GAE應用程序的YouTube API返回403

http://gdata.youtube.com/feeds/api/users/pbsnewshour/uploads?v=2&alt=jsonc&prettyprint=true 

但所有我得到的是:

File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 531, in http_error_default 
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp) 
HTTPError: HTTP Error 403: Forbidden 

我需要補充一點,我打開了用於gae應用的YouTube Analytics API和YouTube Data API v3服務。

這是我在Python端使用的代碼:

req = urllib2.Request(url, headers={'User-Agent' : "Magic Browser"}) 
response = urllib2.urlopen(req) 
dump = response.read() 
d = json.loads(dump) 

在當地的一切工作正常。

關於如何解決這個問題的任何想法?

回答

0

除了403代碼,你的http請求的內容是什麼?

我在我的瀏覽器中使用GAE託管的代理嘗試了您的API網址,我也收到了403個以下XML內容。

<error> 
    <domain>yt:quota</domain> 
    <code>too_many_recent_calls</code> 
</error> 

我想GAE的urlfetch服務託管在一些單獨的服務器上。許多gae應用程序實例與ip共享同一個urlfetch服務器。所以GAE應用很容易達到每個ip的Youtube呼叫數限制。

在SO貼子中有一些解決方法:yt:quota too many recent calls - Youtube API help。但似乎他們並沒有完全解決問題。

0

你應該在你的請求中包含一個開發人員密鑰,你可以註冊一個here

0

這裏有幾個問題正在進行。首先,因爲您開啓了YouTube Data API v3服務,您應該使用API​​的v3;但是,您在示例中請求的網址適用於API的第2版。你要使用對應於此v3的端點是在這裏:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&playlistId=UU6ZFN9Tx6xh-skXCuRHCDpQ&key={YOUR_API_KEY} 

其次,作爲另一篇文章中提到,您需要使用您的要求的API密鑰;對於API的第3版,您可以在Google API console(或其新的Cloud Console)中執行此操作,您將在其中爲您的應用程序生成他們稱之爲「瀏覽器密鑰」的內容。在端點的相關位置追加,你應該找回你感興趣的JSON。

最後,你可能想知道在請求URL中playlistId的參數使用了長字符串我上面提到過;在API的V3,你可以這樣做用戶的「頻道」端點的請求:

https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails&forUsername=pbsnewshour&key={YOUR_API_KEY} 

,你將不得不退還給您與該用戶的各種飼料;我從那裏提取的字符串是'uploads'feed,因此它與您在原始帖子中查找的內容相對應。

相關問題