Interactuar con la API de Google Analytics usando Node.js

Aprenda a conectar una aplicación Node.js con la API de Google Analytics, utilizando elgoogleapispaquete. Usaremos un JSON Web Token y veremos algunos ejemplos.

Nota: uBlock Origin bloquea las imágenes de esta publicación, porque tienen laanalyticspalabra en el camino. Así que asegúrese de desactivarlo para esta página, para ver las imágenes 🖼

En esta publicación, voy a mostrar algunos ejemplos de uso de la API de Google Analytics conNode.js.

Google ofrece un excelente paquete npm:googleapis. Vamos a usar eso como el bloque de construcción base de nuestra interacción API.

La autenticación es una parte importante de la interacción con una API. Mira esta publicación encómo autenticarse en las API de Google. En este artículo, voy a asumir que lo leíste y sabes cómo realizar unaJWTautenticación.

Variables de entorno

Una vez que descargue elJSONArchivo clave de Google, ponga elclient_emailyprivate_keyvalores como variables de entorno, de modo que sean accesibles a través de

  • process.env.CLIENT_EMAIL
  • process.env.PRIVATE_KEY

Agregar el usuario a Google Analytics

Dado que estamos usando la API de servicio a servicio en estos ejemplos, debe agregar elclient_emailvalor a su perfil de Google Analytics. Vaya al panel de administración y haga clic enGestión de usuarios, ya sea en una propiedad o en una vista.

Google Analytics Settings

Y agregue el correo electrónico que encontró en elclient_emailclave en el archivo JSON:

Add a new user

Importar la biblioteca de Google

const { google } = require('googleapis')

Recuerda el{}alrededor degoogleobjeto, ya que necesitamos desestructurarlo de lagoogleapisbiblioteca (de lo contrario, tendríamos que llamargoogle.googley es feo)

Definir el alcance

Esta línea establece el alcance:

const scopes = 'https://www.googleapis.com/auth/analytics.readonly'

La API de Google Analytics define varios ámbitos:

  • https://www.googleapis.com/auth/analytics.readonlypara ver los datos
  • https://www.googleapis.com/auth/analyticspara ver y administrar los datos
  • https://www.googleapis.com/auth/analytics.editeditar las entidades de gestión
  • https://www.googleapis.com/auth/analytics.manage.userspara administrar los usuarios y permisos de la cuenta
  • https://www.googleapis.com/auth/analytics.manage.users.readonlypara ver los usuarios y sus permisos
  • https://www.googleapis.com/auth/analytics.provisionpara crear nuevas cuentas de Google Analytics

Siempre debe elegir el visor que otorgue la menor cantidad de poder.

Dado que ahora solo queremos ver los informes, elegimoshttps://www.googleapis.com/auth/analytics.readonlyen vez dehttps://www.googleapis.com/auth/analytics.

API de informes de Google Analytics

Nota: también puede utilizar elAPI de informes de Google Analyticspara acceder a esos permisos.

Es una versión reducida de la API de Google Analytics, que ofrece solo el alcancehttps://www.googleapis.com/auth/analytics.readonlyyhttps://www.googleapis.com/auth/analytics.

Sin embargo, la API es ligeramente diferente a la API de Analytics en cómo se usa y en qué métodos expone, así que lo omitiremos.

Crea el JWT

const jwt = new google.auth.JWT(process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes)

Realizar una solicitud

Verifique este código:

const { google } = require('googleapis')
const scopes = 'https://www.googleapis.com/auth/analytics.readonly'
const jwt = new google.auth.JWT(process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes)

const view_id = ‘XXXXX’

async function getData() { const response = await jwt.authorize() const result = await google.analytics(‘v3’).data.ga.get({ ‘auth’: jwt, ‘ids’: ‘ga:’ + view_id, ‘start-date’: ‘30daysAgo’, ‘end-date’: ‘today’, ‘metrics’: ‘ga:pageviews’ })

console.dir(result) }

getData()

Realiza una solicitud a la API de Google Analytics para obtener elnúmero de páginas vistas en los últimos 30 días.

view_idcontiene el ID delvista. No su código de Google Analytics, sino el ID de la vista. Puede obtenerlo desde el panel de administración, haciendo clic enVer configuracionesen la vista a la que desea acceder:

The view id

Pasas este objeto a la solicitud:

{
  'auth': jwt,
  'ids': 'ga:' + view_id,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'metrics': 'ga:pageviews'
}

Además del objeto jwt y el id de la vista, tenemos 3 parámetros.

  • metrics: le dice a la APIlo que queremos conseguir
  • start-date: define la fecha de inicio del informe
  • end-date: define la fecha de finalización del informe

Esta solicitud es muy simple y devuelve el número de páginas vistas que ocurren en el período de tiempo especificado.

El resultado devuelto será algo como:

{
  status: 200,
  statusText: 'OK',
  headers: {...},
  config: {...},
  request: {...},
  data: {
    kind: 'analytics#gaData',
    id: 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXXXXXXXXXXXXX&metrics=ga:pageviews&start-date=30daysAgo&end-date=today',
    query:  {
      'start-date': '30daysAgo',
      'end-date': 'today',
      ids: 'ga:XXXXXXXXXXXXXXXXXX',
      metrics: [ 'ga:pageviews' ],
      'start-index': 1,
      'max-results': 1000
    },
    itemsPerPage: 1000,
    totalResults: 1,
    selfLink: 'https://www.googleapis.com/analytics/v3/data/ga?ids=ga:XXXXXXXXXXXXXXXXXX&metrics=ga:pageviews&start-date=30daysAgo&end-date=today',
    profileInfo: {
      profileId: 'XXXXXXXXXXXXXXXXXX',
      accountId: 'XXXXXXXXXXXXXXXXXX',
      webPropertyId: 'UA-XXXXXXXXXXX--XX',
      internalWebPropertyId: 'XXXXXXXXXXXXXXXXXX',
      profileName: 'XXXXXXXXXXXXXXXXXX',
      tableId: 'ga:XXXXXXXXXXXXXXXXXX'
    },
    containsSampledData: false,
    columnHeaders: [
      {
        name: 'ga:pageviews',
        columnType: 'METRIC',
        dataType: 'INTEGER'
      }
    ],
    totalsForAllResults: { 'ga:pageviews': '3000' },
    rows: [ [ '114426' ] ] }
}

Con esto puede acceder al recuento de páginas vistas enresponse.data.rows[0][0].

Métrica

Este ejemplo fue simple. Solo pedimos estos datos:

{
  'start-date': '30daysAgo',
  'end-date': 'today',
  'metrics': 'ga:pageviews'
}

Hay una gran cantidad de datos que podemos usar.

losExplorador de dimensiones y métricases una herramienta increíble para descubrir todas las opciones.

Esos términos son dos conceptos de Google Analytics.

Dimensionesson atributos, como Ciudad, País o Página, la ruta de referencia o la duración de la sesión.

Métricason medidas cuantitativas, como el número de usuarios o el número de sesiones.

Algunos ejemplos de métricas:

  • obtener las páginas vistasga:pageviews
  • conseguir los usuarios únicosga:users
  • conseguir las sesionesga:sessions
  • obtener las búsquedas orgánicasga:organicSearches

Construyamos algunos ejemplos con esas métricas.

Código común

Este es el código común que se usa en los ejemplos siguientes. Ponga el fragmento en elauthorize()llamar de vuelta.

'use strict'

const { google } = require(‘googleapis’)

const scopes = https://www.googleapis.com/auth/analytics.readonly const jwt = new google.auth.JWT(process.env.CLIENT_EMAIL, null, process.env.PRIVATE_KEY, scopes)

async function getData() { const defaults = { ‘auth’: jwt, ‘ids’: ‘ga:’ + process.env.VIEW_ID, } const response = await jwt.authorize()

/* custom code goes here, using response */ }

getData()

El objeto de valores predeterminados se reutilizará en los ejemplos utilizando eloperador de propagación, que es una forma práctica de manejar los valores predeterminados en JavaScript.

Obtenga el número de sesiones de hoy

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': 'today',
  'end-date': 'today',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows[0][0])

Obtenga el número de sesiones de hoy que provienen de fuentes orgánicas (motores de búsqueda)

Añade elfilterspropiedad:

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': 'today',
  'end-date': 'today',
  'metrics': 'ga:sessions',
  'filters': 'ga:medium==organic',
})

Obtenga el número de sesiones de ayer

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': 'yesterday',
  'end-date': 'yesterday',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows[0][0])

Obtenga el número de sesiones en los últimos 30 días

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows[0][0])

Obtenga los navegadores utilizados en los últimos 30 días

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'dimensions': 'ga:browser',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows.sort((a, b) => b[1] - a[1]))

[
[ ‘Chrome’, ‘994’ ],
[ ‘Safari’, ‘548’ ],
[ ‘Firefox’, ‘442’ ],
[ ‘Android Webview’, ‘113’ ],
[ ‘Opera’, ‘56’ ],
[ ‘Safari (in-app)’, ‘41’ ],
[ ‘Edge’, ‘36’ ],
[ ‘Internet Explorer’, ‘4’ ]
]

Obtenga la cantidad de visitantes que usan Chrome

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'dimensions': 'ga:browser',
  'metrics': 'ga:sessions',
  'filters': 'ga:browser==Chrome',
})

console.dir(result.data.rows[0][1])

Obtenga las sesiones por fuente de tráfico

const result = await google.analytics('v3').data.ga.get({
  ...defaults,
  'start-date': '30daysAgo',
  'end-date': 'today',
  'dimensions': 'ga:source',
  'metrics': 'ga:sessions'
})

console.dir(result.data.rows.sort((a, b) => b[1] - a[1]))

[
[ ‘google’, ‘1343’ ],
[ ‘(direct)’, ‘731’ ],
[ medium.com, ‘624’ ],
[ t.co, ‘987’ ],
[ reddit.com, ‘65’ ]
]

La API en tiempo real de Google Analytics

La API de Google Analytics Real Time está en [mayo de 2018] en versión beta privada y no es de acceso público.Revisa esta página.

Descarga mi gratisManual de Node.js


Más tutoriales de nodos: