调用 REST API 时如何处理 Google Ads API 速率限制?
How to handle Google Ads API rate limit when calling REST API?
我正在使用 Google Ads REST API 来提取广告数据。我没有使用客户端库。
一个问题,您如何在调用请求时以编程方式检查当前 API 使用情况,以便您可以在继续之前停下来等待? Facebook Marketing API 等其他 API 结果中有一个 header,告诉您还剩多少请求,所以我可以停下来等待。在 Google Ads REST API 上是否有类似的信息?
感谢您阅读本文。
到目前为止,我在 the documentation 中没有看到任何迹象表明存在 :(
(另外还有一个 RateExceeded 错误,其中包括一个 retryAfterSeconds
字段,如果你走得太快/ API 超载了。)
最终,我尝试了这个方法。到目前为止,我还没有达到限制:
Google 广告 API 的基本开发人员令牌允许每天 15,000 个请求(Link:https://developers.google.com/google-ads/api/docs/access-levels)。所以每小时有 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)
我正在使用 Google Ads REST API 来提取广告数据。我没有使用客户端库。
一个问题,您如何在调用请求时以编程方式检查当前 API 使用情况,以便您可以在继续之前停下来等待? Facebook Marketing API 等其他 API 结果中有一个 header,告诉您还剩多少请求,所以我可以停下来等待。在 Google Ads REST API 上是否有类似的信息?
感谢您阅读本文。
到目前为止,我在 the documentation 中没有看到任何迹象表明存在 :(
(另外还有一个 RateExceeded 错误,其中包括一个 retryAfterSeconds
字段,如果你走得太快/ API 超载了。)
最终,我尝试了这个方法。到目前为止,我还没有达到限制:
Google 广告 API 的基本开发人员令牌允许每天 15,000 个请求(Link:https://developers.google.com/google-ads/api/docs/access-levels)。所以每小时有 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)