Coding4Fun - 用 C# 寫 Google Analytics 即時報表
3 |
Google Analytics (GA) 是分析網站流量的好工具,對於行銷專業人士是火力強大的重兵器,能用來解讀客群背景與來源、觀察訪問行為及路徑、分析行銷活動效果,其中包含一堆行銷專業術語:轉換率、跳出率、區隔... 是搞網路行銷的重要依據。坦白說,以上這些我一個也不懂,除了心血來潮查查大家查哪些關鍵字連過來,其餘只看一張報表 - 網頁瀏覽即時統計,閒來無事開起來,看看現在有多少朋友在線上,都在看哪些文章,除了滿足好奇心,看著項目默默跳動,有以前看磁碟重組畫面的療瘉感... (謎之聲:有病啊你)
好景不常,Google 推出了新版 GA4,舊版分析報表將於 7/1 停止服務。尷尬的是,GA4 拿掉了我唯一在看的「過去 5 分鐘網站活躍使用者」即時報表,性質最相近的即時報表應是下圖右下角「網頁標題與畫面名稱」即時統計,以最近 30 分為單位、每頁五筆方式呈現:
找了很久都沒找到可以切換成舊版全網頁顯示的選項,GA 是要拿來做正事的,這種不正經用法明顯不是他們 TA 的必要功能啊!
那怎麼辦?總不能自己寫一個吧?嘿... 就來自己寫一個吧!
查了一下,GA4 有 Data API,申請手續還算簡便,並有官方的 .NET 程式庫,文件也相當完整,Google Analytics Data API(GA4) Quickstart 差不多有所有你需要知道的細節,照著做很快就能上手。
以下是我的簡要筆記:
建立 Cloud Platform 專案,啟用 GA Data API 並建立服務帳號,建立後要下載包含私鑰及帳號資訊的 JSON 檔。
我把它存成 credential.json,放在專案目錄下。將服務帳號 (starting-account-*@blogreport-*.iam.gserviceaccount.com) 設成 GA 報表的檢視者。(註:教學說 Read & Analyze 權限,現已更名為 Viewer 參考)
建立 .NET 專案,參考 GA API 程式庫,程式庫目前是 Beta 版,記得加 --prerelease 參數:
dotnet add package Google.Analytics.Data.V1Beta --prerelease
程式部分有幾個重點:
- 查出你的 GA4 Property Id (9 碼數字,查詢方法)
- 設定環境變數 GOOGLE_APPLICATION_CREDENTIALS 指向步驟 1 下載的 JSON 檔,我寫了程式查路徑自動設定
- 指定 Dimensions (維度) 及 Metrics (指標),文件上有即時報表的可用維度及指標,我要查詢的維度是 unifiedScreenName (網頁標題及畫面名稱),指標是 activeUsers (活躍使用者)。
- 組好 Request 參數,呼叫程式庫元件的 RunRealtimeReport(),取回結果,搞定。
程式範例如下:
using Google.Analytics.Data.V1Beta; using System; namespace AnalyticsSamples { public class ReportApi { public static IEnumerable<string> RunRealtimeReport(string propertyId) { /** * TODO(developer): Uncomment this variable and replace with your * Google Analytics 4 property ID before running the sample. */ // Using a default constructor instructs the client to use the credentials // specified in GOOGLE_APPLICATION_CREDENTIALS environment variable. Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Path.Combine(Path.GetDirectoryName(Environment.ProcessPath)!, "credential.json")); BetaAnalyticsDataClient client = BetaAnalyticsDataClient.Create(); // Initialize request argument(s) var request = new RunRealtimeReportRequest { Property = "properties/" + propertyId, Dimensions = { new Dimension{ Name="unifiedScreenName"}, }, Metrics = { new Metric{ Name="activeUsers"}, } }; // Make the request var response = client.RunRealtimeReport(request); foreach(Row row in response.Rows) { yield return $"{row.DimensionValues[0].Value}\t{row.MetricValues[0].Value}"; } } } }
要留意,GA Data API 有呼叫頻率限制,但上限很寬,即時報表查詢以 Property Id 統計,每天不能超過 25,000 次,每小時不能超過 5000 次,同時的 Request 數不能超過 10 次,每小時錯誤次數不能超過 10 次,我計劃一分鐘查一次,綽綽有餘。
簡單用 ASP.NET Core + Vue.js + setInterval 拼裝一下,每分鐘自動更新的 GA4 網站活躍使用者數即時報表就完成囉~ (灑花)
Example of writing a GA4 realtime report with GA data api and c#.
Comments
# by 阿光
黑暗大大,最近有這個需求了 我想寫一個ConsoleMode,裡面就是每五分鐘拉一次GA的RealTimeReport,然後把資訊存到Redis, 前端網頁負責讀取Redis,一樣是setInterval頻率性固定取得Redis 這樣也是可以嗎?
# by Jeffrey
to 阿光,沒什麼問題,我也有想過用這種方長期監看變化。但有個地方要注意,當成單一時點的數字 OK,但 5 分鐘抓一次的資料不能拿來累加,因為它是最近 30 分鐘的統計
# by 阿光
謝謝大大,我會注意的