Use*_*ser 7 python google-api youtube-api google-api-python-client youtube-analytics-api
我对访问Youtube Analytics API以获取随机youtube频道存在问题.
使用以下范围成功授权后:
我保存token并refresh token在数据库中.一切都运作良好一段时间.在我的应用发出请求后一段时间(例如三个月),Google返回403:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Forbidden"
}
],
"code": 403,
"message": "Forbidden"
}
}
Run Code Online (Sandbox Code Playgroud)
但仅适用于Youtube Analytics API,Youtube Data API中的其他端点可以正常使用此令牌.这种情况发生在随机账户(渠道)上.此频道的所有者未撤消对我的应用的访问权限,未更改帐户密码等.
此问题影响我应用程序中所有渠道的大约40%(Youtube Analytics API停止工作的时间不同,从获取OAuth2令牌后的1到6个月).然后我必须定期向他们发送一个新的授权网址.
问题出在哪儿?
这是我生成一个auth url并发出请求的方式:
身份验证网址:
flow = client.flow_from_clientsecrets(
secret_file_path,
scope=["https://www.googleapis.com/auth/youtube.readonly",
"https://www.googleapis.com/auth/yt-analytics.readonly"],
redirect_uri=redirect_url,
prompt="consent"
)
flow.params["access_type"] = "offline"
url = flow.step1_get_authorize_url(state=state)
Run Code Online (Sandbox Code Playgroud)统计要求:
auth = client.OAuth2Credentials.from_json(credentials_from_db)
http_auth = auth.authorize(httplib2.Http())
api = discovery.build("youtubeAnalytics", "v1", http=http_auth,
cache_discovery=False)
api.reports().query(
ids="channel==%s" % channel_id,
metrics="estimatedMinutesWatched",
dimensions="video",
start_date=start_date,
end_date=end_date,
max_results=20,
filters="video=={}".format(",".join(video_ids))
).execute(http=http)
Run Code Online (Sandbox Code Playgroud)我正在使用google-api-python-client 1.6.5
编辑
我在调试使用google API的请求时附加了屏幕截图google-api-python-client.这是发生了什么:
我的观点是,刷新令牌在两种情况下都成功交换,但仅适用于Youtube Data API.我故意交换两次.同样的结果是当我仅通过一次成功的令牌交换访问Youtube Analytics API时(不调用Youtube Data API).
最有趣的部分是,这段代码可以运行一段时间(几周或几个月),然后停止:-)
好的,让我们从一些背景信息开始。
刷新令牌停止工作的原因有多种。
现在,这一切都不适用于您。为什么,因为刷新令牌仍然有效,只是降低了范围。这是疯狂的,用户无法删除您对一个范围的访问权限,并且它不会使一个范围过期。
话虽如此,我正在导致这是一个错误。我已向 Oauth 团队中我认识的人发送了一封电子邮件。
同时。我有个主意?
如果您尝试使用刷新令牌请求新的访问令牌,会发生什么情况?是否是返回给您的访问令牌存在问题?
| 归档时间: |
|
| 查看次数: |
733 次 |
| 最近记录: |