2016-07-11 2 views
1

При использовании API Google Analytics (библиотека клиентов PHP - как сервер к серверной службе) многократно возвращается пустой набор результатов. Моего код выглядит следующим образом:API Google Analytics иногда возвращает пустые результаты.

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('[email protected](), 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 [email protected] 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 [email protected] 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

Почему вы стреляете в него каждые 5 минут?

Данные в базовом API отчетов не будут стабильными в течение 24 - 48 часов. По прошествии этого времени он никогда не изменится, поэтому не будет необходимости снова запрашивать его, предполагая, что вы его где-то сберегаете.

Data processing latency

Обработка задержка 24-48 часов. Стандартные учетные записи, которые отправляют больше , чем 200 000 сеансов в день в Analytics, приведут к обновлению отчетов только один раз в день. Это может задержать обновления отчетов и показателей на срок до двух дней. Чтобы восстановить внутридневную обработку, уменьшите количество сеансов, отправленных вашей учетной записью < 200 000 в день. Для Премиум-аккаунтов этот лимит распространяется на 2 миллиарда просмотров в месяц.

Так что обработка не завершена, вероятно, поэтому иногда вы не видите никаких данных.

Если вы хотите получать информацию в реальном времени, вы должны использовать real-time api.

+1

Спасибо, парень, возможно, пропустил эту часть. – benjah

Смежные вопросы