|
Puede ser interesante para que tu site interactue con datos de Google Analytics, por ejemplo podemos
- Decidir "al vuelo" que artículos mostrar en el típico "Post más leídos".
- Saber si una determinada URL está teniendo excesivo rebote
Y dependiendo de este indexar o no indexar esta url en el buscador (poniendo un meta noindex si el % de rebote es muy alto).
Por ejemplo, aquellos sites que estén usando las búsquedas internas que hacen los usuarios en el site podemos saber cuáles de ellas son realmente útiles al tener un rebote bajo, y por lo tanto, son factibles de ser indexadas para posicionarlas. Y no indexar aquellas búsquedas internas que tienen un alto rebote y pueden ser califcadas como Thin Content.
- Dar mayor visibilidad a productos o contenidos con un mayor % de objetvos cumplidos y así ofrecer a tus usuarios aquello que realmente está teniendo éxto esta semana, día o mes.
- Mayor exactitud de los datos, evitaremos lo máximo posible la toma de muestra que Analytics nos crea al consultar los datos via web
Como estos, tenemos muchos ejemplos casos prácticos para lo que es muy bueno el tener los datos de Google Analytics en tu base de datos, porque por ejemplo a la hora de crear dashboards por semana de ingresos por canal, por tpo de producto, por precios, etc al hacerlo con consulta a la API de analytics puedes llegar al límite diario rápidamente, y sobretodo puede tardar mucho tiempo en obtener cada dato, porque recuerda que cada combinación de datos es una petición a Google Analytics y eso si son por cada día de un mes puede ser algo que tarde más de 10 minutos de reloj, mientras que teniendo los datos en tu base de datos tardará menos de 10 segundos.
Así que vamos al lio, lo primero que tenemos que hacer es darnos de alta en la consola de APIs de Google, donde le daremos al botón de CREATE PROJECT para crear un nuevo proyecto.
Una vez dado de alta el proyecto, veremos un menú a la izquierda, la segunda opción es "APIs & auth" hacemos click y veremos las distintas APIs que Google nos ofrece, ahora nos interesa la de Google Analytics asi que la activamos poniéndola en ON.
Ahora vamos a la segunda opción del menú izquierdo, donde pone "Credentials" y vemos que tenemos dos opciones, hoy nos interesa la de "OAuth" que nos permitirá dar credenciales a nuestro server para interactuar con Google Analytics sin tener que estar introduciendo usuario y contraseña cada vez que lo usemos, sino que tendremos un método que se podrá usar de forma automática sin tener que estar delante de nuestra pantalla.
Nosotros para este caso escogeremos la segunda opción "Service account" y veremos como nos descarga un fichero. Este archivo lo tendremos que usar en nuestro server y tiene las credenciales para tener acceso a los datos de Analytics así que tener cuidado con él de dónde lo ponéis, debería ser secreto y sólo vosotros tener acceso a él.
Una vez descargado y guardado (aquí lo llamaremos fichero-secreto-privatekey.p12), veremos que se nos presenta una serie de claves asociadas a nuestro Service Account, estas son
Ya tenemos los datos necesarios para poder conectarnos a nuestra cuenta de Analytics por medio de un script.
Ahora vamos a crear una tabla en nuestra base de datos donde almacenaremos los datos de Google Analytics, esta tabla yo la he creado con los siguientes campos, tú podrías poner otras métricas o dimensiones si quisieras.
CREATE TABLE gAnalytics_Miweb (
cod_gA int(11) unsigned NOT NULL AUTO_INCREMENT,
kw_gA varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
landing varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
rebote varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
visitas int(10) unsigned NOT NULL DEFAULT '0',
tiempo varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
valor varchar(25) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
fecha date DEFAULT NULL,
transacciones varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
ROI varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
medium varchar(45) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (cod_gA),
KEY index (kw_gA,landing,fecha)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Ya tenemos la tabla donde almacenaremos los datos, ahora sólo nos falta acceder e ir metiendo los datos en ella.
Para poder manejar facilmente las llamadas a la API en PHP podemos descargar esta librería y la ponemos en el directorio donde tendremos el script en mi caso /var/www
Y aquí os dejo mi script en php, que se encarga de volcar los datos de Google Analytics a la tabla antes creada en mi base de datos.
<?
header('content-type: text/html; charset: utf-8');
require_once '/var/www/googleapi/src/Google_Client.php';
require_once '/var/www/googleapi/src/contrib/Google_AnalyticsService.php';
session_start();
/*DATOS DE ACCESO A TU BASE DE DATOS */
$servidor = "localhost";
$usuario = "usuarioBBDD";
$pass_BBDD = "PassBBDD";
$BBDD = "nombreBBDD";
$tabla_BBDD = "gAnalytics_miWeb";
/*DATOS DE ACCESO A TU BASE DE DATOS */$id_Analytics ="xxxxxx"; //el ID de la cuenta de Google Analytics
$linkBBDD = mysql_connect($servidor,$usuario,$pass_BBDD);
mysql_select_db($BBDD);
mysql_set_charset('utf8',$linkBBDD);
$fecha_Analytics_inicio = "2014-01-01";
$contador_dias = 1;
$Fecha = "2014-01-01";
$datetime1 = new DateTime('2014-01-01');
$datetime2 = new DateTime('2014-04-23');
$mes = array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
$numeroMes = date_format($datetime1,"m");
$numeroMes = (int)$numeroMes -1;
$tabla = $tabla_BBDD;
while ($datetime1 < $datetime2){
$usuario_Analytics = "xxxxxxx@developer.gserviceaccount.com"; //el usuario que nos ha dado la consola de APIs de Analytics
$client = new Google_Client();
$client->setApplicationName('enombre proyectp');
$client->setAssertionCredentials(
new Google_AssertionCredentials(
$usuario_Analytics,
array('https://www.googleapis.com/auth/analytics.readonly'),
file_get_contents('/var/www/fichero-secreto-privatekey.p12')
)
);
$client->setClientId('xxxxxx.apps.googleusercontent.com'); //el client ID de la consola de APIs
$client->setAccessType('offline_access');
$analytics = new Google_AnalyticsService($client);
//*******************************************************FIN_TODO************************************
$results = $analytics->data_ga->get(
'ga:' . $id_Analytics,
$fecha_Analytics_inicio,
$fecha_Analytics_inicio,
'ga:sessions',
array(
'dimensions' => 'ga:adMatchedQuery,ga:keyword,ga:landingPagePath,ga:medium',
'metrics' => 'ga:sessions,ga:transactionRevenue,ga:bounceRate,ga:totalValue,ga:transactionRevenue,ga:transactions',
'filters' => 'ga:medium==organic,ga:medium==cpc',
'sort' => '-ga:sessions,ga:keyword',
'max-results' => '50000'));
foreach($results["rows"] as $filas){
$url_limpia = str_replace("/es/","/",explode("?",$filas[2]));
if ($filas[3] == "cpc")
$Kw_mejorada = $filas[0];
else
$Kw_mejorada = $filas[1];
$sql = "insert into ".$tabla." (kw_gA,landing,rebote,visitas,tiempo,valor,fecha,transacciones,medium) VALUES ('".$Kw_mejorada."','".$url_limpia[0]."','".round($filas[6],2)."',".$filas[4].",'0','".round($filas[8],2).
"','".$fecha_Analytics_inicio."','".round($filas[9],2)."','".$filas[3]."')";
mysql_query($sql);
}
$datetime1 = date_add($datetime1, date_interval_create_from_date_string('1 days'));
$fecha_Analytics_inicio = $datetime1->format("Y-m-d");
$contador_dias++;
}
echo "total dias:".$contador_dias;
?>
Con esto estamos recorriendo día a día los datos de usuarios llegados desde organic o cpc en el 2014 y metiéndolos en la base de datos.
Probarlo, comprobar que se están metiendo los datos correctamente y en breve seguiremos con oro post de cómo podemos usar estos datos en casos reales, de momento ya tenéis el acceso creado (que a veces es lo más complicado) y estamos volcando los datos de Google Analytics a nuestra base de datos, para luego usar estos datos como mejor nos convenga.
PD: puede que haya algún error, aunque está cogido de mi script que funciona perfectamente, pero puede que me esté dejando algo y no me de cuenta, así que si os falla algo ponerlo en los comentarios y lo vemos, pero eso, debería funcionar. Aunque este script no es para copiar / pegar (que también valdría) sino más bien para que podáis ver el proceso y cada uno lo vaya haciendo a su manera y en su lenguaje de programación, pero el proceso de credenciales y acceso desde el servidor es este.
Cristian (@)hace Hace más de 9 años y 360 días
Hola Lino... hice todo al pie de la letra pero aun no logro cargar los datos en la BD... ayuda por favor
Errioxa (@)hace Hace más de 9 años y 360 días
@Cristian ¿en que paso te falla?
jose (@)hace Hace más de 9 años y 267 días
Hola!
Muy bueno tu tutorial lo he entendido todo realmente bien. Pero me surge un problema, necesito hacer un procedimiento que realice aproximadamente 2000 consulta a Google analytics (con distintos valores de filtro) cada dia. He estado mirando para hacer una unica consulta con todos los datos, pero no he encontrado gran cosa... se puede llegar a hacer lo que necesito?
errioxa (@)hace Hace más de 9 años y 262 días
Hola José, depende de que datos quieras sacar a la vez.
Puedes probar en esta herramienta, y verás si es posible o no. Si lo haces en una consulta desde esta tool lo puedes hacer con la api, si no no creo.
De todas maneras dime un poco más sobre que quieres obtener e intento decirte si se puede.
jose (@)hace Hace más de 9 años y 257 días
Hola errioxa,
Ante todo muchas gracias por tu respuesta. Tengo muchos productos de los cuales necesito sacar las visitas de cada uno de ellos y para ello filtro el path. Ejemplo:
www.pagina.com/seccion/producto1
www.pagina.com/seccion/producto...
www.pagina.com/seccion/producto2000
Obtengo sin problema cada uno de estos por separado, con el siguiente filtro:
$filters = 'ga:pagePath=@'.'producto1';
Al ejecturarlo:
$data = $service->data_ga->get('ga:'.$projectId, $from, $to, $metrics, array('dimensions' => $dimensions, 'filters' => $filters));
Me devuelve un array bastante grande con los datos correspondientes a ese producto.
Mi duda es la siguiente, para ahorrarme ejecutar 2000 veces ese codigo para cada producto, quisiera saber si puedo agruparlos todos (de alguna manera) y realizar una unica consulta que me devolviese los datos correspondientes a cada porducto.
Un saludo y muchas gracias