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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
<?php
/**
* Analytics API fra PHP - fra www.martin-nielsen.com
*/
$brugernavn = ''; //dit analytics brugernavn
$password = ''; //dit analytics password
/**
* Login til analytics api
* @return boolean - logget ind eller ej
*/
function login() {
global $brugernavn, $password,$auth; //gør vores brugernavn og password globalt tilgængelige
$ch = curl_init('https://www.google.com/accounts/ClientLogin'); //start curl
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //vi vil ikke ha udskrevet data men gemt i variabel fx
//data array - hvilken service password og brugernavn - source kan sættes fx til navnet på din applikation
$post_data = array(
'accountType' => 'GOOGLE',
'Email' => $brugernavn,
'Passwd' => $password,
'service' => 'analytics',
'source' => ''
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //tilføj vores data til curl
$google_svar = curl_exec($ch); //udfør kald til google
$google_info = curl_getinfo($ch); //hent header info
curl_close($ch);//stop curl
$auth = '';
if($google_info['http_code'] == 200) { //hvis http header var 200 ok så fortsætter vi
//google sender en autentikations streng som vi skal bruge, denne starter med Auth= og det er det der kommer hefter vi ønsker
$auth_token = array();
//preg match kan finde det
preg_match('/Auth=(.*)/', $google_svar, $auth_token);
if(isset($auth_token[1])) {
$auth = $auth_token[1];
}
}
return ($auth != '');
}
/**
* Hent data fra url i analytics api
* @param string - url vi vil hente
* @return string|boolean xml output fra analytics eller false hvis fejl
*/
function hent_data($url) {
global $auth; //gør vores auth global
$headers = array("Authorization: GoogleLogin auth=$auth"); //sæt headers med auth
$ch = curl_init($url); //start curl
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); //tilføj vores headers
$google_svar = curl_exec($ch); //googles svar -enten en fejl eller vores feed
$google_info = curl_getinfo($ch); //hent headers
curl_close($ch); //stop curl
if($google_info['http_code'] == 200) {//hvis ikke fejl
return $google_svar; //retuner vores xml
}
else {
//udskriv fejl for nemhedens skyld og retuner false
echo $google_svar;
return false;
}
}
//forsøg at logge ind, giv fejl hvis ikke
if (login()) {
//vi er nu logget ind
echo 'logget ind';
$xml = hent_data('https://www.google.com/analytics/feeds/accounts/default?prettyprint=true'); //hent data fra google
if ($xml) { //er xml loadet?
$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
$xml = new SimpleXMLElement($xml); //start simple xml og load vores xml ind
$data = array(); //array vi vil gemme vores data i
foreach ($xml->entry as $entry) { //gennemløb entry da det er her vores dage er gemt
$titel=(string)$entry->title; //hent navnet på profilen - husk at angive datatype!
$id=(integer)$entry->property[2]->attributes()->value; //hent profil id - husk at angive datatype
$data[$id]=$titel; //tilføj til vores data array
}
}
print_r($data);
} else {
//ikke logget ind
echo 'Der opstod en fejl i login';
}
?> |
Du kan hente kildekoden her
Super arbejde Martin. Faktisk så godt at du har fået dit eget indlæg på min blog 😉
Link til seneste blogindlæg: Bogen “Yahoo! Web Analytics” udkommet – vind et eksemplar
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
Link til seneste blogindlæg: PHP Blog Ping Version 1.0 – Nu med fsocket løsning
Syntes det ser usikkert ud men jeg er jo heller ikke programmør
Jeg ville såmænd bare vise analytics data som man gør når man installere geocounter eller noget andet til at tælle brugere og tracke hvor de kommer fra også havdede jeg her.