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ứcgoogleapis
gó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ó
analytics
từ 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.
- Các biến môi trường
- Thêm người dùng vào Google Analytics
- Nhập thư viện Google
- Xác định phạm vi
- API báo cáo Google Analytics
- Tạo JWT
- Thực hiện một yêu cầu
- Số liệu
- Mã chung
- Nhận số lượng phiên hôm nay
- 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)
- Nhận số lượng phiên hôm qua
- Nhận số phiên trong 30 ngày qua
- Nhận các trình duyệt được sử dụng trong 30 ngày qua
- Nhận số lượng khách truy cập bằng cách sử dụng Chrome
- Nhận các phiên theo nguồn lưu lượng truy cập
- API thời gian thực của Google Analytics
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_email
vàprivate_key
cá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_email
giá 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.
Và thêm email bạn tìm thấy trongclient_email
khóa trong tệp JSON:
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ỏigoogleapis
thư viện (nếu không, chúng tôi cần gọigoogle.google
và 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ệuhttps://www.googleapis.com/auth/analytics
để xem và quản lý dữ liệuhttps://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ềnhttps://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.readonly
thay 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.readonly
vàhttps://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_id
chứ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:
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ó đượcstart-date
: xác định ngày bắt đầu cho báo cáoend-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 trang
ga:pageviews
- có được những người dùng duy nhất
ga:users
- nhận được các phiên
ga:sessions
- nhận được các tìm kiếm không phải trả tiền
ga: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êmfilters
bấ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:
- Giới thiệu về trình quản lý gói npm
- Giới thiệu về Node.js
- Yêu cầu HTTP bằng Axios
- Nơi lưu trữ ứng dụng Node.js
- Tương tác với API Google Analytics bằng Node.js
- Trình chạy gói nút npx
- Hướng dẫn package.json
- Npm cài đặt các gói ở đâu?
- Cách cập nhật Node.js
- Cách sử dụng hoặc thực thi một gói được cài đặt bằng npm
- Tệp package-lock.json
- Phiên bản ngữ nghĩa sử dụng npm
- Bạn có nên cam kết thư mục node_modules cho Git không?
- Cập nhật tất cả các phụ thuộc Node lên phiên bản mới nhất của chúng
- Phân tích cú pháp JSON với Node.js
- Tìm phiên bản đã cài đặt của gói npm
- Luồng Node.js
- Cài đặt phiên bản cũ hơn của gói npm
- Lấy thư mục hiện tại trong Node
- Cách đăng nhập một đối tượng trong Node
- Thể hiện chức năng từ tệp Node bằng cách sử dụng xuất
- Sự khác biệt giữa Node và Browser
- Thực hiện yêu cầu HTTP POST bằng Node
- Nhận dữ liệu nội dung yêu cầu HTTP bằng Node
- Bộ đệm nút
- Sơ lược về lịch sử Node.js
- Cách cài đặt Node.js
- Bạn cần biết bao nhiêu JavaScript để sử dụng Node?
- Cách sử dụng Node.js REPL
- Nút, chấp nhận các đối số từ dòng lệnh
- Xuất ra dòng lệnh bằng Node
- Chấp nhận đầu vào từ dòng lệnh trong Node
- Gỡ cài đặt gói npm với `` npm gỡ cài đặt ''
- gói npm toàn cầu hoặc cục bộ
- npm phụ thuộc và devDependencies
- Vòng lặp sự kiện Node.js
- Hiểu process.nextTick ()
- Hiểu setIm Instant ()
- Bộ phát sự kiện nút
- Xây dựng một máy chủ HTTP
- Thực hiện các yêu cầu HTTP với Node
- Mô-đun Node fs
- Yêu cầu HTTP trong Node bằng Axios
- Đọc tệp bằng Node
- Đường dẫn tệp nút
- Viết tệp bằng Node
- Số liệu thống kê về tệp nút
- Làm việc với bộ mô tả tệp trong Node
- Làm việc với các thư mục trong Node
- Mô-đun đường dẫn nút
- Mô-đun Node http
- Sử dụng WebSockets với Node.js
- Những điều cơ bản về cách làm việc với MySQL và Node
- Xử lý lỗi trong Node.js
- Hướng dẫn Pug
- Cách đọc các biến môi trường từ Node.js
- Cách thoát khỏi chương trình Node.js
- Mô-đun hệ điều hành Node
- Mô-đun sự kiện Node
- Nút, sự khác biệt giữa phát triển và sản xuất
- Cách kiểm tra xem tệp có tồn tại trong Node.js hay không
- Cách tạo tệp trống trong Node.js
- Cách xóa tệp bằng Node.js
- Cách lấy ngày cập nhật cuối cùng của tệp bằng Node.js
- Cách xác định một ngày có phải là hôm nay trong JavaScript hay không
- Cách ghi một đối tượng JSON vào tệp trong Node.js
- Tại sao bạn nên sử dụng Node.js trong dự án tiếp theo của mình?
- Chạy một máy chủ web từ bất kỳ thư mục nào
- Cách sử dụng MongoDB với Node.js
- Sử dụng Công cụ dành cho nhà phát triển của Chrome để gỡ lỗi ứng dụng Node.js
- Pnpm là gì?
- Danh sách tùy chọn Node.js Runtime v8
- Cách khắc phục lỗi "Thiếu quyền ghi" khi sử dụng npm
- Cách bật Mô-đun ES trong Node.js
- Cách sinh ra một quy trình con với Node.js
- Cách lấy cả nội dung được phân tích cú pháp và nội dung thô trong Express
- Cách xử lý tải lên tệp trong Node.js
- Sự phụ thuộc ngang hàng trong một mô-đun Node là gì?
- Cách ghi tệp CSV với Node.js
- Cách đọc tệp CSV với Node.js
- Mô-đun lõi Node
- Tăng số lượng nhiều thư mục cùng một lúc bằng Node.js
- Cách in canvas thành URL dữ liệu
- Cách tạo và lưu hình ảnh với Node.js và Canvas
- Cách tải xuống hình ảnh bằng Node.js
- Cách đổi tên hàng loạt tệp trong Node.js
- Cách lấy tên của tất cả các tệp trong một thư mục trong Node
- Cách sử dụng các lời hứa và chờ đợi với các hàm dựa trên cuộc gọi lại của Node.js
- Cách kiểm tra một gói npm cục bộ
- Cách kiểm tra phiên bản Node.js hiện tại khi chạy
- Cách sử dụng Sequelize để tương tác với PostgreSQL
- Cung cấp trang HTML bằng Node.js
- Cách giải quyết lỗi `use.pump không phải là hàm` trong Node.js