Google Analytics Reporting API v4 を使う - 認証とデータの取得 - C#

C#でGoogle Analytics Reporting API (v4) を利用して、Google Analyticsの情報を取得するコードを紹介します。

概要

Google Analytics Repporting APIを利用すると、Google Analyticsで集計された情報を外部のプログラムで取得できます。
Google Analytics Repporting APIには複数のバージョンがありますが、この記事では v4 のReporting API を利用して情報を取得するプログラムコードを紹介します。
サービス終了に関する注意
Google Universal Analytics はサービスを終了したため、現在はこの記事で紹介しているコードは動作しません。 新しい Google Analytics 4 (GA4) プロパティを利用する必要があります。 GA4プロパティからのデータ取得はこちらの記事を参照してください。

事前準備

Google Analytics Reporting APIの有効化

Google Developer Console で Google Analytics Reporting API を有効にします。手順はこちらの記事を参照してください。

認証用の秘密鍵のダウンロード

Google Developer Console でGoogle Analytics Reporting API にアクセスするサービスアカウントの認証用の秘密鍵をダウンロードします。
ダウンロードの手順はこちらの記事を参照してください。

Google Analytics へのユーザー追加

Google Analyticsにサービスアカウントを追加する手順はこちらの記事を参照してください。
Google Analyticsにユーザーを追加する一般的な手順はこちらの記事を参照してください。

Google.Apis.AnalyticsReporting.v4 の導入

C#のプロジェクトを作成し、プロジェクトにGoogle.Apis.AnalyticsReporting.v4 をインストールします。インストール手順はこちらの記事を参照してください。

秘密鍵の配置

先にダウンロードしたJSON形式の秘密鍵ファイルをソリューションエクスプローラに追加します。ファイルのプロパティを表示し[出力ディレクトリにコピー]の値を"常にコピーする"に設定します。

UI

Windowsフォームアプリケーションを作成し、下図のフォームを作成します。

コード

下記のコードを記述します。コードの大部分は、button1 のclickイベントの実装になります。
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.Apis.AnalyticsReporting.v4;
using Google.Apis.AnalyticsReporting.v4.Data;
using Google.Apis.Auth.OAuth2;
using System.IO;

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

    private void Button1_Click(object sender, EventArgs e)
    {
      FileStream stream = new FileStream("ipentectest-0f26d0134ab7.json", FileMode.Open, FileAccess.Read);
      GoogleCredential credential = GoogleCredential.FromStream(stream).CreateScoped(AnalyticsReportingService.Scope.AnalyticsReadonly);

      AnalyticsReportingService.Initializer initializer = new AnalyticsReportingService.Initializer();
      initializer.HttpClientInitializer = credential;
      initializer.ApplicationName = "app";
      AnalyticsReportingService service = new AnalyticsReportingService(initializer);

      GetReportsRequest request = new GetReportsRequest();

      ReportRequest report_request = new ReportRequest();
      report_request.ViewId = "00000000";
      report_request.Metrics = new[] { new Metric { Expression = "ga:pageviews" } };
      report_request.Dimensions = new[] { new Dimension { Name = "ga:date" } };
      report_request.DateRanges = new[] { new DateRange { StartDate = "2010-08-01", EndDate = "2010-08-14" } };
      report_request.OrderBys = new[] { new OrderBy { FieldName = "ga:date", SortOrder = "DESCENDING" } };

      request.ReportRequests = new[] { report_request };

      ReportsResource.BatchGetRequest batchRequest = service.Reports.BatchGet(request);
      GetReportsResponse response = batchRequest.Execute();

      foreach (var x in response.Reports.First().Data.Rows)
      {
        textBox1.Text += string.Join(", ", x.Dimensions) + "   " + string.Join(", ", x.Metrics.First().Values) + "\r\n";
      }
    }

  }
}

解説

button1のClickイベントの最初の下記コードは、秘密鍵のJSONファイルを読み込みGoogleCredential オブジェクトを作成します。
  FileStream stream = new FileStream("ipentectest-0f26d0134ab7.json", FileMode.Open, FileAccess.Read);
  GoogleCredential credential = GoogleCredential.FromStream(stream).CreateScoped(AnalyticsReportingService.Scope.AnalyticsReadonly);

下記コードで、AnalyticsReportingService を作成します。
  AnalyticsReportingService.Initializer initializer = new AnalyticsReportingService.Initializer();
  initializer.HttpClientInitializer = credential;
  initializer.ApplicationName = "app";
  AnalyticsReportingService service = new AnalyticsReportingService(initializer);

Google Analyticsへのリクエストを作成します。ViewIdにはレポートを取得するビューIDを指定します。Metrics には取得したい値を設定します。今回はページビュー数を取得するので "ga:pageviews" を設定します。Dimensionsには集計単位を指定します。今回は日付ごとにページビューを表示するので、"ga:date" を設定します。DateRanges には取得する期間を設定します。今回は 2010年8月1日から2010年8月14日の範囲とします。
  GetReportsRequest request = new GetReportsRequest();

  ReportRequest report_request = new ReportRequest();
  report_request.ViewId = "00000000";
  report_request.Metrics = new[] { new Metric { Expression = "ga:pageviews" } };
  report_request.Dimensions = new[] { new Dimension { Name = "ga:date" } };
  report_request.DateRanges = new[] { new DateRange { StartDate = "2010-08-01", EndDate = "2010-08-14" } };
  report_request.OrderBys = new[] { new OrderBy { FieldName = "ga:date", SortOrder = "DESCENDING" } };

  request.ReportRequests = new[] { report_request };

AnalyticsReportingService オブジェクトのReports.BatchGet メソッドを呼び出しレポートを取得します。引数には先に準備した GetReportsRequest オブジェクトを与えます。取得したBatchGetRequestのExecuteメソッドを実行しレポートのレスポンスを取得します。
  ReportsResource.BatchGetRequest batchRequest = service.Reports.BatchGet(request);
  GetReportsResponse response = batchRequest.Execute();

GetReportsResponse オブジェクトの情報を読み出しテキストボックスに表示します。
  foreach (var x in response.Reports.First().Data.Rows)
  {
    textBox1.Text += string.Join(", ", x.Dimensions) + "   " + string.Join(", ", x.Metrics.First().Values) + "\r\n";
  }

実行結果

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


テキストボックスに日別のページビューの値が表示されます。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2019-08-06
iPentec all rights reserverd.