Google Analytics Data API を用いてGA4プロパティに認証しデータを取得する - C#

Google Analytics Data API を用いてGA4プロパティに認証しデータを取得するコードを紹介します。

事前準備

Google Analytics Data APIを有効にする

Google Cloud Cosole にアクセスして、Google Analytics Data APIを有効にする必要があります。手順についてはこちらの記事を参照してください。

Google API のサービスアカウントを作成する

Google APIを利用するサービスアカウントを作成します。サービスアカウントの作成手順はこちらの記事を参照してください。

Google API のサービスアカウントのキーを取得する

Google APIのサービスアカウントの認証用のキーを取得します。キーの作成、取得手順はこちらの記事を参照してください。今回はJSON形式のキーを取得します。

Google Analytics にサービスアカウントを追加する

Google Analyticsの設定画面でアクセスできるユーザーに作成したサービスアカウントのユーザーを追加します。Google Analyticsにサービスアカウントを追加する手順は こちらの記事を参照してください。

プログラム

Windows Formアプリケーションを作成します。

事前準備: Google Analytics Data API ライブラリのインストール

作成したプロジェクトにGoogle Analytics Data APIライブラリをインストールします。インストール手順はこちらの記事を参照して下さい。

事前準備: Google Analytics v4 プロパティのIDの確認

コードに記述する、Google Analytics v4 プロパティのIDを調べます。
Google Analytics の管理画面にアクセスし、Google Analytics V4の[プロパティ設定]画面を表示します。画面の右上に[プロパティID]の項目があります。 IDの数値をメモしておきます。プロパティIDの右側のボタンをクリックするとクリップボードにプロパティIDの値をコピーできます。

UI

下図のフォームを作成します。
ボタンと複数行のテキストボックスを配置します。

キーファイル

先の手順でダウンロードしたGoogle APIのサービスアカウントのキーファイルをソリューションエクスプローラーのプロジェクトディレクトリに配置します。


また、ビルド先にキーのファイルが出力されるように、ファイルのプロパティの[出力ディレクトリにコピー]の値を "常にコピーする" に設定します。

コード

下記コードを記述します。
ボタンのクリックイベントを実装します。PropertyId に代入する値は、先に確認した、Google Analytics V4プロパティのIDを設定します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Google.Analytics.Data.V1Beta;
using Google.Api.Gax;

namespace QuickStart
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void button1_Click(object sender, EventArgs e)
    {
      BetaAnalyticsDataClient aadc;

      BetaAnalyticsDataClientBuilder aadcb = new BetaAnalyticsDataClientBuilder();
      aadcb.CredentialsPath = "ipentectest-47441b548b72.json";
      aadc = aadcb.Build();

      RunReportRequest request = new RunReportRequest();
      request.Property = "properties/(Google Analytics v4 のプロパティID)";
      
      Dimension dim = new Dimension();
      dim.Name = "Date";
      request.Dimensions.Add(dim);

      Metric met = new Metric();
      met.Name = "screenPageViews";
      request.Metrics.Add(met);

      DateRange dr = new DateRange();
      dr.StartDate = "2021-01-01";
      dr.EndDate = "2021-01-07";
      request.DateRanges.Add(dr);

      RunReportResponse response = aadc.RunReport(request);

      foreach (Row r in response.Rows) {
        textBox1.Text += string.Format("{0}, {1}\r\n", r.DimensionValues[0].Value, r.MetricValues[0].Value);
      }
    }

  }
}

解説

BetaAnalyticsDataClient オブジェクトを作成します。BetaAnalyticsDataClientBuilder オブジェクトを作成し、作成した BetaAnalyticsDataClientBuilder オブジェクトのCredentialsPathに サービスアカウントのキーファイルのパスを設定します。設定後、BetaAnalyticsDataClientBuilder オブジェクトの Build() メソッドを呼び出すと、 BetaAnalyticsDataClient オブジェクトを作成できます。
    BetaAnalyticsDataClient aadc;

    BetaAnalyticsDataClientBuilder aadcb = new BetaAnalyticsDataClientBuilder();
    aadcb.CredentialsPath = "ipentectest-47441b548b72.json";
    aadc = aadcb.Build();

RunReportRequest オブジェクトを作成し、リクエストの情報を作成します。
RunReportRequest オブジェクトの Property プロパティに取得するGoogle AnalyticsプロパティのIDを設定します。IDの形式は properties/(Google Analytics v4 のプロパティID) の文字列の形式になります。(例として "properties/123456789" といった文字列になります。)

Dimensions プロパティに取得するDimension を設定します。Metrics プロパティに取得するMetric、DateRanges プロパティにデータを取得する日付範囲を設定します。
今回のコードでは Dimension に "Date"、Metric に "screenPageViews"、 DateRangeの範囲は 2021年1月1日から、2021年1月7日とします。
日別のページビュー数を取得するリクエストになります。
 
    RunReportRequest request = new RunReportRequest();
    request.Property = "properties/(Google Analytics v4 のプロパティID)";
      
    Dimension dim = new Dimension();
    dim.Name = "Date";
    request.Dimensions.Add(dim);

    Metric met = new Metric();
    met.Name = "screenPageViews";
    request.Metrics.Add(met);

    DateRange dr = new DateRange();
    dr.StartDate = "2021-01-01";
    dr.EndDate = "2021-01-07";
    request.DateRanges.Add(dr);

AlphaAnalyticsDataClient オブジェクトの RunReport メソッドを呼び出します。第一引数に作成したRunReportRequest を与えます。
リクエストに設定した情報が取得され、結果が、RunReportResponse オブジェクトに戻ります。
    RunReportResponse response = aadc.RunReport(request);

Google Analytics から取得した情報がRunReportの戻り値の RunReportResponse オブジェクトに格納されています。
Rows に各行の結果が代入されていますので、foreach でループ処理を実行し、それぞれの値をテキストボックスに表示します。
    foreach (Row r in response.Rows) {
      textBox1.Text += string.Format("{0}, {1}\r\n", r.DimensionValues[0].Value, r.MetricValues[0].Value);
    }

補足:オブジェクト初期化子を利用した書式

BetaAnalyticsDataClient オブジェクトの作成や、RunReportRequest オブジェクトの作成時にオブジェクト初期化子を利用するとコードをシンプルに記述できます。
オブジェクト初期化子を利用したコードは以下になります。
    private void button2_Click(object sender, EventArgs e)
    {
      BetaAnalyticsDataClient aadc = new BetaAnalyticsDataClientBuilder()
      {
        CredentialsPath = "ipentectest-47441b548b72.json"
      }.Build();

      RunReportRequest request = new RunReportRequest()
      {
        Property = "properties/(Google Analytics v4 のプロパティID)",
        Dimensions = { new Dimension() { Name = "Date" } },
        Metrics = { new Metric() { Name = "screenPageViews" } },
        DateRanges = { new DateRange() { StartDate = "2021-01-01", EndDate = "2021-01-07" } }
      };

      RunReportResponse response = aadc.RunReport(request);

      foreach (Row r in response.Rows) {
        textBox1.Text += string.Format("{0}, {1}\r\n", r.DimensionValues[0].Value, r.MetricValues[0].Value);
      }
    }

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。
下図の結果(一例)がテキストボックスに表示されます。
Google Analytics v4プロパティのページビューの数値が取得できます。


参考: Google Analytics Data API Alpha版のコード

Google Analytics Data APIのAlpha版のライブラリを利用した場合は以下のコードになります。

コード

下記コードを記述します。
ボタンのクリックイベントを実装します。PropertyId に代入する値は、先に確認した、Google Analytics V4プロパティのIDを設定します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Google.Analytics.Data.V1Alpha;
using Google.Api.Gax;

namespace QuickStart
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    }

    private void button1_Click(object sender, EventArgs e)
    {
      AlphaAnalyticsDataClient aadc;

      AlphaAnalyticsDataClientBuilder aadcb = new AlphaAnalyticsDataClientBuilder();
      aadcb.CredentialsPath = "ipentectest-47441b548b72.json";
      aadc = aadcb.Build();

      RunReportRequest request = new RunReportRequest();
      request.Entity = new Entity();
      request.Entity.PropertyId = "(Google Analytics v4 プロパティのID)";
      //request.Entity.PropertyId = "21310"; //具体例
      
      Dimension dim = new Dimension();
      dim.Name = "Date";
      request.Dimensions.Add(dim);

      Metric met = new Metric();
      met.Name = "screenPageViews";
      request.Metrics.Add(met);

      DateRange dr = new DateRange();
      dr.StartDate = "2021-01-01";
      dr.EndDate = "2021-01-07";
      request.DateRanges.Add(dr);

      RunReportResponse response = aadc.RunReport(request);

      foreach (Row r in response.Rows) {
        textBox1.Text += string.Format("{0}, {1}\r\n", r.DimensionValues[0].Value, r.MetricValues[0].Value);
      }
    }
  }
}

解説

AlphaAnalyticsDataClientオブジェクトを作成します。AlphaAnalyticsDataClientBuilder オブジェクトを作成し、作成した AlphaAnalyticsDataClientBuilder オブジェクトのCredentialsPathに サービスアカウントのキーファイルのパスを設定します。設定後、AlphaAnalyticsDataClientBuilder オブジェクトの Build() メソッドを呼び出すと、 AlphaAnalyticsDataClientオブジェクトを作成できます。
    AlphaAnalyticsDataClient aadc;

    AlphaAnalyticsDataClientBuilder aadcb = new AlphaAnalyticsDataClientBuilder();
    aadcb.CredentialsPath = "ipentectest-47441b548b72.json";
    aadc = aadcb.Build();

RunReportRequest オブジェクトを作成し、リクエストの情報を作成します。
RunReportRequest オブジェクトの Dimensions プロパティに取得するDimension を設定します。Metrics プロパティに取得するMetric、DateRanges プロパティにデータを取得する日付範囲を設定します。
今回のコードでは Dimension に "Date"、Metric に "screenPageViews"、 DateRangeの範囲は 2021年1月1日から、2021年1月7日とします。
日別のページビュー数を取得するリクエストになります。
 
      RunReportRequest request = new RunReportRequest();
      request.Entity = new Entity();
      request.Entity.PropertyId = "(Google Analytics v4 プロパティのID)";
      
      Dimension dim = new Dimension();
      dim.Name = "Date";
      request.Dimensions.Add(dim);

      Metric met = new Metric();
      met.Name = "screenPageViews";
      request.Metrics.Add(met);

      DateRange dr = new DateRange();
      dr.StartDate = "2021-01-01";
      dr.EndDate = "2021-01-07";
      request.DateRanges.Add(dr);

AlphaAnalyticsDataClient オブジェクトの RunReport メソッドを呼び出します。第一引数に作成したRunReportRequest を与えます。
リクエストに設定した情報が取得され、結果が、RunReportResponse オブジェクトに戻ります。
    RunReportResponse response = aadc.RunReport(request);

Google Analytics から取得した情報がRunReportの戻り値の RunReportResponse オブジェクトに格納されています。
Rows に各行の結果が代入されていますので、foreach でループ処理を実行し、それぞれの値をテキストボックスに表示します。
    foreach (Row r in response.Rows) {
      textBox1.Text += string.Format("{0}, {1}\r\n", r.DimensionValues[0].Value, r.MetricValues[0].Value);
    }

補足:オブジェクト初期化子を利用した書式

AlphaAnalyticsDataClient オブジェクトの作成や、RunReportRequest オブジェクトの作成時にオブジェクト初期化子を利用するとコードをシンプルに記述できます。
オブジェクト初期化子を利用したコードは以下になります。
    private void button2_Click(object sender, EventArgs e)
    {
      AlphaAnalyticsDataClient aadc = new AlphaAnalyticsDataClientBuilder()
      {
        CredentialsPath = "ipentectest-47441b548b72.json"
      }.Build();

      RunReportRequest request = new RunReportRequest()
      {
        Entity = new Entity() { PropertyId = "(Google Analytics v4 プロパティのID)" },
        Dimensions = { new Dimension() { Name = "Date" } },
        Metrics = { new Metric() { Name = "screenPageViews" } },
        DateRanges = { new DateRange() { StartDate = "2021-01-01", EndDate = "2021-01-07" } }
      };

      RunReportResponse response = aadc.RunReport(request);

      foreach (Row r in response.Rows) {
        textBox1.Text += string.Format("{0}, {1}\r\n", r.DimensionValues[0].Value, r.MetricValues[0].Value);
      }
    }
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2021-03-04
iPentec all rights reserverd.