Tương tác với API Google Analytics bằng Node.js

Tìm hiểu cách giao diện ứng dụng Node.js với API Google Analytics, sử dụng chính thứcgoogleapisgói hàng. Chúng tôi sẽ sử dụng Mã thông báo web JSON và xem một số ví dụ

Lưu ý: uBlock Origin chặn các hình ảnh trên bài đăng này, vì chúng cóanalyticstừ trong đường dẫn. Vì vậy, hãy đảm bảo bạn tắt nó cho trang này, để xem hình ảnh 🖼

Trong bài đăng này, tôi sẽ trình bày một số ví dụ về việc sử dụng API Google Analytics vớiNode.js.

Google cung cấp một gói npm tuyệt vời:googleapis. Chúng tôi sẽ sử dụng nó làm khối xây dựng cơ bản của tương tác API của chúng tôi.

Xác thực là một phần quan trọng của việc tương tác với API. Kiểm tra bài đăng này trêncách xác thực với các API của Google. Trong bài viết này, tôi sẽ giả sử bạn đọc điều đó và bạn biết cách thực hiệnJWTxác thực.

Các biến môi trường

Sau khi bạn tải xuốngJSONTệp chính từ Google, đặtclient_emailprivate_keycác giá trị dưới dạng các biến môi trường để chúng có thể được truy cập thông qua

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

Thêm người dùng vào Google Analytics

Vì chúng tôi đang sử dụng API Dịch vụ đến Dịch vụ trong các ví dụ này, bạn cần thêmclient_emailgiá trị đối với hồ sơ Google Analytics của bạn. Đi tới bảng điều khiển Quản trị và nhấp vàoQuản lý người dùng, trên một thuộc tính hoặc trên một khung nhìn.

Google Analytics Settings

Và thêm email bạn tìm thấy trongclient_emailkhóa trong tệp JSON:

Add a new user

Nhập thư viện Google

const { google } = require('googleapis')

Nhớ cái gì đó{}xung quanhgoogleđối tượng, vì chúng ta cần cấu trúc nó khỏigoogleapisthư viện (nếu không, chúng tôi cần gọigoogle.googlevà nó xấu xí)

Xác định phạm vi

Dòng này đặt phạm vi:

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

API Google Analytics xác định một số phạm vi:

  • https://www.googleapis.com/auth/analytics.readonlyđể xem dữ liệu
  • https://www.googleapis.com/auth/analyticsđể xem và quản lý dữ liệu
  • https://www.googleapis.com/auth/analytics.editđể chỉnh sửa các thực thể quản lý
  • https://www.googleapis.com/auth/analytics.manage.usersđể quản lý người dùng tài khoản và quyền
  • https://www.googleapis.com/auth/analytics.manage.users.readonlyđể xem người dùng và quyền của họ
  • https://www.googleapis.com/auth/analytics.provisionđể tạo tài khoản Google Analytics mới

Bạn nên luôn chọn phạm vi cấp ít năng lượng nhất.

Vì chúng tôi chỉ muốn xem các báo cáo ngay bây giờ, chúng tôi chọnhttps://www.googleapis.com/auth/analytics.readonlythay vìhttps://www.googleapis.com/auth/analytics.

API báo cáo Google Analytics

Lưu ý: bạn cũng có thể sử dụngAPI báo cáo Google Analyticsđể truy cập các quyền đó.

Đây là phiên bản rút gọn của API Google Analytics, chỉ cung cấp phạm vihttps://www.googleapis.com/auth/analytics.readonlyhttps://www.googleapis.com/auth/analytics.

API hơi khác so với API Analytics, tuy nhiên về cách sử dụng và phương pháp mà nó thể hiện, vì vậy chúng tôi sẽ bỏ qua điều đó.

Tạo JWT

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

Thực hiện một yêu cầu

Kiểm tra mã này:

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

Nó thực hiện một yêu cầu đối với API Google Analytics để tìm nạpsố lần xem trang trong 30 ngày qua.

view_idchứa ID củalượt xem. Không phải mã Google Analytics của bạn, mà là ID chế độ xem. Bạn có thể lấy điều đó từ bảng điều khiển quản trị bằng cách nhấp vàoGiao diện cài đặttrên chế độ xem bạn muốn truy cập:

The view id

Bạn chuyển đối tượng này vào yêu cầu:

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

Ngoài đối tượng jwt và id khung nhìn, chúng ta có 3 tham số.

  • metrics: nói với APInhững gì chúng tôi muốn có được
  • start-date: xác định ngày bắt đầu cho báo cáo
  • end-date: xác định ngày kết thúc cho báo cáo

Yêu cầu này rất đơn giản và trả về số lần xem trang xảy ra trong khoảng thời gian được chỉ định.

Kết quả trả về sẽ như sau:

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

Với điều này, bạn có thể truy cập số lượt xem trang trongresponse.data.rows[0][0].

Số liệu

Ví dụ này rất đơn giản. Chúng tôi chỉ yêu cầu dữ liệu này:

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

Có rất nhiều dữ liệu mà chúng tôi có thể sử dụng.

CácTrình khám phá thứ nguyên & chỉ sốlà một công cụ tuyệt vời để khám phá tất cả các tùy chọn.

Các thuật ngữ đó là hai khái niệm của Google Analytics.

Kích thướclà các thuộc tính, như Thành phố, Quốc gia hoặc Trang, đường dẫn giới thiệu hoặc thời lượng phiên.

Số liệulà các phép đo định lượng, như số lượng người dùng hoặc số phiên.

Một số ví dụ về số liệu:

  • nhận được số lần xem trangga:pageviews
  • có được những người dùng duy nhấtga:users
  • nhận được các phiênga:sessions
  • nhận được các tìm kiếm không phải trả tiềnga:organicSearches

Hãy xây dựng một số ví dụ với các số liệu đó.

Mã chung

Đây là mã phổ biến được sử dụng trong các ví dụ bên dưới. Đặt đoạn mã trongauthorize()gọi lại.

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

Đối tượng mặc định sẽ được sử dụng lại trong các ví dụ bằng cách sử dụngnhà điều hành trải rộng, là một cách tiện dụng để xử lý các giá trị mặc định trong JavaScript.

Nhận số lượng phiên hôm nay

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

Nhận số lượng phiên hôm nay đến từ các nguồn không phải trả tiền (Công cụ tìm kiếm)

Thêmfiltersbất động sản:

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

Nhận số lượng phiên hôm qua

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

Nhận số phiên trong 30 ngày qua

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

Nhận các trình duyệt được sử dụng trong 30 ngày qua

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

Nhận số lượng khách truy cập bằng cách sử dụng 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])

Nhận các phiên theo nguồn lưu lượng truy cập

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

API thời gian thực của Google Analytics

API thời gian thực của Google Analytics là [tháng 5 năm 2018] ở bản beta riêng tư và không thể truy cập công khai.Kiểm tra trang này.

Tải xuống miễn phí của tôiSổ tay Node.js


Các hướng dẫn nút khác: