學習如何使用官方的googleapis
套件,在Node.js應用程式中與Google Analytics API互動。我們將使用JSON Web Token並看一些範例。
注意:uBlock Origin封鎖這篇文章中的圖片,因為路徑中含有「analytics」這個詞。所以請確保在此頁面上禁用它,以便看到圖片。🖼
在這篇文章中,我將展示如何使用Node.js和Google Analytics API的一些範例。
- 環境變數
- 將使用者新增至Google Analytics
- 匯入Google庫
- 定義範圍
- Google Analytics報告API
- 建立JWT
- 執行請求
- 指標
- 常見程式碼
- 取得今日會話數
- 取得來自有機來源(搜尋引擎)的今日會話數
- 取得昨日會話數
- 取得過去30天的會話數
- 取得過去30天內使用的瀏覽器
- 取得使用Chrome的訪客數
- 按流量來源取得會話數
- Google Analytics即時API
Google提供了一個很棒的npm套件:googleapis
。我們將使用它作為我們API互動的基礎建構塊。
驗證是與API互動的重要部分。請查看這篇關於如何驗證Google API的文章。在本文中,我假設您已經閱讀了那篇文章,並且知道如何執行JWT驗證。
環境變數
一旦從Google下載了JSON金鑰文件,將client_email
和private_key
值設定為環境變數,以便通過以下方式存取:
process.env.CLIENT_EMAIL
process.env.PRIVATE_KEY
將使用者新增至Google Analytics
由於在這些範例中使用了服務對服務API,您需要將client_email
值添加到您的Google Analytics配置文件中。轉到「管理」面板,然後在屬性或視圖中點擊「使用者管理」。
然後新增您在JSON文件中找到的client_email
鍵中的電子郵件:
匯入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報告API
注意:您也可以使用“Google Analytics報告API”來訪問這些權限。
這是Google Analytics API的簡化版本,僅提供範圍https://www.googleapis.com/auth/analytics.readonly
和https://www.googleapis.com/auth/analytics
。
然而,有關如何使用它以及它提供的方法的使用方式與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。您可以從管理面板中獲取它,方法是點擊要訪問的視圖上的查看設定:
您將這個物件傳遞到請求中:
{
'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'
}
有許多數據可以使用。
Dimensions & Metrics Explorer是一個很棒的工具,可以發現所有選項。
這些術語是Google Analytics的兩個概念。
Dimensions是屬性,例如城市、國家或頁面、引薦路徑或會話持續時間。
Metrics是定量測量,例如使用者數或會話數。
一些指標的例子:
- 獲取頁面視圖
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()
/* 添加自定義程式碼,使用`response` */
}
getData()
defaults
物件將在以下幾個範例中使用展開運算符,這是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月)處於私有測試階段,並且無法公開訪問。請參閱此頁。