【发布时间】:2014-04-09 13:10:49
【问题描述】:
我在聊天中解析来自 vimeo/twitch/youtube 等的网址。一切正常,除了当我从抓取 youtube 切换到实际使用他们的 api 时。现在这是一个非常小的应用程序,因此不需要庞大的客户端库和 oAuth 2 等。只需使用 python 和 urllib2。
现在,如果我在浏览器中打开这个特定的 url,我会返回数据,但是当我在服务器上执行此操作时,我会得到 403 Forbidden。根据谷歌开发者控制台,从我的服务器查询时它已经工作了 2/10 次。
https://www.googleapis.com/youtube/v3/videos?id={id}&key={api_key}&part=snippet,contentDetails,statistics&fields=items(snippet/channelTitle,snippet/title,contentDetails/duration,statistics/viewCount)
这是我的应用创建的网址。当我在浏览器中打开它并在 api 密钥等中绘图时,它工作得很好,但是当我这样做时:
urllib2.urlopen(url)
我收到403 Forbidden。
api 密钥是从 Google Developers Console 中的“公共 API 访问”->“服务器密钥”生成的。哪个有IP白名单,服务器ip就在里面。
有人知道为什么会这样吗?我能想到的唯一原因是因为 urllib2 发送的标头告诉 youtube 请求来自 python,但是当您有 api 密钥时这应该不是问题吗?
【问题讨论】:
-
我并不是说这是解决方案,但是在使用 urllib2 时,您需要确保您已经对所有参数进行了 urlencoded ... 如果您的密钥中有一个字符因为它不是't urlencoded 可能导致 403。
-
哇,这解决了问题!非常感谢,您能否将其作为答案而不是评论,以便我接受? :)
-
很高兴这是问题所在……我自己也被那个咬了!将评论移至答案,希望它也能对其他人有所帮助。
标签: python youtube youtube-api