Tenía pendiente crear un bloque de entradas más vistas (o visitadas) y aprovechando la apertura del API de Google Analytics y lo divertido 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 10 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.'&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."\r\nAuthorization: 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.'&dimensions=ga:pagePath&metrics=ga:pageviews&sort=-ga:pageviews&start-index=1&max-results=10&start-date='.$dateBegin.'&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).
Actualizado 24/4/2009 8:45. He usado el código anterior como base para actualizar a diario el nuevo bloque Lo más visto en la barra de la derecha, según los datos de Google Analytics.
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.
Aquí te explican cómo lidiar con el tema de los namespaces y SimpleXML: http://www.sitepoint.com/blogs/2005/10/20/simplexml-and-namespaces/
Me lo apunto que viene muy bien. ¡Gracias!
Genial Adolfo!
Es genial que la gente se esté animando a empezar a montar aplicaciones para la API...esto es un avance genial para GA....
Eres un crack!
Te sigo leyendo y pondré un post enlazándote!
Gracias Ferriol. El API tiene muy buena pinta. En cuanto la gente empiece a publicar cositas vamos a poder sacarle jugo juntando las ideas de unos y otros. Lo que me parece fantástico es que ahora tenemos la posibilidad de retroalimentar los sitios web automatizando comportamientos.