我正在使用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上获得了整体热门视频。有没有更好的方法来做到这一点或解决方法?
答案 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}