Til Top

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:

https://www.google.com/analytics/feeds/accounts/default

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

kommentarer

Skrevet d. 13. Maj 2009 17:33 af Jacob Kildebogaard
Bruger billede Super arbejde Martin. Faktisk så godt at du har fået dit eget indlæg på min blog ;-)
Skrevet d. 13. Maj 2009 20:55 af Martin Nielsen
Bruger billede Glad for det kan bruges, og jeg siger tak for indkomne links og besøg - den slags kan man altid bruge - og bare vent jeg har flere API indlæg i tankerne - når tiden lige er til det :)

skriv kommentar

Felter markeret med gult og * er påkrævet







Sikkerheds kode


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. [...]