Analytics API: statistiche di Google analytics sul tuo sito

Oggi affrontiamo un tema poco trattato in Italia (e in generale ovunque) ovvero come implementare sul proprio sito/pannello di gestione personalizzato le potenti statistiche di Google Analytics.  Addentriamoci quindi dentro questo potente tool di casa Google e nelle sue Api di sviluppo.

Le api di Google Analytics sono sicuramente abbastanza complesse e richiedono una conoscenza almeno minima di php, cercherò di essere il più chiaro possibile, ma sappiate fin da subito che con questo potente tool potete estrapolare praticamente TUTTO dalle pagine viste, ai browser usati dai visitatori. Pertanto se a fine articolo vi fosse venuta “fame” di analytics vi consiglio di visitare la reference guide ufficiale.

01. Panoramica generale e introduzione alle API Google

Le api sono dei potenti strumenti messi a disposizione dei developer per poter usare i vari tool e gestirli come meglio credono. Purtroppo molte volte risultano molto complessi e di difficile apprendimento. Le api di Analytics non differiscono da questo sgradevole “standard” e per studiarle appieno devo ammettere di aver  riscontrato molteplici “intoppi” tecnici. In questa breve guida vi mostrerò solo alcune tecniche (le più utili) per estrapolare i nostri dati da Google Analytics.

Per prima cosa le api possono essere usate con moltissimi linguaggi: da javascript a Piton per passare ad Aspx. Personalmente mi sono “tuffato” nell’implementazione su PHP. Per poter usare le api su php dovete disporre di un interprete che cambi il linguaggio da Google ad PHP per rendere normalizzati e usabili i dati estratti.

L’inteprete/interfaccia php si chiama in questo caso “Gapi” , per contunuare il tutorial vi invito a leggere la reference guide e di scaricare il pacchetto Gapi che ci servirà per estrarre i nostri dati.

Gapi su Google >>

Le api si basano essenzialmente su dimension e metrics:

DIMENSIONS: Sono fattori, come ad esempio browser, source, term, campaign.

METRICS: Sono l’unità di misura in cui visualizzare i dimensions.

Ora veniamo al tutorial vero e proprio.

02. Le basi: logging e estrazione  account

Scaricato il file Gapi estraete il file gapi.class.php nella root del vostro sito. A questo punto create un nuovo file php dove richiameremo i dati di analytics.

<?php

//estrai-dati.php

define('ga_email','tuamailgoogleanalitcs');
define('ga_password','password');
define('ga_profile_id','IDanalistics'); //solo numeri!

require 'gapi.class.php';

$ga = new gapi(ga_email,ga_password); //accesso

In questo primo esempio estraiamo i dati per sapere quanti e quali siti attivi sono presenti sul nostro account. Per farlo usiamo la funzione requestAccountData()

//una sorta di "query"
$ga->requestAccountData();

//per ogni risultato scrivi il profilo attivo sull'account
foreach($ga->getResults() as $result)
{
  echo $result . ' (' . $result->getProfileId() . ")<br />";
}

?>

Come vedete il funzionamento è molto simile a una query classica di php/mysql con la differenza ovvia della sintassi dovuta alle api. La logica in ogni caso rimane uguale. Il risultato a schermo dovrebbe essere una lista di tutti i siti attivi sul vostro account Analytics.

03. Qualcosa di più avanzato: introduzione ai filtri

Ora vi starete chiedendo: come faccio ad estrarre determinate informazioni? La risposta è quasi scontata: usando i filtri messi a disposizione dalle api possiamo estrarre davvero qualsiasi cosa. Ecco un case-study: voglio estrapolare le visite del mio sito per geo-location: Stati uniti.

Ecco il filtro da usare:

//[...] info login api

$filter = 'country == United States'; //specificate il paese per filtrare Italy è l'Italia

//[...] query api

Gli operatori sono quelli tipici di php a cui siamo abituati. Possiamo usare quindi && per filtrare altre cose, come ad esempio il browser usato dai nostri visitatori:

$filter = 'country == Italy && browser == Firefox';

Una volta impostato un filtro possiamo eseguire la query vera e propria di estrazione dati:

$ga->requestReportData(ga_profile_id,array('browser','browserVersion'),array('pageviews','visits'),'-visits',$filter);

La query inizia ad essere complessa? non vi preoccupate:

ga_profile_id ==> serve per connettersi al vostro sito da controllare

array(x,y) ==> gli array sono usati per specificare metrica e dimensions del report da visualizzare. In pratica (molto astrattamente) pensiamo a quello che vogliamo estrarre.

-visits ==> ordina il risultato per le visite

filter ==> il risutalto viene filtrato secondo quanto indicato in precedenza nel filtro, un sorta di WHERE di mysql (solo per farvi capire meglio).

Data la complessità vi posto un utilissimo schema della function requestReportData (tutti i valori che vedete sono quelli di default):

function requestReportData($report_id,
                           $dimensions,
                           $metrics,
                           $sort_metric=null,
                           $filter=null,
                           $start_date=null,
                           $end_date=null,
                           $start_index=1,
                           $max_results=30)

Interessante la funzione max_result che ci permette di limitare la query (indispensabile per chi ha molti filtri!).

Ovviamente per una corretta visualizzazione a schermo dei risultati vi consiglio almeno le prime volte di usare una tabella dove posizionare i risultati estratti. Ora posterò questo esempio completo per estrarre dal proprio account un report di visite per browser in Italia con visite e pageviews totali.

<?php
define('ga_email','[email protected]');
define('ga_password','your password');
define('ga_profile_id','your profile id');

require 'gapi.class.php';

$ga = new gapi(ga_email,ga_password);

$filter = 'country == United States && browser == Firefox';

$ga->requestReportData(ga_profile_id,array('browser','browserVersion'),array('pageviews','visits'),'-visits',$filter);
?>
<table>
<tr>
  <th>Browser &amp; Browser Version</th>
  <th>Pageviews</th>
  <th>Visits</th>
</tr>
<?php
foreach($ga->getResults() as $result):
?>
<tr>
  <td><?php echo $result ?></td>
  <td><?php echo $result->getPageviews() ?></td>
  <td><?php echo $result->getVisits() ?></td>
</tr>
<?php
endforeach
?>
</table>

<table>
<tr>
  <th>Total Results</th>
  <td><?php echo $ga->getTotalResults() ?></td>
</tr>
<tr>
  <th>Total Pageviews</th>
  <td><?php echo $ga->getPageviews() ?>
</tr>
<tr>
  <th>Total Visits</th>
  <td><?php echo $ga->getVisits() ?></td>
</tr>
<tr>
  <th>Results Updated</th>
  <td><?php echo $ga->getUpdated() ?></td>
</tr>
</table>

Ovviamente ecco alcune precisazioni sulla seconda parte:

Il primo loop serve a stampare in tabella la lista di tutti i browser estratti con relative visite/pageviews. La seconda parte (anzi la seconda tabella), serve per estrarre i risultati “generali” dell’account:

getTotalResult() ==>Se presente un loop, recupera quanti elementi sono stati visualizzati (nel nostro caso quanti browser sono stati considerati).

getPageViews() ==>Recupera le pagine viste totali in base al filtro/query

getVisits() ==>Recupera le visite totali in base al filtro/query

getUpdated() ==>Resistuisce il refresh dei risultati visualizzati con uno timestamp

Non vi basta ancora? Bhè continuate a leggere!

04. Query in tabella di visite/pagine viste in un intervallo di tempo

screen-analitycs
Il risultato su un pannello di gestione di un mio cliente.

Fino a qui mi sono limitato a prendere in esame e spiegarvi gli esempi ufficiali che troverete nel pacchetto gapi. Ora facciamo qualcosa di nostro per svelarvi le vere potenzialità delle api.

In questo esempio di si vuole estrarre i valori solo per determinati intervalli di tempo

<?php 

define('ga_email','[email protected]');
define('ga_password','pass');
define('ga_profile_id','ID');

require 'gapi.class.php';

$ga = new gapi(ga_email,ga_password);
//vi faccio capire il funzionamento del giorno di oggi e ieri
$oggi = date("Y-m-d"); //imposta la data odierna
$ieri = date("Y-m-d", time()-86400); //imposta la data di ieri
//stampo i valori di ieri e oggi per verificare che siano corretti (potete eliminare questo pezzo)
echo $ieri;
echo "<br>";
echo $oggi;

//Ho introdotto nella "query" anche lo start date e end date
$ga->requestReportData(ga_profile_id, array('browser','browserVersion'), array('pageviews','visits'),'-visits','',''. date("Y-m-d", time()-86400) .'',''. date("Y-m-d") .'');

$gaResults = $ga->getResults();

?>
//visualizzo i risultati sotto forma di tabella
<table>
<tr>
  <th>Total Pageviews</th>
  <td><?php echo $ga->getPageviews() ?>
</tr>
<tr>
  <th>Total Visits</th>
  <td><?php echo $ga->getVisits() ?></td>
</tr>
</table>

Nella tabella vengono visualizzati le pagine viste e le visite totali nell’intervallo di tempo prefissato (2 giorni). Se inserito in un pannello di gestione questo può risultare molto comodo dato che fornisce un ottimo “colpo d’occhio” sulle statistiche giornaliere. Ovviamente vi potete sbizzarrire come meglio desiderate, mettendo ad esempio la possibilità di poter filtrare da parte dell’utente/cliente il periodo start-date/end-date predisponendo un semplice form di controllo.

05. Conclusioni

Ovviamente i dati estratti possono essere usati anche per creare grafici (x,y) in php/jQuery davvero ben fatti ed evocativi. Anche se per questo serve un pò di dimestichezza con le api.

In definitiva le api di Google analytics sono sicuramente il TOP per chi vuole statistiche precise ed accurate direttamente sul proprio sito/gestione in modo professionale (ma un pò complesso). Un must per tutti i developer web!

Se ti è piaciuta la guida lascia un commento per farmi sapere cosa ne pensi! E non dimenticare di condividere l’articolo! Grazie!

    1. Controlla bene alcune cose:

      – nel campo id metti solo il tuo iD sotto forma di numero: es 12345678 (8 cifre)
      – ricordati di iserire la pagina in un webserver
      – includi il file gapi.class all’interno della cartella dove metti il file php

    1. comunque è impossibile che ti dia la pagina vuota.. capisco se viene un errore ma vuota è impossibile XD prova a copiare il codice che vedi nel pacchetto ufficiale che scarichi dal sito google gapi… se anche li ti viene vuoto c’è qualche problema di php…

  1. Ok ho risolto! Il codice che inserivo di analitics non corrispondeva. Ma se per esempio volessi inserire il filtro anche per vedere le città o le regioni (in italia)?? Ti ringrazio e ti auguro un sereno natale a te e famiglia

  2. bene Dario immagino potesse essere qualcosa di simile =) in ogni caso le doc ufficiali sono molto ampie anche io le sto studiando passo passo per ora ho imparato quello che ho scritto in questo articolo ma lavorando di metrics e dimension puoi fare davvero di tutto.

    Buon Natale anche a te!

    1. mmm.. in che senso? il profile id devi metterlo tu per forza e indica a quale account attingere i dati, in teoria puoi creare un form php dove l’utente aggiunge il suo ga_profile a mano e inserendolo nel form viene impostato nello script delle api.

  3. Ciao Riccardo grazie molto per l’ottima guida, cè solo un problema che a me da questo errore:

    Fatal error: Uncaught exception ‘Exception’ with message ‘GAPI: Failed to authenticate user. Error: “Request failed, fopen provides no further information”‘ in D:\SITI WEB\lavori\audit\statics\gapi.class.php:418 Stack trace: #0 D:\SITI WEB\lavori\audit\statics\gapi.class.php(62): gapi->authenticateUser(‘$ga_email’, ‘$ga_password’) #1 D:\SITI WEB\lavori\audit\statics\HelloAnalyticsApi.php(17): gapi->__construct(‘$ga_email’, ‘$ga_password’) #2 {main} thrown in D:\SITI WEB\lavori\audit\statics\gapi.class.php on line 418

    1. Sembra che non riesca a recuperare email, password e id del tuo account analytics =) controlla che $mail e $password siano recuperabili agevolmente (NOTA: invece di usare le variabili, prova per iniziare a scrivere direttamente email e password “normali”).

      1. si ho messo direttamente la email e la password ma nulla lo stesso errore eppure riesco ad entrare in analytics normalmente

  4. si le api funzionano ma pultroppo mi compaiono solo i siti web + id che contiene account analytics non mi visualizza il numero di visite e numero visitatori

  5. Volevo fare un domanda. È normale che la pagina dei risultati impieghi molto tempo a caricare? Siamo tra 5 e 10 sec. Uso google graph! Grazie!

    1. Bhè in teoria no visto che i dati sono asincroni (inizia il load una volta caricata la pagina di solito). Proverei a rivedere il load delle librerie o postare una issue sulla board del progetto di sicuro potranno aiutarti 😉

      Ad ogni modo io lo uso da un pò e non ho riscontrato caricamenti così lenti, nonostante elaboro i dati recuperati, quindi no direi che non è normale.

      Spero ti sia stato utile, buona navigazione Fabio!

  6. Una domanda.
    Perchè questa riga “$gaResults = $ga->getResults();” quando nella sezione html non viene ricavata la variabbile?

  7. Ho trovato questo ID account ma se lo metto mi da questo errore:
    Fatal error: Uncaught exception ‘Exception’ with message ‘GAPI: Failed to request report data. Error: “GDatainvalidParameteridsInvalid value ‘ga:UA-29858203-1’. Values must match the following regular expression: ‘ga:[0-9]+'”‘ in D:\SITI WEB\lavori\audit2\gapi.class.php:218 Stack trace: #0 D:\SITI WEB\lavori\audit2\home.php(77): gapi->requestReportData(‘29858203’, Array, Array) #1 {main} thrown in D:\SITI WEB\lavori\audit2\gapi.class.php on line 218

  8. Ciao!
    Come posso fare x avere i dati sul mio sito multi country …eliminando un country in particolare u.s? Si può costruire un codice ? Per esempio vorrei capire cosa gli utenti europei guardano sul mio sito … Pagine e contenuti più cluccate…Ma la predominanza degli utenti americani è schiacciante e i dati sono U.s.a. Centrici…

  9. Mi chiedevo: non esiste qualcosa di pronto che visualizza almeno i dati principali? Come ad esempio succede con alcuni plugin per wordpress (ad esempio Google Analytics Dashboard for WP), ma implementabile tramite php?

  10. Buonasera Riccardo,
    approfitto della sua cortesia e competenza per chiederle un parere; utilizzo questo script da anni http://danzambonini.com/a-google-analytics-dashboard-to-check-todays-referrers-for-multiple-websites/ , lo trovo molto comodo perchè mi consente di avere in una unica pagina le statistiche del today di tutti i siti di un account GA, da 3 giorni però non funziona più, penso sia un problema lato google perchè pur hostando i file su 5 altri server, dove ho in hosting altri siti), nemmeno con questi funziona.

    Esiste un modo per risolvere o comunque per ottenere lo stesso output?

    Saluti
    CRistian

  11. Ciao Riccardo,
    sono un neofita e avrei una domanda: posso ricavare le 5 pagine più viste di un sito web e proporne i link sulla home in automatico? In maniera tale che ovviamente queste si aggiornarno ogni volta che viene aperta la home stessa.
    grazie
    Marco

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

Up Next:

Let it Snow: fai nevicare con Google!

Let it Snow: fai nevicare con Google!