Da min blogserie, omkring google analytics api, er blevet modtaget så godt, får du lige en lille bonusfunktion her lørdag aften.
Hvis du skal integrere Google Analytics API fuldt ud i din CMS, så får du på et eller andet tidspunkt nok brug for at hente Profiler og Profil id\'er ud fra APIen automatisk, så brugeren fx fra en drop down kan vælge hvilken profil han/hun ønsker at se tal fra.
Hvis du ikke allerede har læst min blogserie om Google Analytics API med PHP, så anbefaler jeg stærkt at du gør det, da jeg ikke vil gå i dybden med forklaring af kode i dette blogindlæg.
Når vi skal hente vores profiloversigt, skal vi ikke forespørger den normale analytics api data sti, men i stedet:
Vi skal selvfølgelig være logget ind først (Det kan du læse om i Google Analytics API med PHP - Del 1: Introduktion), derudover skal vi bruge en funktion til at sende og modtage data (Google Analytics API med PHP - Del 2: Hent data) - herefter omdanner vi vores xml svar til et array og vupti så har vi vores oversigt, nemt tilgængelig i et array med Profil ID som index og titlen på profilen som værdi:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | /** |
| 03 | * Analytics API fra PHP - fra www.martin-nielsen.com |
| 04 | */ |
| 05 | $brugernavn = ''; //dit analytics brugernavn |
| 06 | $password = ''; //dit analytics password |
| 07 | /** |
| 08 | * Login til analytics api |
| 09 | * @return boolean - logget ind eller ej |
| 10 | */ |
| 11 | function login() { |
| 12 | global $brugernavn, $password,$auth; //gør vores brugernavn og password globalt tilgængelige |
| 13 | $ch = curl_init('https://www.google.com/accounts/ClientLogin'); //start curl |
| 14 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //vi vil ikke ha udskrevet data men gemt i variabel fx |
| 15 | //data array - hvilken service password og brugernavn - source kan sættes fx til navnet på din applikation |
| 16 | $post_data = array( |
| 17 | 'accountType' => 'GOOGLE', |
| 18 | 'Email' => $brugernavn, |
| 19 | 'Passwd' => $password, |
| 20 | 'service' => 'analytics', |
| 21 | 'source' => '' |
| 22 | ); |
| 23 | curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //tilføj vores data til curl |
| 24 | $google_svar = curl_exec($ch); //udfør kald til google |
| 25 | $google_info = curl_getinfo($ch); //hent header info |
| 26 | curl_close($ch);//stop curl |
| 27 | $auth = ''; |
| 28 | if($google_info['http_code'] == 200) { //hvis http header var 200 ok så fortsætter vi |
| 29 | //google sender en autentikations streng som vi skal bruge, denne starter med Auth= og det er det der kommer hefter vi ønsker |
| 30 | $auth_token = array(); |
| 31 | //preg match kan finde det |
| 32 | preg_match('/Auth=(.*)/', $google_svar, $auth_token); |
| 33 | if(isset($auth_token[1])) { |
| 34 | $auth = $auth_token[1]; |
| 35 | } |
| 36 | } |
| 37 | return ($auth != ''); |
| 38 | } |
| 39 | /** |
| 40 | * Hent data fra url i analytics api |
| 41 | * @param string - url vi vil hente |
| 42 | * @return string|boolean xml output fra analytics eller false hvis fejl |
| 43 | */ |
| 44 | function hent_data($url) { |
| 45 | global $auth; //gør vores auth global |
| 46 | $headers = array("Authorization: GoogleLogin auth=$auth"); //sæt headers med auth |
| 47 | $ch = curl_init($url); //start curl |
| 48 | curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); |
| 49 | curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //tilføj vores headers |
| 50 | $google_svar = curl_exec($ch); //googles svar -enten en fejl eller vores feed |
| 51 | $google_info = curl_getinfo($ch); //hent headers |
| 52 | curl_close($ch); //stop curl |
| 53 | if($google_info['http_code'] == 200) {//hvis ikke fejl |
| 54 | return $google_svar; //retuner vores xml |
| 55 | } |
| 56 | else{ |
| 57 | //udskriv fejl for nemhedens skyld og retuner false |
| 58 | echo '<pre>'.$google_svar.'</pre>'; |
| 59 | return false; |
| 60 | } |
| 61 | } |
| 62 | //forsøg at logge ind, giv fejl hvis ikke |
| 63 | if(login()) { |
| 64 | //vi er nu logget ind |
| 65 | echo 'logget ind'; |
| 66 | $xml = hent_data('https://www.google.com/analytics/feeds/accounts/default?prettyprint=true'); //hent data fra google |
| 67 | if($xml) { |
| 68 | $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 |
| 69 | $xml = new SimpleXMLElement($xml); //start simple xml og load vores xml ind |
| 70 | $data = array(); //array vi vil gemme vores data i |
| 71 | foreach ($xml->entry as $entry) { //gennemløb entry da det er her vores dage er gemt |
| 72 | $titel=(string)$entry->title; //hent navnet på profilen - husk at angive datatype! |
| 73 | $id=(integer)$entry->property[2]->attributes()->value; //hent profil id - husk at angive datatype |
| 74 | $data[$id]=$titel; //tilføj til vores data array |
| 75 | } |
| 76 | } |
| 77 | echo '<pre>'; |
| 78 | print_r($data); |
| 79 | echo '</pre>'; |
| 80 | } else{ |
| 81 | //ikke logget ind |
| 82 | echo 'Der opstod en fejl i login'; |
| 83 | } |
| 84 | ?> |
Du kan hente kildekoden her
Relaterede blogindlæg
kommentarer
Link til seneste blogindlæg: Bogen “Yahoo! Web Analytics” udkommet - vind et eksemplar
Link til seneste blogindlæg: PHP Blog Ping Version 1.0 - Nu med fsocket løsning
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)
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. [...]









