Ultima revisión 17/02/2010
Usando la API de Google Analytics desde PHP
Tenía pendiente crear un bloque de entradas más vistas (o visitadas) y aprovechando la apertura del API de Google Analytics y lo entretenido de la documentación he creado un breve programita en PHP para acceder a esos datos.
Basta con definir GA_LOGIN y GA_PASS con nuestros datos de acceso a Analytics e indicar en GA_IDS el id del perfil a consultar. El último dato también se puede obtener con el API, como explican en el ejemplo de datos de cuenta, pero he preferido indicarlo directamente para simplificar. Para obtener este número basta con entrar en Analytics, editar el perfil que deseemos y copiar el Número de identificación del perfil que nos indica.
Este ejemplo obtiene las páginas con más visitas de la última semana ordenados de forma decreciente por visitas.
<?php
define('GA_LOGIN', 'LOGIN'); # cambiar
define('GA_PASS', 'PASSWORD'); # cambiar
define('GA_IDS', 'ID'); # cambiar
define('GA_APP', 'www.mabarroso.com-ga-1.0');
# Login
$loginURL = 'https://www.google.com/accounts/ClientLogin?accountType=GOOGLE&Email='.GA_LOGIN;
$loginURL .= '&Passwd='.GA_PASS.'&source='.GA_APP.'&service=analytics';
$loginData = file_get_contents($loginURL);
list(,$Auth) = split('Auth=', $loginData);
if (!$Auth) {
exit('no logged in');
}
# Fijamos user agent y Auth en la cabecera de las peticiones
ini_set('user_agent', GA_APP."rnAuthorization: GoogleLogin auth=$Auth");
# Rango de fechas
$dateEnd = date('Y-m-d', time()-86400); // ayer
$dateBegin = date('Y-m-d', time()-604800); // la semana pasada
# Consulta
$data = file_get_contents('https://www.google.com/analytics/feeds/data?ids=ga:'.GA_IDS;
$data.= '&dimensions=ga:pagePath&metrics=ga:pageviews&sort=-ga:pageviews&start-index=1&max-results=10&start-date='.$dateBegin;
$data.= '&end-date='.$dateEnd);
$data = str_replace(array('dxp:dimension','dxp:metric'), array('dxpdimension','dxpmetric'), $data);
$xml = simplexml_load_string($data);
# Datos
$i = 0;
foreach ($xml->entry as $entry) {
echo ++$i.' '.$entry->dxpdimension['value'].' : '. $entry->dxpmetric['value'] .'<br/>';
}
?>
He tenido problemas al recuperar los valores dxp:dimensión y dxp:metric con SimpleXML. No es una solución elegante pero, para salvar el obstáculo, reemplazo esas cadenas de texto por otras que no dan problemas (les quito los dos puntos).
Con una tarea programada para ejecutarse una vez al día: se recuperan los datos, se construye el código HTML y se guarda en archivo. La consulta a Google no se hace en cada petición. Es innecesario. Por el momento son las entradas más vistas durante la última semana, como en el código de ejemplo. Con el paso del tiempo comprobaré si conviene acortar o alargar el periodo.
Ahora se me ocurre que también sería interesante hacer otro bloque que fuera La entrada más vista ayer. Valdría el mismo código, cambiando la fecha inicial por $dateBegin = date('Y-m-d', time()-172800); (fecha actual menos el número de segundos de dos días). Por optimizar, también se puede cambiar en la url de la consulta max-results=1 y así obtener un único resultado en vez de 10.