我目前正在管理两个Google Analytics(分析)管理帐户,每个帐户都有许多客户端和view_id。任务是通过Google Analytics(分析)Reporting API(v4)请求客户端数据,并每天通过Airflow DAG结构将其存储到SQL后端。
对于第一个帐户,一切正常。 就在最近,我在数据请求例程中添加了第二个帐户。 问题是,即使两个帐户都设置为相同的“ USER-100s”配额限制,对于新添加的帐户,我仍然会收到此错误消息:
googleapiclient.errors.HttpError: <HttpError 429 when requesting https://analyticsreporting.googleapis.com/v4/reports:batchGet?alt=json returned "Quota exceeded for quota group 'AnalyticsDefaultGroup' and limit 'USER-100s' of service 'analyticsreporting.googleapis.com' for consumer 'project_number:XXXXXXXXXXXX'.">
我已经按照Google官方准则(https://developers.google.com/analytics/devguides/config/mgmt/v3/limits-quotas)的建议,将配额限制“ User-100s”从100设置为最大1000。
我还检查了Google API控制台和项目编号的请求数量,但到目前为止,我从未超过每100秒1000个请求(请参阅请求历史记录帐户2),而第一个帐户始终有效(请参阅请求历史记录)帐户1)。仍然出现上述错误。
我还可以排除第二个帐户的客户仅拥有更多数据的可能性。
我现在陷入了try-except循环,该循环一直在请求,直到最终成功查询数据为止,例如
success = False
data = None
while not success:
try:
data = query_data() # trying to receive data from the API
if data:
success = True
except HttpError as e:
print(e)
这一点都不完美,并且对维护(例如集成测试)不利。另外,由于循环有时可能无限期地运行,因此这非常耗时且占用大量资源。只能在短时间内解决。
这尤其令人沮丧,因为第一个帐户使用相同的实现,发出了更多请求,而第二个帐户失败了。
如果您对此有任何解决方案,我将非常高兴知道。
干杯托比
答案 0 :(得分:3)
我知道这个问题已经存在了一段时间,但是让我尝试帮助您。 :)
有3个标准请求限制:
如您在图像中显示的(https://i.stack.imgur.com/Tp76P.png)
配额组“ AnalyticsDefaultGroup”是指您的API项目,并且该配额中包含用户配额。
根据您的描述,您正在达到用户配额,通常是在您的请求中未提供userIP
或quotaUser
时发生的。
因此,要防止这些错误,您需要处理一些要点:
quotaUser
中包含唯一字符串; 根据您的代码,我假设您使用的是默认的Python Python Google API客户端(https://github.com/googleapis/google-api-python-client),它没有全局方法来定义quotaUser
。
包括quotaUser
analytics.reports().batchGet(
body={
'reportRequests': [{
'viewId': 'your_view_id',
'dateRanges': [{'startDate': '2020-01-01', 'endDate': 'today'}],
'pageSize': '1000',
'pageToken': pageToken,
'metrics': [],
'dimensions': []
}]
},
quotaUser='my-user-1'
).execute()
这将使您向该用户请求的Google API注册(使用100个用户限制中的1个),而不是整个项目。
每秒限制1个请求
如果您打算提出很多请求,建议您使用以下命令在每个请求之间添加一个延迟时间:
time.sleep(1)
在对API提出请求之后。这样一来,您可以每100秒保持100个以下的请求。
我希望能有所帮助。 :)