调用 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 速率限制?的主要内容,如果未能解决你的问题,请参考以下文章

快速导航页面时如何处理HTTP api请求 |颤振 |镖

使用 Azure 文本翻译 API 时如何处理限制?

从 API 接收时如何处理 blob 存储 url

在Google Cloud中部署Python App时如何处理打开文件的路径?

发生管道损坏时如何处理 AJAX 响应?

运行 Mongoose 时执行 ajax 调用时如何处理 Node.js 发现