google-analytics-api - Google Analytics 核心报告 API v3 需要 4 分钟响应

标签 google-analytics-api

我们在 Laravel 应用程序中使用 Google Analytics 核心报告 API v3 已有 2 年多了。 多年来,我们进行了一些优化,但我们的设置一直是相同的,并且现在已经运行了相当长的一段时间。

本月早些时候开始发生一些奇怪的事情,很少有请求需要大约 4 分钟才能完成。我能找到的第一个事件发生在 12 月 6 日。 first slow response

起初我没有多想,以为我们达到了某种极限,但问题仍然存在,并且越来越频繁地出现。

所以在过去的几天里,我一直在寻找问题的根源,但我一点也不知道为什么会这样。开发人员控制台中没有达到限制的迹象。

我花了一些时间来找出当我连续快速调用 API 时有多少响应缓慢,14 次调用中有 4 次花费了 240.3 到 240.5 秒。我已经打印了调用的结果,并且只调用了 1 个特定 View 以查看在 1 个请求中发送大量数据是否不是问题。 该 View 当天没有数据,因此所有请求都返回 0 行,所有指标的总数为 0。没有附加错误消息。

Response times

开发者控制台另有说明,它表示在过去一小时内没有请求超过 300 毫秒: developer console times

这是在我们的服务器和本地环境中发生的,所以我认为它与 nginx/internet 问题无关。

我很确定我的代码没有问题,这确实与限制有关,但我还是添加了它。此方法提取我们存储在数据库中的所有 View ,并对 API 进行 3 次调用以提取多个指标,这不能在 1 个请求中完成,因为您不能一次请求超过 10 个指标。

public function getExternal()
{
    $this->logInfo("Retrieving reports");
    $views = $this->getLinkedViews();
    $i = 1;
    foreach ($views as $view) {
        try {
            $params= array('dimensions' => 'ga:campaign, ga:source, ga:medium, ga:date' );
            $start = microtime(true);
            $response = $this->analytics->data_ga->get(
                'ga:' . $view->datasource_id,
                $this->startDate,
                $this->endDate,
                'ga:users, ga:sessions, ga:bounceRate, ga:avgSessionDuration, ga:goal1Completions , ga:goal2Completions , ga:goal3Completions , ga:goal4Completions',
                $params
                );
            var_dump('call time: ' . (microtime(true) - $start));
            $data = $response->getRows();
            if ($data != null) {
                $this->rawData[$view->datasource_id. '.1'] = $data;
            }
            $response = $this->analytics->data_ga->get(
                'ga:' . $view->datasource_id,
                $this->startDate,
                $this->endDate,
                'ga:goal5Completions , ga:goal6Completions , ga:goal7Completions , ga:goal8Completions , ga:goal9Completions , ga:goal10Completions , ga:goal11Completions , ga:goal12Completions',
                $params
                );
            $data = $response->getRows();
            if ($data != null) {
                $this->rawData[$view->datasource_id. '.2'] = $data;
            }
            $response = $this->analytics->data_ga->get(
                'ga:' . $view->datasource_id,
                $this->startDate,
                $this->endDate,
                'ga:goal13Completions , ga:goal14Completions , ga:goal15Completions , ga:goal16Completions , ga:goal17Completions , ga:goal18Completions , ga:goal19Completions , ga:goal20Completions',
                $params
            );
            $data = $response->getRows();
            if ($data != null) {
                $this->rawData[$view->datasource_id. '.3'] = $data;
            }
            $this->logInfo($view->name . ' metrics retrieved'. "(" .$i . " - " . count($views). ")", $view->datasource_id);
            $i++;
        } catch (\Google_Service_Exception $gse) {
            dd($gse);
            $this->logError($gse->getMessage(), isset($view->datasource_id) ? $view->datasource_id : null, $this->formatErrorCode($gse->getCode()));
        } catch (\Throwable $t){
            dd($t);
            $this->logError($t, isset($view->datasource_id) ? $view->datasource_id: null, $this->formatErrorCode('000001'));
        }

最佳答案

我联系了谷歌,得到的回复如下:

团队已经意识到这个问题,目前仍在努力解决这个问题。目前,我会推荐以下建议以缓解此问题:

• 通过缩小范围(例如维度、列、日期范围、过滤器等)来简化查询的复杂性;见this page了解是什么驱动了复杂性
• 实现指数back-off

编辑:
Google 已经修复了这个问题,我们不得不实现上述建议,因为我们似乎比错误发生之前更容易受到限制。

关于google-analytics-api - Google Analytics 核心报告 API v3 需要 4 分钟响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65439328/

相关文章:

php - 是否可以在不设置 Google Analytics 自定义维度的情况下报告 uid?

google-analytics - Google Analytics - 无法插入或更新网络资源

google-analytics - 在谷歌分析中获得超过 7 个维度

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

google-analytics - 如何从谷歌分析 API 获取少数 (10) 个 URL 的页面浏览量?

api - 获取 Google Analytics API "User Rate Limit Exceeded. Please sign up",即使是当天的第一个请求

google-analytics - Google Analytics 将用户分配到组

google-analytics - 谷歌分析 API : "User does not have sufficient permissions for this account."

google-analytics - 删除特定用户代理的所有流量

javascript - 如何在分析 API 上设置访问 token ?