2016-07-11 5 views
1

Bei der Verwendung der Google Analytics-API (PHP-Client-Bibliothek - als Server-zu-Server-Dienst) wird häufig eine leere Ergebnismenge zurückgegeben. Mein Code sieht wie folgt aus:Google Analytics-API gibt manchmal leere Ergebnisse zurück

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; 
} 

diese Funktion Feuer wieder alle 5 Minuten, wenn das Ergebnis leer war (5-mal) und immer noch vermisst einige Ergebnisse.

eine Idee warum und wie es zu lösen?

Antwort

1

Warum feuern Sie es alle 5 Minuten?

Die Daten in der Kernberichterstellungs-API werden für 24 - 48 Stunden nicht stabil sein. Nach dieser Zeit wird es sich nie ändern, daher gibt es keinen Grund, es erneut anzufordern, vorausgesetzt, Sie speichern es irgendwo.

Data processing latency

Verarbeitungslatenz ist 24-48 Stunden. Standardkonten, die mehr als 0,mehr als 200.000 Sitzungen pro Tag an Analytics senden, führen dazu, dass die Berichte nur einmal am Tag aktualisiert werden. Dies kann Aktualisierungen für Berichte und die Messwerte um bis zu zwei Tage verzögern. Um die Intra-Day-Verarbeitung wiederherzustellen, reduzieren Sie die Anzahl der Sitzungen, die Ihr Konto an < 200.000 pro Tag sendet, um . Für Premium-Accounts wird dieses Limit auf 2 Milliarden Zugriffe pro Monat erweitert.

Die Verarbeitung wurde noch nicht abgeschlossen, wahrscheinlich deshalb, weil Sie manchmal keine Daten sehen.

Wenn Sie Echtzeitinformationen wünschen, sollten Sie die real-time api verwenden.

+1

Danke Kumpel, vermisste diesen Teil wahrscheinlich. – benjah