使用Node.js与Google Analytics(分析)API进行交互

了解如何使用官方将Node.js应用程序与Google Analytics(分析)API接口googleapis包裹。我们将使用JSON Web令牌并查看一些示例

注意:uBlock Origin阻止了此帖子上的图像,因为它们具有analytics路径中的单词。因此,请确保在此页面上将其禁用,以查看图像🖼

在这篇文章中,我将展示一些将Google Analytics(分析)API与Node.js

Google提供了一个很棒的npm软件包:googleapis。我们将使用它作为API交互的基础。

身份验证是与API交互的重要组成部分。在上查看此帖子如何向Google API进行身份验证。在本文中,我假设您已阅读该书,并且您知道如何执行智威汤逊验证。

环境变量

下载完JSON格式来自Google的密钥文件,将client_emailprivate_key值作为环境变量,以便可以通过以下方式访问它们

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

将用户添加到Google Analytics(分析)

由于在这些示例中使用的是Service to Service API,因此您需要添加client_email对您的Google Analytics(分析)个人资料的价值。转到管理面板,然后单击用户管理,无论是在属性上还是在视图上。

Google Analytics Settings

并添加您在client_email键入JSON文件:

Add a new user

导入Google库

const { google } = require('googleapis')

记住{}周围google对象,因为我们需要将其从googleapis库(否则我们需要调用google.google而且很丑)

定义范围

此行设置范围:

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

Google Analytics API定义了几个范围:

  • https://www.googleapis.com/auth/analytics.readonly查看数据
  • https://www.googleapis.com/auth/analytics查看和管理数据
  • https://www.googleapis.com/auth/analytics.edit编辑管理实体
  • https://www.googleapis.com/auth/analytics.manage.users管理帐户用户和权限
  • https://www.googleapis.com/auth/analytics.manage.users.readonly查看用户及其权限
  • https://www.googleapis.com/auth/analytics.provision创建新的Google Analytics(分析)帐户

您应始终选择能提供最少电量的示波器。

由于我们现在只想查看报告,因此选择https://www.googleapis.com/auth/analytics.readonly代替https://www.googleapis.com/auth/analytics

Google Analytics Reporting API

注意:您也可以使用Google Analytics Reporting API访问这些权限。

它是Google Analytics(分析)API的精简版,仅提供范围https://www.googleapis.com/auth/analytics.readonlyhttps://www.googleapis.com/auth/analytics

该API与Analytics API稍有不同,但是使用方式和公开的方法不同,因此我们将跳过。

创建JWT

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

执行请求

检查此代码:

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()

它执行对Google Analytics(分析)API的请求,以获取最近30天的综合浏览量

view_id包含的ID看法。不是您的Google Analytics(分析)代码,而是视图ID。您可以在管理面板中通过点击查看设定在您要访问的视图上:

The view id

您将此对象传递给请求:

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

除了jwt对象和视图ID,我们还有3个参数。

  • metrics:告诉API我们想要得到什么
  • start-date:定义报告的开始日期
  • end-date:定义报告的结束日期

该请求非常简单,它返回指定时间段内发生的综合浏览量。

返回的结果将类似于:

{
  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' ] ] }
}

有了这个,您可以访问综合浏览量response.data.rows[0][0]

指标

这个例子很简单。我们只是要求提供以下数据:

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

我们可以使用大量数据。

维度和指标浏览器是发现所有选项的绝佳工具。

这些术语是Google Analytics(分析)的两个概念。

方面是属性,例如“城市”,“国家/地区”或“页面”,引荐路径或会话时长。

指标是定量的衡量指标,例如用户数或会话数。

指标的一些示例:

  • 取得综合浏览量ga:pageviews
  • 获得唯一身份用户ga:users
  • 获得会议ga:sessions
  • 获得自然搜索ga:organicSearches

让我们用这些指标构建一些示例。

通用代码

这是下面示例中使用的通用代码。将代码段放入authorize()打回来。

'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()

默认对象将在示例中使用点差算子,这是处理JavaScript中默认值的便捷方法。

获取今天的会议数量

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])

获取来自自然资源的今日会话数(搜索引擎)

添加filters财产:

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

获取昨天的会议次数

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])

获取最近30天内的会话数

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])

获取最近30天内使用的浏览器

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’ ]
]

获取使用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])

按流量来源获取会话

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’ ]
]

Google Analytics(分析)实时API

Google Analytics(分析)实时API于[测试版]于2018年5月发布,并且无法公开访问。检查此页

免费下载我的Node.js手册


更多节点教程: