Google分析API有时会返回空结果

时间:2016-07-11 12:58:30

标签: php laravel-5.1 google-analytics-api

使用Google AnalyticsAPI(PHP客户端库 - 作为服务器到服务器服务)时,它会多次返回空结果集。 我的代码看起来像这样:

public function getLeadDetails($view, $gauid, $lead_id,$refresh_token,$dates = [])
{
    Log::info("*****************GA Service - GAUID: ".$gauid." **********************************");
    $options['dimensions'] = implode(',',config('analytics.dimensions'));
    $options['filters'] = "ga:eventAction==".$gauid;
    $metrics = "ga:users";
    $view = "ga:".$view;
    $yesterday = date('Y-m-d',strtotime('yesterday'));
    $tomorrow = date("Y-m-d",strtotime('tomorrow'));
    if(count($dates)){
        $yesterday = $dates['yesterday'];
        $tomorrow = $dates['tomorrow'];
    }
    Log::info('GA_Service@getLeadDetails(), Request Params: ?ids='.$view.'&start-date='.$yesterday.'&end-date='.$tomorrow.'&metrics='.$metrics.'&dimensions='.$options['dimensions'].'&filters='.$options['filters']);
    try{
        $this->client->setAccessType('offline');
        $this->client->setAccessToken($refresh_token);
        $this->client->setClientId(config('analytics.client_id'));
        $this->client->setScopes([
            \Google_Service_Analytics::ANALYTICS,
            \Google_Service_Analytics::ANALYTICS_EDIT,
        ]);
        $analytics = new \Google_Service_Analytics($this->client);
        $data = $analytics->data_ga->get($view,$yesterday,$tomorrow,$metrics,$options);
        if($data['totalResults'] && $data['totalResults'] > 0){
            Log::info('Inside GA_Service@getLeadDetails has totalResults');
            $rtn = [];
            $i = 0;
            foreach ($data['rows'] as $row) {
                $rtn['uacid'] = $gauid;
                $rtn['user_type'] = $row[0];
                $rtn['device_category'] = $row[1];
                $rtn['source'] = $row[2];
                $rtn['medium'] = $row[3];
                $rtn['campaign'] = $row[4];
                $rtn['ad_group'] = $row[5];
                $rtn['path'] = $row[6];
                $i++;
            }
            Log::info('Inside GA_Service@getLeadDetails lead '.$lead_id.' should be update');
            return $this->insertLeadDetails($rtn , $lead_id);
        }
        Log::info('GA_Service::getLeadDetails() returned empty results for lead: '.$lead_id);
        if(!count($dates)){
            $this->throwException('empty results for lead: '.$lead_id.' in GA_Service::getLeadDetails()',275);
            return false;
        }
        return 'empty results for lead: '.$lead_id.' in GA_Service::getLeadDetails()';
    }catch (\Google_Service_Exception $e){
        Log::info('Google service exception from GA_Service::getLeadDetails() - '. $e->getErrors()[0]['message']);
        $this->throwException($e->getErrors()[0]['message'], 335);
    }
    return false;
}

如果结果为空(5次),此功能每5分钟再次触发,但仍然会遗漏一些结果。

知道为什么以及如何解决它?

1 个答案:

答案 0 :(得分:2)

你为什么每5分钟开一次?

核心报告API中的数据不会在24-48小时内保持稳定。在那段时间之后它将永远不会改变,所以没有理由再次请求它,假设你在某个地方保存它。

Data processing latency

  

处理延迟为24-48小时。标准帐户发送更多   每天有超过200,000个会话分析将导致报告   每天只刷新一次。这可能会延迟报告的更新和   最多两天的指标。要恢复日内处理,请减少   您的帐户发送的会话数<每天200,000。对于   高级帐户,此限制扩展到每月20亿次点击。

所以处理还没有完成,这可能就是为什么有时候你没有看到任何数据。

如果您需要实时信息,则应使用real-time api