node.js - Google API dailyLimit超出解决方案

标签 node.js google-analytics google-api google-analytics-api quota

我使用 Google Analytics(分析)已有 2 个月了。我使用 NodeJS(express/serverless)创建了一个自定义仪表板,并从核心报告 API 和实时报告 API 请求数据。我已成功将其作为 AWS 上的 Lambda 函数。虽然我对此感到非常高兴,但我现在面临一些问题。

我收到以下错误:

{  
   "error":{  
      "errors":[  
         {  
            "domain":"global",
            "reason":"dailyLimitExceeded",
            "message":"Quota Error: profileId ga:NNNNN has exceeded the daily request limit."
         }
      ],
      "code":403,
      "message":"Quota Error: profileId ga:NNNNN has exceeded the daily request limit."
   }
}

{  
   "error":{  
      "errors":[  
         {  
            "domain":"usageLimits",
            "reason":"userRateLimitExceeded",
            "message":"User Rate Limit Exceeded"
         }
      ],
      "code":403,
      "message":"User Rate Limit Exceeded"
   }
}

我的仪表板如下所示:

enter image description here

当仪表板被访问时,它会调用实时 API 9 次(图像中的每个 block 都是一个查询调用)。我想我可以将“在线用户”、“今日用户”和“今日综合浏览量”调用合并为一个调用。今日搜索和今日订单由搜索特定事件的过滤器指定。

我在时间检查器中构建了一个版本,它允许在 07:00 到 19:00 之间查看仪表板。当早于 07:00 或晚于 19:00 时,变量 checkTime 设置为 false,这使得仪表板显示一个带有“仪表板离线”之类文本的 div。当有人在允许的时间范围内访问了仪表板时,变量 checkTime 会设置为 true,并且可以调用 Google API。

仪表板在 07:00 到 19:00 之间在电视屏幕上运行。这意味着仪表板会在电视屏幕上显示 12 小时。每 20 秒就会有一个函数调用来更新所有数据(因此又发出了 9 个请求)。

假设有

60 minutes x 3 = 180 x 12 = 2160 x 9(requests) = 19440 requests for a day.

我认为我不应该达到 50.000 的配额。但我已经达到了 10.000 的个人资料配额。

但是,当我查看开发者控制台时,我可以看到以下内容:

enter image description here

enter image description here

enter image description here

我认为我的选择如下:

  • 将间隔增加到 1 分钟((60 x 12) x 9 个 View 请求 = 6480),这样就不会超出配置文件配额。但这并没有真正使仪表板变得实时。

  • 创建一个服务器,运行查询(间隔增加为 1 分钟),并将结果保存到数据库中。仪表板向数据库发出 GET 请求。这样多个电视屏幕应该能够请求数据。

问题:我是否还可以创建多个服务帐户,并在达到限制时切换到其他服务帐户,或者这不会修复 profileid 限制吗?

最佳答案

DailylimitExceded 可能意味着以下两种情况之一。

您每天只能针对单个 View 发出 10000 个请求。您与其他开发人员共享此配额。因此,如果我安装你的应用程序和其他人的应用程序,每天只能针对我的 Google 分析 View 发出 10000 个请求,然后两个应用程序都会收到该错误。如果您发出这些请求,您应该将数据存储在数据库中,这样您就不需要再次请求相同的信息。即使是不同的用户尝试在同一 View 上查看数据。您可能无法在 Google 开发者控制台中跟踪此配额命中情况。

第二个问题是,默认情况下,应用程序每天最多可以在所有 View 中发出 50000 个请求。这意味着,如果您有 5 个用户,并且您每天为每个用户发出 10000 个请求,则您已达到请求限制。我不认为这就是你所击中的。

第一个配额是基于用户的配额,您无能为力,也无法扩展它。您需要限制您的请求,以免阻止用户帐户。第二个,您可以在 Google 开发者控制台中申请延期,当您达到当前每日配额的 80% 左右时,可能需要一段时间才能获得您应该申请的延期。

这里最重要的是,您不应该两次请求相同的数据。如果您发出了请求,您应该保存它并向用户显示存储的数据,而不是再次请求。该请求以及实时 api 的请求频率不应超过每 5 分钟一次,因为您将耗尽我们的配额。

我曾多次向 Google 建议,实时 API 应该有自己的配额,并且与报告 API 不同。我还在等待他们添加此功能。

关于node.js - Google API dailyLimit超出解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48164676/

相关文章:

python - 用户配置文件 gmail api 中的历史记录 ID 是什么?

.net - 使用 Google.Api OAuth 2 时拒绝访问路径 'C:\Windows\system32\config\systemprofile'

node.js - 路由返回空数组,即使插入数据库似乎有效

javascript - 当 openssl 命令行执行时,Node.js 验证功能不验证签名

javascript - 从授权码google oauth2获取刷新 token

javascript - setTimeout 阻止事件循环

javascript - 不明白谷歌要求分析(一行是错误的)

php - 增强型电子商务GA

javascript - 将 RSS 数据加载到全局变量中

google-analytics - Google Analytics API返回多个着陆页数据