Conectar R y Google, buenas prácticas con tokens

Trabajando desde R existen varios paquetes que nos permiten acceder a las diferentes APIs de Google y obtener datos. Para acceder a estos datos es necesario crear un token, un pequeño script que facilita la
autenticación cada vez que queremos acceder a la API.

Las APIs de Google utilizan un protocolo OAuth 2.0 para la autenticación y autorización. El marco de autorización OAuth 2.0 permite a una aplicación de terceros obtener acceso limitado a un servicio HTTP.

Hay varias alternativas para crear estos tokens y gestionarlos.

En primer lugar nos encontramos ante la opción de generar el token en un proyecto default de la cuenta, especificarlo mediante un client Id o usar un acceso mediante service account. Aunque la tercera opción es la más recomendable, en este artículo nos centraremos en el uso de tokens creados con client Id, al ser la más generalizada.

A menudo, bajo la regla de mientras funcione no me complico la vida, tendemos a hacer un uso inapropiado de los tokens, ya sea porque se han creado bajo un proyecto default, se ha reciclado un token creado para otro script… Estos malos hábitos adquiridos terminan afectando a la correcta ejecución de nuestros scripts, sobretodo con las tareas automatizadas.

El objetivo de este artículo es establecer un criterio de trabajo para evitar fallos al generar y usar un token, para tener la información más organizada y con un mayor control de los permisos otorgados.

Creación de las credenciales

Antes de crear el token necesitamos crear unas credenciales que nos den acceso a la cuenta donde se encuentran alojados los datos a los que accederemos mediante la API de Google deseada.

Para ello, tendremos que acceder al apartado de Credenciales de la sección de APIs y servicios en la Google Cloud Platform Console. Previamente debemos asegurarnos de encontrarnos realmente en el proyecto donde queremos trabajar .  Una vez estamos en nuestro proyecto, seleccionamos en Crear credenciales la opción ID de Cliente de Oauth.

Como el objetivo de esta credencial es trabajar con R, ya sea en local o un servidor, marcaremos la opción Otros y le ponemos un nombre que nos ayude a identificarlo.

En este caso proponemos usar como nombre R-MO-Client 1, donde indicamos primero la herramienta con la que queremos conectar, las iniciales del usuario que ha creado la credencial y el nombre del cliente para el que se usará la credencial creada. Siendo esta nomenclatura solo una propuesta para facilitar la posterior identificación y gestión de la credencial . Una vez creada, obtenemos un ID de cliente y su clave secreta que nos servirá para identificar el proyecto al crear el token.

Otra recomendación que deriva de la nomenclatura escogida para nombrar las credenciales es que cada vez que cambie uno de los tres elementos herramienta – iniciales del usuario – nombre cliente, se cree una nueva credencial.

Generar token en el script

Una vez creadas las credenciales ya podemos trabajar en generar el token para ello nos valdremos de la librería googleAuthR. Antes de crear el token deberemos indicar con que API’s vamos a querer conectar e indicar el id de cliente con el que trabajamos.

library(googleAuthR)  options(googleAuthR.scopes.selected = c("https://www.googleapis.com/auth/cloud-platform", "https://www.googleapis.com/auth/analytics"),         googleAuthR.client_id = "0000000000-xxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com",         googleAuthR.client_secret = "xxxxxxxxxxxxx") 

Para conocer qué scope debemos indicar podemos consultar la documentación de google:
documentación

En este caso, pediríamos permisos para acceder a los servicios de Google Cloud Platform, como el Storage, y a Analytics. A pesar de que cada librería tiene su propio función para generar el token, gar_auth es compatible con todas ellas, por lo que escogemos esta opción como la óptima. Una vez ejecutada la función gar_auth, se nos va abrir una pestaña para otorgar al proyecto con el que hemos creado las credenciales acceso a los scopes indicados de la cuenta con la que interactuamos. En nuestro caso serían, permisos para acceder a Analytics y a la Cloud Platform.

Una vez pulsamos sobre Permitir, accedemos a una contraseña que deberemos copiar y pegar en la consola de R para terminar con la autenticación. Se habrá generado entonces un token que se guarda en el directorio desde el que estamos trabajando bajo el nombre .httr-oauth.

De nuevo, recomendamos renombrar el token, para saber que accesos contiene solo con verlo. En este caso proponemos como criterio indicar las API’s a las que tiene acceso y el client que usamos, por ejemplo, en nuestro caso sería: gcp_ga_client1.oauth. Ya estamos listos para trabajar con el resto de funciones de las API’s llamadas.

Proponemos generar un único token para cada script y guardarlo conjuntamente en el mismo directorio que contiene los datos, resultados o otros elementos relacionados con dicho script. En otras palabras, se debería evitar reciclar un token creado para otra tarea, aunque se pidan los mismos accesos. Sin embargo, solo se debería generar una clave de cliente por cliente, es decir, podemos usar una misma clave para varios tokens.

Automatizar una tarea que contiene un token

Antes de pasar a un resumen de las principales recomendaciones al trabajar con tokens, hablaremos sobre como automatizar las tareas que los contienen para que no fallen. Para evitar que nos de un error de acceso una tarea automatizada con cronR, debemos indicar dónde encontrar el token.

Para ello es suficiente con definir en las variables de entorno donde encontrar el token (para Analytics no nos va hacer falta, pero para acceder al Cloud Storage, sí). Lo haríamos del siguiente modo:

Sys.setenv("GAR_AUTH_FILE" = "directorio_del_token/gcp_ga_client1.oauth")  gar_auth() 

Igual que antes, para cada librería propia de cada API, podemos utilizar la definición específica (por ejemplo, GCS_AUTH_FILE con gcs_auth()), pero recomendamos usar la general con GAR_AUTH_FILE.

9 Recomendaciones

  • Generar credenciales únicas para cada cliente en la consola de Cloud Platform dentro del proyecto correspondiente.
  • Poner un nombre identificador a las claves generadas en la consola de Cloud Platform.
  • Generar un único token por script.
  • Indicar en los scopes todas las API’s a las que queremos acceder.
  • Generar siempre el token indicando el client_id y el client_secret. Evitar trabajar en default.
  • No reciclar tokens creados para otras tareas.
  • Utilizar la función gar_auth del paquete googleAuthR.
  • Guardar el token con un nombre identificador.
  • Definir la variable de entorno GAR_AUTH_FILE al automatizar una tarea con cronR.
Marc Ortega

Marc Ortega

Share on facebook
Share on twitter
Share on linkedin
Share on email
4 min
Suscríbete a nuestra newsletter

Los mejores artículos de analítica digital para potenciar tu negocio.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Entradas relacionadas

Cómo hacer implementaciones AMP eficientes con GTM

En un artículo anterior introdujimos la manera de implementar AMP con o sin GTM. A continuación veremos una alternativa eficiente y las ventajas que esta aporta.

6 minutos

Dificultad

Secuestro del navegador: cómo bloquear ad injectors

En este artículo describimos un problema que afecta sobre todo a sitios de ecommerce, el “secuestro” de navegadores por parte de programas maliciosos que muestran publicidad al usuario, con el objetivo de que finalice la conversión en sitios de la competencia.

6 minutos

Dificultad

Uso de librerías en Tealium

Cómo gestionar y utilizar las librerías en el gestor de etiquetas Tealium. Cuestiones a tener en cuenta, desventajas de usarlas y cómo solventar estas desventajas.

3 minutos

Dificultad

Del ON al OFF: el gran reto de medición para las empresas

Tener información de lo que hace un usuario en una página web es relativamente fácil: podemos saber cuánto tiempo ha estado navegando, qué interacciones ha hecho, si ha comprado o no, por qué página ha llegado…

3 minutos

Dificultad