Google Analytics API mit PHP und Zend auslesen

Für das beliebte Analytics stellt Google eine API bereit über die gesammelte Daten abgerufen werden können. Dieser Artikel zeigt wie eine Authentifizierung gegen die Google API funktioniert, Abfragen erstellt werden und diese ausgeführt werden.

Voraussetzung ist ein Google Analytics Account mit auswertbaren Daten und auf PHP-Seite das Zend Framework. Aus diesem wird das Paket “Zend-HTTP” für die Anfragen an die Google Server benötigt.

1. Schritt: Authentifizierung:

Im folgenden Code-Block werden zuerst die variablen Parameter Variablen zu gewiesen. Der zweite Absatz erstellt einen neuen HTTP-Client. Diese wird konfiguriert, sodass dieser auf die Google Login-URL zugreift. Außerdem werden redirects deaktiviert und ein Timeout von 15 Sekunden festgelegt, um die Skriptlaufzeit nicht zu überschreiten. Die Parameter werden per Post gesendet.
Als Parameter werden die oben definierten Angaben für E-Mail und Passwort übertragen. Zusätzlich werden accountType und service spezifiziert und es muss ein frei wählbarer Servicename als source eingetragen werden.

//Define authentification parameters
$authURL     = 'https://www.google.com/accounts/ClientLogin';
$email       = 'mail@example.com';
$password    = 'myPassword';

//Set up new client and configure client
$client = new Zend_Http_Client(); //See http://framework.zend.com/manual/en/zend.http.html
$client->setUri($AUTH_URL);
$client->setConfig(array(
  'maxredirects' => 0,
  'timeout'      => 15));
$client->setMethod(Zend_Http_Client::POST);

//Set parameters
$client->setParameterPost(array(
  'Email'  => $email,
  'Passwd'   => $password,
  'accountType' => 'GOOGLE',
  'service' => 'analytics',
  'source' => 'Analytics Test'
));

//Send request
$response = $client->request();

(basierend auf einem Skript von Tobias Redman)

2. Authkey auslesen
Das von der Abfrage zurückgegebene Response-Objekt sieht etwa folgendermaßen aus, wenn der Login erfolgreich war:

Zend_Http_Response Object
(
    [version:protected] => 1.1
    [code:protected] => 200
    [message:protected] => OK
    [headers:protected] => Array
        (
            [Content-type] => text/plain
            [Cache-control] => no-cache, no-store
            [Pragma] => no-cache
            [Expires] => Mon, 01-Jan-1990 00:00:00 GMT
            [Date] => Sun, 28 Feb 2010 13:40:15 GMT
            [X-content-type-options] => nosniff
            [Connection] => close
            [Server] => GSE
            [X-xss-protection] => 0
        )

    [body:protected] => SID=DQAAAMAAAABwd7wiSiM0Kf5oEBysGJ-c0ialETUA0_VQQE0Zn-sEbSmFUidjo
LSID=DQAAAMIAAACKOJK4k9TchY8Ui
Auth=DQAAAMXhalp0pnf
)

Von diesem Objekt wird für die weiteren Webservice aufrufe der Authcode benötigt, der im body als dritter Parameter angegeben ist.
Dies ist über einen simplen Code möglich. Der body des Result-Objekts wird ausgelesen, dann in einzelne Zeilen gesplittet und im letzten Schritt die entsprechenden Key-Value-Kombinationen in einem Array gespeichert. Da von diesem Array nur Auth benötigt wird, wird dieses einer Variablen zugewiesen und der Rest verworfen.

$authArray = array();
$lines = explode("\n",$response->getBody()); //See http://framework.zend.com/manual/en/zend.http.response.html
foreach ($lines as $line) {
	$keyValue = explode("=", $line);
	if(count($keyValue)==2){
 		$key = $keyValue[0];
		$value = $keyValue[1];
	}

	//store all key-value-pairs in array
	$authArray[$key] = $value;
}
//read auth from array
$auth = $authArray['Auth'];

(basierend auf einem Skript von Tobias Redman)

3. Daten der Analytics API abfragen
Die Vorbereitungen sind nun abgeschlossen und mit dem gewonnenen Auth-Key können Abfragen an die Analytics API gestartet werden.

Anfragen werden an die URL


https://www.google.com/analytics/feeds/data

gestellt und wird mit einer XML-Datei beantwortet.

Google stellt für Anfragen die folgenden Parameter bereit, die jeweils per GET an die URL gehängt werden. Google liefert hier eine detaillierte Dokumentation für die Parameter.


https://www.google.com/analytics/feeds/data

  ?ids=ga:12345
  &dimensions=ga:source,ga:medium
  &metrics=ga:visits,ga:bounces
  &sort=-ga:visits
  &filters=ga:medium%3D%3Dreferral
  &segment=gaid::10
  &start-date=2008-10-01
  &end-date=2008-10-31
  &start-index=10
  &max-results=100
  &v=2
  &prettyprint=true

Einfach ist es jedoch den Assistenten von Juice Analytics (http://vascodegapi.juiceanalytics.com/) zu nutzen. Dieser bietet eine bequeme Auswahl für sämtliche Parameter und ihre Ausprägungen an und stellt das Ergebnis der Abfrage per Knopfdruck bereit.

Nach Eingabe der gewünschten Parameter erscheint ein Output wie der folgende:

Parameter  	Value
ids 	        ga:411xxxx
dimensions 	ga:pagePath
metrics 	ga:pageviews
sort 	        -ga:pageviews
filters
start_date 	2010-01-28
end_date 	2010-02-27

(Vorsicht die Parameter start_date und end_date sind falsch. Sie müssten eigentlich start-date und end-date lauten)

Diese müssen nun nur noch zu einer weiteren Abfrage umgestaltet werden:
Ganz ähnlich wie im oberen Beispiel werden hier die Parameter für die Abfrage gesetzt. In diesem Fall werden die Daten allerdings nicht per Post sondern per Get übertragen, sodass sowohl die Parameterzuweisung als auch die Methode umgestellt werden muss.
Als Parameter werden die im Generator ermittelten Werte eingetragen und zusätzlich eine Begrenzung der maximalen Anzahl von Datensätzen eingebaut.
Zusätzlich wird der im zweiten Schritt ermittelte Auth-Key übergeben. Allerdings geschieht dies nicht als Parameter, sondern muss in den Header der Abfrage eingebunden werden.

$feedURL = 'https://www.google.com/analytics/feeds/data';
$client = new Zend_Http_Client();
$client->setUri($feedURL);
$client->setParameterGet(array(
    'ids'  => 'ga:411xxxx',
    'dimensions'   => 'ga:pagePath',
    'metrics' => 'ga:pageviews',
    'sort' => '-ga:pageviews',
    'start-date' => '2010-02-20',
    'end-date' => '2010-02-27',
    'max-results' => '10'
));
$client->setMethod(Zend_Http_Client::GET);
$client->setHeaders('Authorization', 'GoogleLogin auth='.$auth);

$response = $client->request();

Resultat dieser Abfrage ist eine XML-Datei, die nun ausgewertet werden muss.
Diese Auswertung der Daten wird in einem zukünftigen Artikel behandelt werden.

Quellen / Nützliche Ressourcen:
Google Analytics Data API - Offizielle Dokumentation der Google Analytics API für die Zugriff auf die Statistik-Daten. Erläuterung der URL für den Zugriff auf den Datenfeed und die möglichen Parameter für den Zugriff.

Google Analytics API mit PHP - Teil 1: Authentifizierung - Blog-Eintrag von meshed.de mit einer sehr guten Erklärung der Authentifizierung an der Google API und Beschreibung wie der Google Auth-Key ausgelesen wird.

Explore the Google API - Juice Analytics - Assistent zum Erstellen von Queries auf die Google Analytics API. Per Auswahldialog können Abfragen zusammengestellt werden und die Resultate der Anfragen werden live ausgewertet und dargestellt.

Zend Framework - Http - Abfragen aus PHP-Skripten können einfach über die HTTP Komponenten des Zend Frameworks konstruiert werden ohne sich um die Details des Versands kümmern zu müssen.

Tags: , , , ,

Leave a Reply