I Google Analytics API med PHP - Del 1: Introduktion gennemgik jeg hvordan du loggede ind i Google Analytics API. Del 2 fokuserer på hvordan vi kan hente data fra APIen og hvordan dette kan læses og fx omdannes til et array som er nemt at tilgå fra PHP. Vi tager udgangspunkt i koden fra Del 1, og jeg vil derfor anbefale at du henter hente min fil her.
Hvilke data kan jeg hente?
De data som er tilgængelige via Google Analytics, er også tilgængelige i APIen, så det handler simpelthen bare om at sende de korrekte forespørgsler, og behandle det svar der kommer fra APIen.
Når vi snakker google analytics api er der generelt fem typer reporter vi kan forespørger på:
- Besøgende
- Trafik kilder
- Indhold
- Mål
- E-handel
Inden for disse fem områder er der så en lang række rapporttyper vi kan hive ud. Dette kommer vi tilbage til.
For at kunne hente data, skal vores applikation kende det numeriske ID for den profil vi ønsker at hente data fra. For at finde dette ID går du ind i Analytics og trykker "Se Rapport" Du vil nu kunne finde dit ID i browserens adresselinje fx som ved min:
https://www.google.com/analytics/reporting/?reset=1&id=5311824&pdr=20090402-20090502
Koden fremhævet med rød er vores profil id.
Vores første dataudtræk
Når vi skal hente data fra APIen, skal vi lave de korrekte forespørgsler til https://www.google.com/analytics/feeds/data. For at kunne gøre dette bruger vi cURL, og tilføjer først og fremmest følgende funktion til vores php fil:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | /** |
| 03 | * Hent data fra url i analytics api |
| 04 | * @param string - url vi vil hente |
| 05 | * @return string|boolean xml output fra analytics eller false hvis fejl |
| 06 | */ |
| 07 | function hent_data($url) { |
| 08 | global $auth; //gør vores auth global |
| 09 | $headers = array("Authorization: GoogleLogin auth=$auth"); //sæt headers med auth |
| 10 | $ch = curl_init($url); //start curl |
| 11 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
| 12 | curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //tilføj vores headers |
| 13 | $google_svar = curl_exec($ch); //googles svar -enten en fejl eller vores feed |
| 14 | $google_info = curl_getinfo($ch); //hent headers |
| 15 | curl_close($ch); //stop curl |
| 16 | if($google_info['http_code'] == 200) {//hvis ikke fejl |
| 17 | return $google_svar; //retuner vores xml |
| 18 | } |
| 19 | else{ |
| 20 | //udskriv fejl for nemhedens skyld og retuner false |
| 21 | echo '<pre>'.$google_svar.'</pre>'; |
| 22 | return false; |
| 23 | } |
| 24 | } |
| 25 | ?> |
Funktionen bruger cURL til at forespørger en given url. Som headers medsender vi vores variabel $auth, som indeholder vores auth token fra login() funktionen. Når vi spørger google om data, får vi enten data tilbage i XML format, eller også får vi en fejl besked.
Opbygning af kald til APIen
Data kald er altid til https://www.google.com/analytics/feeds/data, og disse kald skal formateres med følgende parametre:
| URL | Altid: https://www.google.com/analytics/feeds/data og er selvfølgelig påkrævet |
|---|---|
| Profil ID | Påkrævet. Det unikke numeriske ID for en profil fx 5311824 - dette skal formateres med ga foran, således vi får ga:5311824 |
| dimensions |
Dimensions er måden hvorpå vores svar fra Google er grupperet, dette kan fx være efter dato, land, by osv osv. Du kan max forespørge på 7 dimensions. |
| metrics |
Metrics angiver hvilke tal det er vi ønsker at få ud og grupperet efter dimensions. Her kan fx være tale om antal besøgende, antal sidevisninger, konverteringer osv. Du kan max forespørge på 10 metrics ad gangen. |
| sort |
Hvis vi ønsker det kan vi sortere vores resultat efter vores dimensions og metrics |
| filters |
Hvis vi ønsker det kan vi filtrere vores resultater |
| date range start-date & end-date |
Her skal vi angive hvilken periode vi ønsker vores rapport skal strække sig over. Det er vigtigt at huske at angive datoer i amerikansk dato format dvs. 1/5/2009 bliver til 2009-05-01 |
De forskellige metrics og dimensions kommer vi ikke ind på her, men i stedet i de enkelte eksempler. I dag kommer vi til at se hvordan vi kan hive antal besøgende ud for en given dato eller periode på fx en uge, og de eneste parametrer vi vil bruge er profil id, dimensions metrics og date range.
Hent antal besøgende for en given periode
Det første vi skal vidde er hvilken metrics og dimensions vi skal anvende, her er det bare et spørgsmål om at slå op på siden og finde de rette. I dag bruger vi ga:date som dimension (hvilket grupperer resultaterne efter dato), og ga:visits som metric, og vi henter data ud fra den 1 april 2009 til den 7 april 2009 - hvilket bliver til 2009-04-01 og 2009-04-07. Derved får vi følgende URL:
Det er denne URL vi skal sende igennem vores hent_data() funktion:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | //forsøg at logge ind, giv fejl hvis ikke |
| 03 | if(login()) { |
| 04 | //vi er nu logget ind |
| 05 | echo 'logget ind'; |
| 06 | $xml = hent_data('https://www.google.com/analytics/feeds/data?ids=ga:5311824&dimensions=ga:date&metrics=ga:visits&st art-date=2009-04-01&end-date=2009-04-07&prettyprint=true'); //hent data fra google |
| 07 | } else{ |
| 08 | //ikke logget ind |
| 09 | echo 'Der opstod en fejl i login'; |
| 10 | } |
| 11 | ?> |
Nu er vores data gemt i variablen $xml - dette data vil vi nu omdanne til en array med dato som key, og antal besøg som værdi. Vores XML svar (uddrag) ser nu sådan her ud:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <entry> |
| 02 | <id>http: |
| 03 | <updated>2009-04-06T17:00:00.001-07:00</updated> |
| 04 | <title type='text'>ga:date=20090401</title> |
| 05 | <link rel='alternate' type='text/html' href='http://www.google.com/analytics'/> |
| 06 | <dxp:dimension name='ga:date' value='20090401'/> |
| 07 | <dxp:metric confidenceInterval='0.0' name='ga:visits' type='integer' value='71'/> |
| 08 | </entry> |
For hver dag i vores periode vil der være et entry - og det er disse entrys vi skal ha omdannet:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | //forsøg at logge ind, giv fejl hvis ikke |
| 03 | if(login()) { |
| 04 | //vi er nu logget ind |
| 05 | echo 'logget ind'; |
| 06 | $xml = hent_data('https://www.google.com/analytics/feeds/data?ids=ga:5311824&dimensions=ga:date&metrics=ga:visits&st art-date=2009-04-01&end-date=2009-04-07&prettyprint=true'); //hent data fra google |
| 07 | if($xml) { |
| 08 | $xml = str_replace('dxp:','',$xml); //simple xml håndtere namespaces på en lidt besværlig måde, så for nemhedens skyld fjerner vi bare dxp: fra noder i xml dokumentet |
| 09 | $xml = new SimpleXMLElement($xml); //start simple xml og load vores xml ind |
| 10 | $data = array(); //array vi vil gemme vores data i |
| 11 | foreach ($xml->entry as $entry) { //gennemløb entry da det er her vores dage er gemt |
| 12 | $dag=date('Y-m-d',strtotime($entry->dimension->attributes()->value)); //hent dato som er vores dimension - denne er ikke formateret så det må vi selv klare med date og strtotime |
| 13 | $antal=(integer)$entry->metric->attributes()->value; //hent antal besøg for dagen - vi er nødt til at angive datatypen her da vi ellers vil gemme et simple xml objekt |
| 14 | $data[$dag]=$antal; //tilføj til vores data array |
| 15 | } |
| 16 | } else{ |
| 17 | echo 'Fejl i xml'; |
| 18 | } |
| 19 | } else{ |
| 20 | //ikke logget ind |
| 21 | echo 'Der opstod en fejl i login'; |
| 22 | } |
| 23 | ?> |
Før vi kan indlæse XMLen i SimpleXML fjerner vi lige dxp: (namespace) fra XMLen, dette gør jeg da SimpleXML håndterer namespaces lidt underligt, og det vil kræve en lidt længere forklaring. Når vi har loadet XMLen i SimpleXML kan vi gennemløbe alle "entry" noder med en almindelig foreach løkke. I denne løkke hiver vi så vores data ud. Hvis vi skal ha\' fat i en node bruger vi ->nodenavn, og hvis vi skal bruge en nodes attributter bruger vi ->nodenavn->attributes()->attributnavn
Når vi gemmer data fra SimpleXML, er det vigtigt at vi angiver en datatype eller behandler dataet, da vi ellers vil få gemt et simplexml objekt.
Vores uges data er nu gemt i arrayet $data som vi nemt kan tilgå fra PHP, arrayet ser sådan her ud:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | Array |
| 02 | ( |
| 03 | [2009-04-01] => 71 |
| 04 | [2009-04-02] => 76 |
| 05 | [2009-04-03] => 63 |
| 06 | [2009-04-04] => 79 |
| 07 | [2009-04-05] => 70 |
| 08 | [2009-04-06] => 65 |
| 09 | [2009-04-07] => 52 |
| 10 | ) |
Vi kan selvfølgelig også bare udskrive vores data direkte til skærmen, fx i en tabel:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | if(login()) { |
| 03 | //vi er nu logget ind |
| 04 | echo 'logget ind'; |
| 05 | if($xml) { |
| 06 | $xml = str_replace('dxp:','',$xml); //simple xml håndtere namespaces på en lidt besværlig måde, så for nemhedens skyld fjerner vi bare dxp: fra noder i xml dokumentet |
| 07 | $xml = new SimpleXMLElement($xml); //start simple xml og load vores xml ind |
| 08 | $data = array(); //array vi vil gemme vores data i |
| 09 | echo '<table>'; |
| 10 | foreach ($xml->entry as $entry) { //gennemløb entry da det er her vores dage er gemt |
| 11 | $dag=date('d/m - Y',strtotime($entry->dimension->attributes()->value)); //hent dato som er vores dimension - denne er ikke formateret så det må vi selv klare med date og strtotime |
| 12 | $antal=(integer)$entry->metric->attributes()->value; //hent antal besøg for dagen - vi er nødt til at angive datatypen her da vi ellers vil gemme et simple xml objekt |
| 13 | echo |
| 14 | <tr> |
| 15 | <td>'.$dag.'</td> |
| 16 | <td>'.$antal.'</td> |
| 17 | </tr>; |
| 18 | } |
| 19 | echo '</table>'; |
| 20 | } |
| 21 | } else{ |
| 22 | //ikke logget ind |
| 23 | echo 'Der opstod en fejl i login'; |
| 24 | } |
| 25 | ?> |
Afslutning
Du har nu lært at hive data ud fra en dimension og en metric - så nu er det bare at kigge på metrics og dimensions, og prøve at hive forskellige rapporter ud.
Som altid kan du se min fulde kildekode for dag 2 her
Nu har du fået lidt at lege med, så det får du en ekstra dag til. På torsdag kigger vi på flere eksempler, herunder sortering, filtrering og brug af flere dimensions og metrics
Links i dette indlæg
Relaterede blogindlæg
kommentarer
skriv kommentar
Felter markeret med gult og * er påkrævet
Pingbacks
Hvis du linker til en af mine blog artikler fra et blogsystem der udsender pings vil du få et gratis do-follow link fra mig, du kna også twitte om en post og få et link til din twitter profil (Jeg forbeholder mig dog retten til at slette eller nofollow spam :P)
Hent profiloversigt fra google analytics api med PHP - Webudvikling | Blog om Webudvikling og andre nørderier fra Martin Nielsen
Sådan henter du en oversigt over dine profiler i google analytics med google analytics api og php - Webudvikling og andre nørderier [...]
Kode eksempel til Analytics API | Webanalyse blog | Webanalytiker.dk
Eksempler på Google Analytics API udtræk. Få oversigten over hvordan du skal trække data ud af Google Analytics med API. [...]
Tweetback fra: @skardhamar
rt @codenerd Google Analytics API med PHP - Del 2: Hent data http://tinyurl.com/cwqgcd [...]
Tweetback fra: @webanalytiker
RT @codenerd Google Analytics API med PHP - Del 2: Hent data http://tinyurl.com/cwqgcd [...]









