Youtube API错误v3 - '未选择过滤器'

时间:2015-05-21 13:28:05

标签: python youtube-api youtube-data-api

我正在使用Youtube V3 Api,这里是代码片段,用于从我的YouTube频道中提取前十个视频。 (同样的查询在Google API资源管理器@ https://developers.google.com/apis-explorer/

中完美运行
url_start = "https://www.googleapis.com/youtube/v3/videos?" + \ 
            "order=viewCount&part=snippet&forMine=true" + \
            "&type=video&maxResults=10&key=MY_API_KEY"
data = requests.get(url_start).json()

但是我收到了这个错误:

{u'error': {u'code': 400,
            u'message': u'No filter selected.',
            u'errors':[{u'locationType': u'parameter',
                        u'domain': u'youtube.parameter',
                        u'message': u'No filter selected.',
                        u'reason': u'missingRequiredParameter',
                        u'location': u''}]}}

我知道密钥有效,因为如果我可以在没有forMine的情况下执行相同的查询

https://www.googleapis.com/youtube/v3/search?part=snippet&key=MY_API_KEY

我从youtube上获得了整体热门视频。有没有更好的方法来做到这一点或解决方法?

1 个答案:

答案 0 :(得分:3)

forMine参数仅适用于经过身份验证的用户(使用您的应用程序完成oAuth2流程的用户),因此您的请求所抱怨的缺失参数是所需的访问令牌。

如果您的目标是运行私有脚本,在任何给定时间显示您的前十个视频,那么您可以在应用中设置一个临时例程,允许您使用oAuth2手动进行身份验证并捕获刷新令牌;如果你存储它,那么在将来的请求中,刷新令牌可以获得访问令牌而无需手动授权。

如果您的目标是创建一个信息中心,以便您的用户可以看到他们自己的前十个视频,那么您只需将oAuth2身份验证连接到您的流中,并在每次请求时发送访问令牌。 Python的gapi client使这非常简单。

如果您想在没有视频列表的forMine参数的情况下进行此操作,您可以返回搜索端点并传入用户频道ID(当然,这需要提前知道,而经过身份验证的方法适用于任何登录的用户,而无需知道他们是谁:

https://www.googleapis.com/youtube/v3/search?order=viewCount&part=snippet&channelId={channel id here}&maxResults=25&key={YOUR_API_KEY}