@codenerd på twitter Mit seneste tweet:

Hent profiloversigt fra google analytics api med PHP

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:

PHP
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

3 kommentarer

  1. Skrevet af Jan  d. 27/10/2010 kl 07:42

    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.

    Svar på kommentaren

Skriv en kommentar

Krævede felter er markeret med *.

*