6

Coding4Fun - 用 C# 寫 Google Analytics 即時報表

 1 year ago
source link: https://blog.darkthread.net/blog/ga4-report-diy/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

用 C# 寫 Google Analytics 即時報表-黑暗執行緒

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

Fig4_638122407665325110.png

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

Fig5_638122407669186208.png

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

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

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

以下是我的簡要筆記:

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

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

  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 次,我計劃一分鐘查一次,綽綽有餘。

Fig3_638122407675079911.png

簡單用 ASP.NET Core + Vue.js + setInterval 拼裝一下,每分鐘自動更新的 GA4 網站活躍使用者數即時報表就完成囉~ (灑花)

Fig6_638122447560343644.png


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK