Informes de contenido en Yandex Metrica

Nuevos informes de contenido en Yandex Metrica

Sin mucho ruido, han aparecido nuevos informes de contenido en Yandex Metrica. Todo pasa por tener un buen etiquetado de nuestros contenidos para que podamos disponer de información relacionada con autores y temas (topics).

Yandex Metrica tiene bastante bien documentado cómo implementar este etiquetado:

https://yandex.ru/support/metrica/publishers/schema-org/json-ld.html

También puedes echar un ojo a un artículo que escribí hace poco sobre los informes de contenido en Yandex Metrica, donde puedes encontrar algunos enlaces de utilidad.

Plantilla de Yandex Metrica para GTM (actualización)

He actualizado la plantilla personalizada de Yandex Metrica para Google Tag Manager que publiqué en junio. Si quieres leer el artículo original con la información y descripción completa de las características de la plantilla, lo tienes en este enlace:

https://www.antoniolite.com/2019/06/plantilla-de-yandex-metrica-para-gtm/

En lo que respecta a la actualización, estos son los cambios más destacados:

Inicialización de la etiqueta

Hay disponibles nuevos parámetros de configuración cuando se inicializa la etiqueta. Todos ellos son opcionales.

childIframe

Con este parámetro indicamos que queremos grabar el contenido que se esté mostrando en un iframe, siempre que la ventana principal y la página que carga el iframe esté bajo el mismo dominio.

trustedDomains

En relación al anterior, con este parámetro indicamos en la página que se carga en el iframe aquellos dominios de confianza que podrán grabar los contenidos con webvisor. Por ejemplo, si la ventana principal y la del iframe son son de distintos dominios o subdominios de un mismo dominio.

userParams

Podemos enviar parámetros de usuario con la inicialización de la etiqueta, y seguimos pudiendo enviar parámetros de usuario en cualquier momento con el método userParams.

triggerEvent

Con este parámetro, Metrica lanza un evento “yacounterXXXXXXinited” (donde XXXXXX es el ID de tu contador) para que sepamos cuándo está operativo nuestro contador de Metrica. Podemos vincular alguna función JavaScript / jQuery a este evento, como por ejemplo:

$(document).on('yacounterXXXXXXinited', function() {
  console.log('yaCounterXXXXXX ya está disponible');
});

Otros cambios

Hay otros cambios en la plantilla personalizada para Yandex Metrica:

  • Solucionado bug con el método setUserId
  • Solucionado bug al añadir extensiones de fichero para monitorizar
  • Mejoras en la interfaz de configuración de la etiqueta
  • Optimización de código

Descarga de la plantilla personalizada

Puedes descargar la plantilla para Yandex.Metrica con este enlace, y si necesitas ayuda para importarla en tu contenedor de GTM, puedes echar un vistazo a este tutorial de introducción a las plantillas personalizadas.

Primera versión: 16.06.2019
Actualización: 25.09.2019

Cómo trabajar con Yandex Metrica y Logs API

Aunque Yandex Metrica permite crear segmentos, informes y dashboards personalizados, es posible que en algunos proyectos necesitemos más libertad a la hora de trabajar con los datos que registra Metrica.

Hay que recordar que Yandex Metrica no aplica muestreo y tenemos acceso a los datos en bruto de nuestros contadores.

La API de Yandex Metrica es bastante potente. He hablado sobre ella en algún evento de analítica web, está muy bien documentada y es sencilla de usar. Pero últimamente he estado probando Logs API con contadores de Metrica, y creo que las posibilidades son increíbles, ya que básicamente te llevas los datos que quieres para hacer luego lo que necesites con ellos.

Y con este artículo quiero hacerte una introducción a Logs API para que puedas realizar peticiones para generar un log con los datos que quieras. Yandex te sugiere, obviamente, que una vez tengas los datos conectes con ClickHouse, pero lo cierto es que puedes llevártelos donde quieras.

Paso 1: registra una aplicación con Yandex OAuth

Esto es obligatorio, aunque muy sencillo. Sin registrar una aplicación, no podremos obtener un token de acceso y sin el token de acceso, las llamadas a la API de Yandex (sea la de Metrica o la de Logs) nos dirán que el acceso no está autorizado.

Empieza en la página de Yandex OAuth y registra una aplicación

https://oauth.yandex.com/

Rellena todos los datos, selecciona Web services como plataforma en la que usarás la aplicación que estás registrando. Indica que la URL de retorno (Callback URL) será la de desarrollo, y marca los permisos que necesites. Para el objetivo de lo que estoy contando, basta con los permisos de acceso a las estadísticas de los contadores de Yandex Metrica.

Cuando tengas registrada la aplicación, verás que te muestra tres datos:

  • ID
  • Password
  • Callback URL

Necesitarás el ID para obtener el token con el que harás luego las llamadas a la API.

Para obtener el token, ve a esta dirección, cambiando ID por el ID de la aplicación que acabas de registrar:

https://oauth.yandex.com/authorize?response_type=token&client_id=<ID>

Con esto, obtenemos lo que Yandex llama el Debugging token, aunque si lo que vas a hacer depende únicamente de tu lado, este token de desarrollo puede valer sin más.

Al visitar esa URL, te devolverá el token de acceso, una cadena alfanumérica que nos servirá para autenticar las llamadas que haremos a la API.

Y así, ya podemos continuar preparando la parte en la que recuperaremos los datos de nuestros contadores de Metrica.

Paso 2: consulta los logs que has solicitado

Además del token de acceso, vamos a necesitar el ID del contador de Yandex Metrica del que vamos a recuperar datos. Lo tienes en el listado de códigos que tienes creados en Yandex Metrica.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequests

Donde:

  • <contadorID>: identificador del código de Yandex Metrica del que quieres recuperar los datos

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequests";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [requests] => Array
        (
            [0] => stdClass Object
                (
                    [request_id] => <REQUESTID>
                    [counter_id] => <CONTADORID>
                    [source] => hits
                    [date1] => 2019-09-01
                    [date2] => 2019-09-21
                    [fields] => Array
                        (
                            [0] => ym:pv:dateTime
                            [1] => ym:pv:URL
                            [2] => ym:pv:lastTrafficSource
                        )

                    [status] => processed
                    [size] => 59621
                    [parts] => Array
                        (
                            [0] => stdClass Object
                                (
                                    [part_number] => 0
                                    [size] => 59621
                                )

                        )

                )

        )

)

Paso 3: consulta la viabilidad de una solicitud

Antes de solicitar formalmente que se procesen los datos que necesitemos, podemos consultar la viabilidad de nuestra petición. En el resultado de la llamada a la API encontraremos si es posible o no, y si no hay problemas, le mandaremos la solicitud en el paso siguiente.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequests/evaluate? date1=<FECHA>&date2=<FECHA>&fields=<DIMENSIONES>&source=<DATOS>

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • date1: desde qué día quieres los datos
  • date2: hasta qué día quieres los datos
  • fields: las dimensiones que quieres recuperar (documentación)
  • source: si quieres recuperar hits o sesiones (en función de lo que necesites, tienes a tu disposición diferentes dimensiones).

Puedes consultar la sintaxis de los campos a recuperar en la documentación de Logs API para Hits o la documentación de Logs API para Sesiones.

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequests/evaluate?date1=2019-09-01&date2=2019-09-15&fields=ym:pv:dateTime,ym:pv:title,ym:pv:URL,ym:pv:lastTrafficSource&source=hits";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [log_request_evaluation] => stdClass Object
        (
            [possible] => 1
            [max_possible_day_quantity] => 1848612
        )

)

Paso 4: realiza la solicitud para crear un log

Una vez que hayamos comprobado que nuestra solicitud de datos se puede procesar, ya podemos enviar la solicitud formal para que se prepare nuestro log.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequests?date1=<FECHA>&date2=<FECHA>&fields=<DIMENSIONES>&source=<DATOS>

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • date1: desde qué día quieres los datos
  • date2: hasta qué día quieres los datos
  • fields: las dimensiones que quieres recuperar
  • source: si quieres recuperar hits o sesiones (en función de lo que necesites, tienes a tu disposición diferentes dimensiones).

Puedes consultar la sintaxis de los campos a recuperar en la documentación de Logs API para Hits o la documentación de Logs API para Sesiones.

La llamada a la API (ojo, esta tiene que ir como POST):

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequests?date1=2019-09-01&date2=2019-09-21&fields=ym:pv:dateTime,ym:pv:title,ym:pv:URL,ym:pv:lastTrafficSource&source=hits";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_POST, true);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [log_request] => stdClass Object
        (
            [request_id] => <REQUESTID>
            [counter_id] => <CONTADORID>
            [source] => hits
            [date1] => 2019-09-01
            [date2] => 2019-09-21
            [fields] => Array
                (
                    [0] => ym:pv:dateTime
                    [1] => ym:pv:title
                    [2] => ym:pv:URL
                    [3] => ym:pv:lastTrafficSource
                )

            [status] => created
        )

)

Ahora tendríamos dos logs solicitados / creados si hacemos la petición del paso 1, cada uno con un requestID diferente (obviamente).

Paso 5: consulta el estado de tu solicitud

Si hemos solicitado muchos datos, es posible que tarde un tiempo en procesar la solicitud. Con esta llamada a la API podemos comprobar si la solicitud está procesada y los datos están disponibles.

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequest/<requestId>

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • requestID: identificador de la solicitud de log que quieres consultar

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequest/<REQUESTID>";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

$metrica_output = json_decode($metrica_result);
print_r($metrica_output);

El resultado:

stdClass Object
(
    [log_request] => stdClass Object
        (
            [request_id] => <REQUESTID>
            [counter_id] => <CONTADORID>
            [source] => hits
            [date1] => 2019-09-01
            [date2] => 2019-09-21
            [fields] => Array
                (
                    [0] => ym:pv:dateTime
                    [1] => ym:pv:title
                    [2] => ym:pv:URL
                    [3] => ym:pv:lastTrafficSource
                )

            [status] => processed
            [size] => 81420
            [parts] => Array
                (
                    [0] => stdClass Object
                        (
                            [part_number] => 0
                            [size] => 81420
                        )

                )

        )

)

Paso 6: descarga el log de tu solicitud

Una vez que tengamos procesada la solicitud de log, podemos disponer de los datos. Los puedes guardar en un fichero de texto, meterlos en base de datos…

https://api-metrica.yandex.net/management/v1/counter/<contadorID>/logrequest/<requestId>/part/<partNumber>/download

Donde:

  • contadorID: identificador del código de Yandex Metrica del que quieres recuperar los datos
  • requestID: identificador de la solicitud de log que quieres recuperar
  • partNumber: identificador numérico de la parte del log que quieres recuperar

La llamada a la API:

$metrica_url = "https://api-metrica.yandex.net/management/v1/counter/<CONTADORID>/logrequest/<REQUESTID>/part/0/download";

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL,$metrica_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, array("Authorization: OAuth <DEBUGGINGTOKEN>"));
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$metrica_result = curl_exec ($ch);
curl_close($ch);

echo($metrica_result);

El resultado:

He pixelado la imagen, pero básicamente ya te lo imaginas… texto separado por tabuladores que puedes importar fácilmente a Excel o una base de datos tipo MySQL. A partir de aquí, imaginación para exprimir los datos.

Limitaciones

Tienes que usar el token de acceso en todas las peticiones que hagas a la API.

El volumen máximo de datos que se puede transmitir en cada solicitud es de 10 GB por cada contador de Metrica.

Los datos del día actual pueden no estar completos. Además, en algunas solicitudes puedes recibir un mensaje de error que la fecha (date2) debe ser anterior al día actual. Yandex recomienda en la documentación que user el día anterior como límite para recuperar los datos.

Más información

Metrica API
https://tech.yandex.com/metrika/

Documentación de la API de Metrica
https://tech.yandex.com/metrika/doc/api2/concept/about-docpage/

Autorización y token de acceso OAuth
https://tech.yandex.com/metrika/doc/ref/concepts/authorization-docpage/

Introducción a Logs API
https://tech.yandex.com/metrika/doc/api2/logs/intro-docpage/