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

C#でGoogle Analytics API v3 を利用して、Analyticsの情報を取得するコードを紹介します。
サービス終了に関する注意
Google Universal Analytics はサービスを終了したため、現在はこの記事で紹介しているコードは動作しません。 新しい Google Analytics 4 (GA4) プロパティを利用する必要があります。 GA4プロパティからのデータ取得はこちらの記事を参照してください。

概要

こちらの記事では、Google Data Export APIのバージョン2を利用して、Google Analyticsの集計情報を取得する方法を紹介しました。この記事では新しい、Google Analytics API v3 を利用してGoogle Analyticsの集計情報を取得する手順を紹介します。

Google API Console の設定

最初にGoogle API Consoleの設定をします。

APIの有効化

Google API Console (http://console.developers.google.com)にアクセスします。Google アカウントでログインすると、下図のプロジェクト選択画面が表示されます。プロジェクトが存在しない場合は、[Create project...]ボタンが表示されるので、ボタンをクリックします。(参照)
プロジェクトが表示されている場合は、プロジェクト名をクリックします。


プロジェクトのホーム画面が表示されます。


左側のメニューの[APIと認証]をクリックします。左側にサブメニューが表示されますので、[API]をクリックします。下図の画面が表示されます。


画面下部にスクロールすると、[Advertising API]のセクション内に[Analytics API]がありますので、このリンクをクリックします。


Analytics APIの状態が表示されます。APIが有効になっていることを確認します。


APIが有効になっていない場合は下図のような画面が表示されますので、上部の[APIを有効にする]ボタンをクリックし、APIを有効にします。

認証の設定

続いて認証を設定します。左側のメニューの[APIと認証]をクリックします。左側にサブメニューが表示されるので[認証情報]をクリックします。下図の画面が表示されます。


画面上部の[認証情報を追加]ボタンをクリックします。下図のポップアップメニューが表示されます。一覧から[サービス アカウント]をクリックします。


[サービス アカウントの作成]画面が表示されます。


[P12]のラジオボタンにチェックをします。チェック後[作成]ボタンをクリックします。


作成ができると、秘密鍵のパスフレーズが表示されます。また、秘密鍵のダウンロードが始まります。

注意
Internet Explorer では秘密鍵がダウンロードされない場合があります。うまくダウンロードできない場合は、Google Chromeを利用してアクセスしてサービスアカウントの作成をしてください。


ダウンロードした秘密鍵は保存しておきます。


認証情報画面に作成したサービスアカウントが一覧に表示されています。[メールアドレス]を利用するため、こちらのメールアドレスを控えておきます。
メールアドレスの形式は
012345678901-abcdefghijklmnopqrstuvwxyz012345@developer.gserviceaccount.com~
となります。

Google Analytics の設定

サービスアカウントの追加

Google Analyticsにサービスアカウントでアクセスできるよう設定します。

Google Analyticsにログインします。ログイン後[アナリティクス設定]画面を表示します。アクセスするアカウント、または、プロパティ、ビューの[ユーザー管理]画面を表示します。下図の画面が表示されます。


権限を付与するユーザーの欄に、APIコンソールで作成した、サービスアカウントのメールアドレスを入力します。入力後、下部の[追加]ボタンをクリックします。


アカウントが追加されました。

ビューIDの取得

Google Analyticsの設定画面に戻り、右側の上部コンボボックスで値を取得したい[ビュー]を選択します。選択後[ビュー設定]をクリックします。


ビューの設定画面が表示されます。上部の[ビューID]に数字8桁のIDが表示されますので、控えておきます。

プログラム

事前準備

Google.Apis.Analytics.v3 パッケージの導入

Visual Studioを起動します。


プロジェクトを作成します。今回はWindowsフォームアプリケーションを作成します。


[ツール]メニューの[NuGet パッケージ マネージャー]の[パッケージ マネージャー コンソール]を選択します。


ウィンドウ下部に[パッケージ マネージャー コンソール]が表示されます。


パッケージ マネージャー コンソールに以下のコマンドを入力します。
Install-Package Google.Apis.Analytics.v3
Google.Apis.Analytics.v3 ライブラリ一式がインストールされます。


インストールが正常終了すると、パッケージ マネージャー コンソールに以下の結果が表示されます。


ソリューションエクスプローラで[参照]ノードを開くと、たくさんのライブラリが参照設定に追加されています. #

p12 証明書ファイルの導入

先にGoogle API Console でサービスアカウント作成時にダウンロードした".p12"ファイルをソリューションエクスプローラにドラッグ&ドロップしてソリューションに追加します。下図の例では、ダウンロードしたp12ファイルを"apikey.p12"にリネームしてソリューションに追加しています。


また、追加したp12ファイルのプロパティの[出力ディレクトリにコピー]の値を"常にコピーする"に変更します。

UI

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

コード

下記のコードを記述します。
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 System.Security.Cryptography.X509Certificates;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Analytics.v3;
using Google.Apis.Analytics.v3.Data;
using Google.Apis.Services;

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

    private void button1_Click(object sender, EventArgs e)
    {
      X509Certificate2 certificate = new X509Certificate2(@"apikey.p12", "notasecret", X509KeyStorageFlags.Exportable);

      string serviceAccountEmail = "012345678901-abcdefghijklmnopqrstuvwxyz012345@developer.gserviceaccount.com";
      ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
      {
        Scopes = new[] { AnalyticsService.Scope.Analytics, AnalyticsService.Scope.AnalyticsReadonly }
      }
      .FromCertificate(certificate));

      AnalyticsService service = new AnalyticsService(new BaseClientService.Initializer
      {
        HttpClientInitializer = credential,
        ApplicationName = "sample app",
      });

      string date = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");

      DataResource.GaResource.GetRequest request = service.Data.Ga.Get("ga:00000000", date, date, "ga:pageviews");

      GaData data = request.Execute();

      textBox1.Text += data.Rows[0][0];
    }
  }
}

解説

  X509Certificate2 certificate = new X509Certificate2(@"apikey.p12", "notasecret", X509KeyStorageFlags.Exportable);

  string serviceAccountEmail = "012345678901-abcdefghijklmnopqrstuvwxyz012345@developer.gserviceaccount.com";
  ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
  {
    Scopes = new[] { AnalyticsService.Scope.Analytics, AnalyticsService.Scope.AnalyticsReadonly }
  }
  .FromCertificate(certificate));
上記が認証部分のコードになります。X509Certificate2 オブジェクトを作成します。コンストラクタの引数には、p12証明書ファイル名と、パスフレーズを与えます。
続いて、ServiceAccountCredential オブジェクトを作成します。コンストラクタの引数には、ServiceAccountCredential.Initializerオブジェクトを与えます。ServiceAccountCredential.Initializerオブジェクトのコンストラクタの引数には、サービスアカウントのメールアドレスを与えます。また、ServiceAccountCredential.InitializerオブジェクトのScopesプロパティを設定します。今回は Google Analytics へのアクセスのため"AnalyticsService.Scope.Analytics, AnalyticsService.Scope.AnalyticsReadonly"を設定します。
ServiceAccountCredential オブジェクトのFromCertificateメソッドをX509Certificate2 オブジェクトを引数に与えて、呼び出します。

補足

上記のコードは下記のコードと同じです。
  X509Certificate2 certificate
    = new X509Certificate2(@"apikey.p12", "notasecret", X509KeyStorageFlags.Exportable);

  ServiceAccountCredential.Initializer saci
    = new ServiceAccountCredential.Initializer(serviceAccountEmail);

  saci.Scopes = new[] { AnalyticsService.Scope.Analytics, AnalyticsService.Scope.AnalyticsReadonly };
  saci.FromCertificate(certificate);
  ServiceAccountCredential credential = new ServiceAccountCredential(saci);



下記のコードがAnalyticsからのデータ取得のコードになります。BaseClientService.Initializerオブジェクトを作成し、HttpClientInitializer に先に作成した、ServiceAccountCredential を指定します。また、ApplicationNameプロパティにアプリ名を設定します。AnalyticsService オブジェクトを作成します。AnalyticsServiceオブジェクトのコンストラクタにBaseClientService.Initializerを与えます。

情報の取得は、AnalyticsService クラスのData.Ga.Get()メソッドを呼び出します。第一に引数に値を取得するビューのIDを与えます、ビューのIDはAnalyticsの設定画面で取得した8桁の数値の前に"ga:"を付加した文字列になります。(ビューIDが"01234567"であれば、"ga:01234567"となります。)
第2引数に開始日時、第3引数に終了日時を与えます。第4引数に取得するメトリックスを指定します。今回の例では、現在時刻から1日を引いて前日のPVを取得するコードとしています。
  AnalyticsService service = new AnalyticsService(new BaseClientService.Initializer
  {
    HttpClientInitializer = credential,
    ApplicationName = "sample app",
  });

  string date = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
  DataResource.GaResource.GetRequest request
    = service.Data.Ga.Get("ga:00000000", date, date, "ga:pageviews");

  GaData data = request.Execute();
  textBox1.Text += data.Rows[0][0];

実行結果

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


[button1]をクリックします。下部のテキストボックスに、Google Analytics から取得した値が表示されます。


著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2024-03-24
作成日: 2015-09-30
iPentec all rights reserverd.