2013-10-10 25 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,因此它与您在原始帖子中查找的内容相对应。

相关问题