我对访问Youtube Analytics API以获取随机youtube频道存在问题。
使用以下范围成功授权后:
我将token
和refresh token
保存在数据库中。一切都运作良好一段时间。在我的应用发出请求后一段时间(例如三个月),Google返回403:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Forbidden"
}
],
"code": 403,
"message": "Forbidden"
}
}
但仅适用于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)
统计请求:
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)
我正在使用google-api-python-client 1.6.5
修改
我在使用google-api-python-client
调试google API请求时附加了屏幕截图。这是发生了什么:
答案 0 :(得分:1)
好的,我们先从一些背景信息开始。
刷新令牌停止工作的原因很简单。
现在对你来说都不是这样。为什么因为刷新令牌仍然可以正常下垂范围。用户无法删除您对一个范围的访问权限并且它不会使一个范围到期,这是疯狂的。
据说我正在导致这是一个错误。我已经发送了一封电子邮件给我认识的Oauth团队成员。
同时。我有个主意吗?
如果您尝试使用刷新令牌请求新的访问令牌会怎样?是否存在返回给您的访问令牌的问题?
答案 1 :(得分:1)
鉴于您说令牌刷新有效但API调用返回错误,我唯一怀疑的是api方面的问题。
您是否正在从服务器进行这些API调用?有多少用户?您可能遇到基于IP的限制。我肯定不知道。
我认为找到问题的最简单方法是,如果您可以向我们发送一些开始返回错误的令牌。我们可以查询令牌是否无效或API方面是否存在问题。 您可以通过电子邮件将其发送至oauth-help@google.com