调用 REST API 时如何处理 Google Ads API 速率限制?
Posted
技术标签:
【中文标题】调用 REST API 时如何处理 Google Ads API 速率限制?【英文标题】:How to handle Google Ads API rate limit when calling REST API? 【发布时间】:2021-09-18 09:29:07 【问题描述】:我正在使用 Google Ads REST API 来提取广告数据。我没有使用客户端库。
一个问题,您如何在调用请求时以编程方式检查当前 API 使用情况,以便在继续之前停止并等待? Facebook Marketing API 等其他 API 在结果中有一个标头,告诉您还剩下多少请求,所以我可以停下来等待。 Google Ads REST API 上是否有类似的信息?
感谢您阅读本文。
【问题讨论】:
【参考方案1】:到目前为止,我在the documentation 中没有看到任何迹象表明存在:(
(如果您的速度太快/API 过载,则另外还有一个 RateExceeded 错误,其中包括一个 retryAfterSeconds
字段。)
【讨论】:
感谢您的信息。我已经发现了。但是,我想完全避免达到速率限制:D【参考方案2】:最终,我尝试了这种方法。到目前为止,我还没有达到极限:
截至本答案(链接:https://developers.google.com/google-ads/api/docs/access-levels),Google Ads API 的基本开发人员令牌每天允许 15,000 个请求。所以每小时有 15,000 / 24 = 625 个请求。 进一步划分表明,我每分钟可以有 625/60 = 10.4 个请求。所以每 6 秒 1 个请求将确保我不会达到速率限制。
所以我的解决方案是:
-
测量完成请求调用和后续处理所需的时间
如果总时间超过 6 秒,则执行下一个请求。否则,等待总时间为 6 秒,然后执行下一个请求。
下面的代码是我用来执行此操作的。希望对大家有帮助。
import time
from math import ceil
waiting_seconds = 6
start_time = time.time()
###############PERFORM API REQUEST HERE
#Measure how long it takes, should be at least 6 secs to be under API limit
end_time = time.time()
elapsed = end_time - start_time
if elapsed < waiting_seconds:
remaining = ceil(waiting_seconds - elapsed)
time.sleep(remaining)
【讨论】:
以上是关于调用 REST API 时如何处理 Google Ads API 速率限制?的主要内容,如果未能解决你的问题,请参考以下文章