Google Analytics (GA) 是分析網站流量的好工具,對於行銷專業人士是火力強大的重兵器,能用來解讀客群背景與來源、觀察訪問行為及路徑、分析行銷活動效果,其中包含一堆行銷專業術語:轉換率、跳出率、區隔... 是搞網路行銷的重要依據。坦白說,以上這些我一個也不懂,除了心血來潮查查大家查哪些關鍵字連過來,其餘只看一張報表 - 網頁瀏覽即時統計,閒來無事開起來,看看現在有多少朋友在線上,都在看哪些文章,除了滿足好奇心,看著項目默默跳動,有以前看磁碟重組畫面的療瘉感... (謎之聲:有病啊你)

好景不常,Google 推出了新版 GA4,舊版分析報表將於 7/1 停止服務。尷尬的是,GA4 拿掉了我唯一在看的「過去 5 分鐘網站活躍使用者」即時報表,性質最相近的即時報表應是下圖右下角「網頁標題與畫面名稱」即時統計,以最近 30 分為單位、每頁五筆方式呈現:

找了很久都沒找到可以切換成舊版全網頁顯示的選項,GA 是要拿來做正事的,這種不正經用法明顯不是他們 TA 的必要功能啊!

那怎麼辦?總不能自己寫一個吧?嘿... 就來自己寫一個吧!

查了一下,GA4 有 Data API,申請手續還算簡便,並有官方的 .NET 程式庫,文件也相當完整,Google Analytics Data API(GA4) Quickstart 差不多有所有你需要知道的細節,照著做很快就能上手。

以下是我的簡要筆記:

  1. 建立 Cloud Platform 專案,啟用 GA Data API 並建立服務帳號,建立後要下載包含私鑰及帳號資訊的 JSON 檔。
    我把它存成 credential.json,放在專案目錄下。

  2. 將服務帳號 (starting-account-*@blogreport-*.iam.gserviceaccount.com) 設成 GA 報表的檢視者。(註:教學說 Read & Analyze 權限,現已更名為 Viewer 參考)

  3. 建立 .NET 專案,參考 GA API 程式庫,程式庫目前是 Beta 版,記得加 --prerelease 參數: dotnet add package Google.Analytics.Data.V1Beta --prerelease

  4. 程式部分有幾個重點:

    • 查出你的 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 阿光

謝謝大大,我會注意的

Post a comment