Web検索はbingがおすすめ!

Google Analytics Reporting API v4 を用いて日別のページビュー数を取得する - C#

Google Analytics Reporting API v4 を用いて日別のページビュー数を取得するコードを紹介します。

事前準備

Google Analyticsへのサービスアカウントの追加や認証キーの取得、ライブラリの導入などが必要です。
詳しい手順はこちらの記事を参照してください。
サービス終了に関する注意
Google Universal Analytics はサービスを終了したため、現在はこの記事で紹介しているコードは動作しません。 新しい Google Analytics 4 (GA4) プロパティを利用する必要があります。 GA4プロパティからのデータ取得はこちらの記事を参照してください。

プログラム

UI

下図のフォームを作成します。利用するのは[button2]のみです。

コード

下記のコードを記述します。button2のクリックイベントを実装します。
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 button2_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() {
        HttpClientInitializer = credential,
        ApplicationName = "app"
      };

      AnalyticsReportingService service = new AnalyticsReportingService(initializer);

      GetReportsRequest request = new GetReportsRequest();

      ReportRequest report_request = new ReportRequest()
      {
        ViewId = "(Google AnalytivcsのビューのID)",
        Metrics = new[] { new Metric { Expression = "ga:pageviews" } },
        Dimensions = new[] { new Dimension { Name = "ga:date" } },
        DateRanges = new[] { new DateRange { StartDate = "2010-01-01", EndDate = "2010-01-15" } },
        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";
      }
    }
  }
}

解説

認証のための GoogleCredential オブジェクトを作成します。認証用のJSONファイルを参照する、FileStreamオブジェクトを作成します。
作成したFileStreamオブジェクトを GoogleCredential クラスの FromStream メソッドの引数に与えて GoogleCredential オブジェクトを作成します。

  FileStream stream = new FileStream("ipentectest-0f26d0134ab7.json", FileMode.Open, FileAccess.Read);
  GoogleCredential credential = GoogleCredential.FromStream(stream).CreateScoped(AnalyticsReportingService.Scope.AnalyticsReadonly);

AnalyticsReportingService.Initializer オブジェクトを作成します。
作成したAnalyticsReportingService.Initializer オブジェクトのHttpClientInitializer に先に準備したGoogleCredential を代入します。
また、ApplicationName プロパティにアクセスするこのアプリケーションの名称を設定します。
作成したAnalyticsReportingService.InitializerをAnalyticsReportingServiceのコンストラクタに与えて、AnalyticsReportingService オブジェクトを作成します。
  AnalyticsReportingService.Initializer initializer = new AnalyticsReportingService.Initializer() {
    HttpClientInitializer = credential,
    ApplicationName = "app"
  };

  AnalyticsReportingService service = new AnalyticsReportingService(initializer);

GetReportsRequest, ReportRequest オブジェクトを作成します。ReportRequest のメンバ変数に取得するデータの条件を設定します。
ViewId に取得するビューのIDを、Metrics に取得するデータの種類、Dimensions に取得するデータのディメンジョン、DateRangesに取得するデーターの日付範囲、 OrderBys に取得するデータのソート順を設定します。
今回は日別のPVを取得しますので、Metricに"ga:pageviews" を設定し、Dimensions に "ga:date"を設定します。
GetReportsRequest オブジェクトのReportRequestsプロパティに作成した、ReportRequest オブジェクトを代入します。
  GetReportsRequest request = new GetReportsRequest();

  ReportRequest report_request = new ReportRequest()
  {
    ViewId = "(Google AnalytivcsのビューのID)",
    Metrics = new[] { new Metric { Expression = "ga:pageviews" } },
    Dimensions = new[] { new Dimension { Name = "ga:date" } },
    DateRanges = new[] { new DateRange { StartDate = "2010-01-01", EndDate = "2010-01-15" } },
    OrderBys = new[] { new OrderBy { FieldName = "ga:date", SortOrder = "DESCENDING" }
  };
  request.ReportRequests = new[] { report_request };

ReportsResource.BatchGetRequestオブジェクトを作成し、Execute() メソッドを呼び出しデータを取得します。 取得したデータは、GetReportsResponse オブジェクトに格納されます。
  ReportsResource.BatchGetRequest batchRequest = service.Reports.BatchGet(request);
  GetReportsResponse response = batchRequest.Execute();

取得した情報は、GetReportsResponse オブジェクトのRepostsプロパティに格納されています。
response.Reports.First().Data.Rows をforeachループで取得し、Dimenstions と、Values の値をテキストボックスに表示します。
  foreach (var x in response.Reports.First().Data.Rows) {
    textBox1.Text += string.Join(", ", x.Dimensions) + "   " + string.Join(", ", x.Metrics.First().Values) + "\r\n";
  }

実行結果

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


[button2]をクリックします。下図の結果が表示されます。Google Analyticsから日ごとのページビューを取得して、 値をテキストボックスに表示します。

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