Aprenda a conectar una aplicación Node.js con la API de Google Analytics, utilizando elgoogleapis
paquete. Usaremos un JSON Web Token y veremos algunos ejemplos.
Nota: uBlock Origin bloquea las imágenes de esta publicación, porque tienen la
analytics
palabra 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.
- Variables de entorno
- Agregar el usuario a Google Analytics
- Importar la biblioteca de Google
- Definir el alcance
- API de informes de Google Analytics
- Crea el JWT
- Realizar una solicitud
- Métrica
- Código común
- Obtenga el número de sesiones de hoy
- Obtenga el número de sesiones de hoy que provienen de fuentes orgánicas (motores de búsqueda)
- Obtenga el número de sesiones de ayer
- Obtenga el número de sesiones en los últimos 30 días
- Obtenga los navegadores utilizados en los últimos 30 días
- Obtenga la cantidad de visitantes que usan Chrome
- Obtenga las sesiones por fuente de tráfico
- La API en tiempo real de Google Analytics
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_email
yprivate_key
valores 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_email
valor 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.
Y agregue el correo electrónico que encontró en elclient_email
clave en el archivo JSON:
Importar la biblioteca de Google
const { google } = require('googleapis')
Recuerda el{}
alrededor degoogle
objeto, ya que necesitamos desestructurarlo de lagoogleapis
biblioteca (de lo contrario, tendríamos que llamargoogle.google
y 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.readonly
para ver los datoshttps://www.googleapis.com/auth/analytics
para ver y administrar los datoshttps://www.googleapis.com/auth/analytics.edit
editar las entidades de gestiónhttps://www.googleapis.com/auth/analytics.manage.users
para administrar los usuarios y permisos de la cuentahttps://www.googleapis.com/auth/analytics.manage.users.readonly
para ver los usuarios y sus permisoshttps://www.googleapis.com/auth/analytics.provision
para 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.readonly
en 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.readonly
yhttps://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_id
contiene 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:
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 conseguirstart-date
: define la fecha de inicio del informeend-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 vistas
ga:pageviews
- conseguir los usuarios únicos
ga:users
- conseguir las sesiones
ga:sessions
- obtener las búsquedas orgánicas
ga: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 elfilters
propiedad:
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:
- Una introducción al administrador de paquetes npm
- Introducción a Node.js
- Solicitudes HTTP usando Axios
- Dónde alojar una aplicación Node.js
- Interactuar con la API de Google Analytics usando Node.js
- El corredor de paquetes de nodo npx
- La guía package.json
- ¿Dónde instala npm los paquetes?
- Cómo actualizar Node.js
- Cómo usar o ejecutar un paquete instalado usando npm
- El archivo package-lock.json
- Control de versiones semántico usando npm
- ¿Deberías enviar la carpeta node_modules a Git?
- Actualice todas las dependencias de Node a su última versión
- Analizando JSON con Node.js
- Encuentre la versión instalada de un paquete npm
- Secuencias de Node.js
- Instale una versión anterior de un paquete npm
- Obtener la carpeta actual en el nodo
- Cómo registrar un objeto en Node
- Exponer la funcionalidad de un archivo de nodo mediante exportaciones
- Diferencias entre el nodo y el navegador
- Hacer una solicitud HTTP POST usando Node
- Obtener datos del cuerpo de la solicitud HTTP usando Node
- Búferes de nodo
- Una breve historia de Node.js
- Cómo instalar Node.js
- ¿Cuánto JavaScript necesita saber para usar Node?
- Cómo usar el REPL de Node.js
- Nodo, acepta argumentos de la línea de comando
- Salida a la línea de comando usando Node
- Acepte la entrada de la línea de comando en el nodo
- Desinstalación de paquetes npm con `npm uninstall`
- paquetes locales o globales de npm
- dependencias npm y devDependencies
- El ciclo de eventos de Node.js
- Entendiendo process.nextTick ()
- Entendiendo setImmediate ()
- El emisor de eventos de nodo
- Construye un servidor HTTP
- Realización de solicitudes HTTP con Node
- El módulo Node fs
- Solicitudes HTTP en Node usando Axios
- Leer archivos con Node
- Rutas de archivo de nodo
- Escribir archivos con Node
- Estadísticas de archivos de nodo
- Trabajar con descriptores de archivo en Node
- Trabajar con carpetas en Node
- El módulo de ruta de nodo
- El módulo http de nodo
- Usando WebSockets con Node.js
- Los conceptos básicos para trabajar con MySQL y Node
- Manejo de errores en Node.js
- La guía Pug
- Cómo leer variables de entorno de Node.js
- Cómo salir de un programa de Node.js
- El módulo Node os
- El módulo de eventos de nodo
- Nodo, la diferencia entre desarrollo y producción
- Cómo comprobar si existe un archivo en Node.js
- Cómo crear un archivo vacío en Node.js
- Cómo eliminar un archivo con Node.js
- Cómo obtener la última fecha de actualización de un archivo usando Node.js
- Cómo determinar si una fecha es hoy en JavaScript
- Cómo escribir un objeto JSON en un archivo en Node.js
- ¿Por qué debería usar Node.js en su próximo proyecto?
- Ejecute un servidor web desde cualquier carpeta
- Cómo usar MongoDB con Node.js
- Utilice Chrome DevTools para depurar una aplicación Node.js
- ¿Qué es pnpm?
- La lista de opciones de Node.js Runtime v8
- Cómo corregir el error "Falta acceso de escritura" al usar npm
- Cómo habilitar los módulos ES en Node.js
- Cómo generar un proceso hijo con Node.js
- Cómo obtener tanto el cuerpo analizado como el cuerpo crudo en Express
- Cómo manejar la carga de archivos en Node.js
- ¿Qué son las dependencias entre pares en un módulo de nodo?
- Cómo escribir un archivo CSV con Node.js
- Cómo leer un archivo CSV con Node.js
- Los módulos principales del nodo
- Incrementar varios números de carpetas a la vez usando Node.js
- Cómo imprimir un lienzo en una URL de datos
- Cómo crear y guardar una imagen con Node.js y Canvas
- Cómo descargar una imagen usando Node.js
- Cómo cambiar el nombre de archivos en masa en Node.js
- Cómo obtener los nombres de todos los archivos en una carpeta en Node
- Cómo usar promesas y esperar con las funciones basadas en devolución de llamada de Node.js
- Cómo probar un paquete npm localmente
- Cómo verificar la versión actual de Node.js en tiempo de ejecución
- Cómo utilizar Sequelize para interactuar con PostgreSQL
- Sirve una página HTML con Node.js
- Cómo resolver el error `util.pump is not a function` en Node.js