Consultas a la API de Google Analytics con fechas actualizadas automáticamente

Por el 20/07/2016 a las 10:25

Al seleccionar las fechas de inicio o fin en nuestras consultas, en el Query Explorer, podemos utilizar today, yesterday o el patrón NdaysAgo además del patrón básico YYYY-MM-DD. Pero, ¿qué pasa si necesitamos datos de las últimas N semanas o los últimos N meses? La cosa se complica y no tenemos muchas mejores opciones que introducir a mano las fechas que necesitamos. Parece una tontería, pero es algo poco práctico cuando queremos usar la misma consulta para distintas fechas, o incluso peor cuando queremos hacerla de forma periódica para hacer informes semanales o mensuales, por ejemplo.

Con la conexión entre R y Google Analytics (de la cual hablamos anteriormente aquí) parecería que no tenemos mejor suerte ya que ni siquiera acepta today, yesterday o NdaysAgo, sino que únicamente acepta el patrón YYYY-MM-DD. Pero, en realidad, ‘jugando‘ un poco con las funciones de tiempo de R sí que podemos consultar estas fechas relativas y, de hecho, cualquier otra que nos propongamos.

En este post veremos la forma de hacer consultas de algunos de los periodos dinámicos más comunes: los últimos N días, las últimas N semanas (de lunes a domingo) y los últimos N meses. A partir de aquí, se podrían modificar fácilmente para consultar otras fechas relativas que se necesiten en cada caso concreto.

Para conseguirlo, lo único que necesitaremos será modificar adecuadamente los parámetros que corresponden a la fecha de inicio (start.date) y de fin (end.date) de la función Init del package RGoogleAnalytics, que es mediante la cual creamos la consulta a hacer a la API de Google Analytics. Sin embargo, para poder hacerlo necesitaremos:

1) Tener instaladas y cargadas las librerías RGoogleAnalytics y lubridate. Esta segunda la necesitamos para usar ciertas funciones de tiempo que nos ayudarán a obtener las fechas relativas que queremos. En principio se carga automáticamente al cargar la librería RGoogleAnalytics, pero si no fuera el caso también habría que cargarla para utilizar el código.

install.packages("RGoogleAnalytics")
install.packages("lubridate")
library(RGoogleAnalytics)

2) Autenticarse con nuestras credenciales para poder hacer la conexión entre R y Google Analytics. Para más detalles, seguir los pasos del post mencionado anteriormente.

#Credenciales para la cuenta de Google Analytics seleccionada
client.id<-"xxxxxxxxxxxxxxxxxxxxxxxx"
client.secret<-"xxxxxxxxxxxxxxxxxxxx"

#Creación y llamada del token (la conexión en sí)
token<-Auth(client.id,client.secret)
ValidateToken(token)

3) Comprobar que tenemos configurados el día y la hora correctos. Para hacerlo se puede ejecutar el comando Sys.time(), que devuelve la fecha y la hora del momento en que se ejecuta.

Últimos N días

query.list<-Init(
 start.date=as.character(Sys.Date()-N), #Sustituir N por un número
 end.date=as.character(Sys.Date()-1)
 dimension="<dimensiones>",
  metrics="<métricas>",
  max.results=10000,
  table.id="ga:XXXXXXX"
)
ga.query<-QueryBuilder(query.list)
ga.data<-GetReportData(ga.query,token)
La fecha inicial tiene que ser la de hace N días. Como Sys.Date() devuelve la fecha actual, simplemente le restamos el número de días que queremos.
La fecha final tiene que ser ayer, así que usamos la misma idea y le restamos 1 día a hoy.
Finalmente, con as.character() convertimos los valores obtenidos en un string o cadena de caracteres, que es el formato que necesitan los parámetros start.date y end.date.

Últimas N semanas (de lunes a domingo)

query.list<-Init(
  start.date=as.character(seq(Sys.Date()-wday(Sys.Date())+2,
               by="-1 week",length.out = N+1)[N+1]), #Sustituir N por un número
  end.date=as.character(Sys.Date()-wday(Sys.Date())+1),
  dimension="<dimensiones>",
  metrics="<métricas>",
  max.results=10000,
  table.id="ga:XXXXXXX"
)
ga.query<-QueryBuilder(query.list)
ga.data<-GetReportData(ga.query,token)
La fecha inicial tiene que ser el lunes de hace N semanas. Para ello, primero recuperamos el lunes de la semana actual mediante Sys.Date()-wday(Sys.Date())+2 y luego retrocedemos N* semanas para obtener el lunes que necesitamos con seq(…,by=”-1 week”,length.out = N+1)[N+1]).
La fecha final, considerando que queremos semanas cerradas, es el domingo de la semana anterior a la actual. Lo obtenemos mediante Sys.Date()-wday(Sys.Date())+1 (no es más que el mismo código con el que obtenemos el lunes de la semana actual pero restando un día para que sea el domingo anterior).
Finalmente, usamos as.character() como en el caso anterior.
*Se utiliza N+1 porque la primera fecha que considera es la de la semana actual.

Últimos N meses

query.list<-Init(
  start.date=as.character(seq(Sys.Date()-day(Sys.Date())+1,
               by="-1 month",length.out = N+1)[N+1]), #Sustituir N por un número
 
  end.date=as.character(Sys.Date()-day(Sys.Date())),
  dimension="<dimensiones>",
  metrics="<métricas>",
  max.results=10000,
  table.id="ga:XXXXXXX"
)
ga.query<-QueryBuilder(query.list)
ga.data<-GetReportData(ga.query,token)
La fecha inicial tiene que ser el primer día del mes correspondiente. Para obtenerlo, primero recuperamos el día 1 del mes actual con Sys.Date()-day(Sys.Date())+1 y después retrocedemos N* meses para tener el día 1 que necesitamos con seq(…,by=”-1 month”,length.out = N+1)[N+1])
La fecha final del periodo, considerando que queremos meses cerrados, es el último día del mes anterior al actual. Lo podemos obtener con Sys.Date()-day(Sys.Date()), que no es más que el mismo código con el que obtenemos el día 1 del mes actual pero restando un día para que sea el último del mes anterior (independientemente de si tiene 30, 31 o 28 días).
Finalmente, como en los casos anteriores, usamos as.character() para convertir los valores en un string o cadena de caracteres, que es el formato que necesitan los parámetros start.date y end.date.
*Se utiliza N+1 porque el primer mes que considera es el actual.
Y ya está! Poniendo nuestro id de la vista de Google Analytics correspondiente más las dimensiones y métricas que se quieren extraer, ya podríamos tener una consulta que siempre devuelva los datos de los últimos N días, de las últimas N semanas o de los últimos N meses. Además, podríamos combinar estos códigos para automatizar consultas con fechas relativas personalizadas, como por ejemplo “los últimos 2 meses hasta el domingo pasado” o cosas por el estilo. De esta forma, podremos repetir nuestros análisis y/o visualizaciones hechos con R periódicamente para generar informes sin tener que modificar ni una línea del código inicial, así que ya tienes una razón más para animarte a usar R para analizar tus datos de Google Analytics. 😉
Espero que este post os pueda facilitar un poco la vida y de cara a próximos análisis sólo tengáis que centraros en la explotación de los datos, que es lo realmente importante. Y si tenéis alguna duda relacionada con el tema o tenéis algún problema al automatizar algunas fechas, no dudéis en dejar vuestro comentario. 🙂