目次

Web検索はbingがおすすめ!

Google Analytics Data Export API を使う - Analyticsプロファイルの取得 - C#

Google Analytics Data Export APIを用いてGoogle Analyticsの値を取得します。
今回はGoogle Analyticsの値を取得するに先立ち、Googleアカウントに結び付けられているAnalyticsプロファイルを取得するコードを紹介します。
サービス終了に関する注意
Google Universal Analytics はサービスを終了したため、現在はこの記事で紹介しているコードは動作しません。 新しい Google Analytics 4 (GA4) プロパティを利用する必要があります。 GA4プロパティからのデータ取得はこちらの記事を参照してください。
注意
下記のコードを実行すると、"GDataRequestException"例外が発生し"Execution of request failed: https://www.google.com/analytics/feeds/accounts/default" のメッセージが表示されます。
これはアカウントを列挙するAPIが利用できなくなったためです。

補足

Google Data Analytics v2.4 のURL
https://www.googleapis.com/analytics/v2.4/management/accounts
を用いると、"GDataRequestException"例外は発生しませんがQueryメソッドで取得できるAccountFeedがnullになってしまいます。取得されるXMLの形式が違うためClient Libraryでうまくパースできないためと考えられます。

プロファイルの取得方法

プロファイルのIDは列挙できませんが、Google Analyticsの設定画面からプロファイルのIDは確認できます。
[アナリティクス設定]ボタンを押し、[アカウントの管理]画面でアカウント名をクリックし、

アカウント画面でサイト名をクリックし、

プロファイル一覧画面でプロファイル名をクリックします。


プロファイル画面が表示されます。上部のタブの[プロファイル設定]タブをクリックします。


プロファイル設定画面が表示されます。画面の[プロファイルID]に番号が表示されており、こちらがプロファイルのID番号になります。ID番号の先頭に"ga:"を付加した文字列をquery.Idsに指定します。


プロファイルIDが"12345678"ならば、Idsは"ga:12345678"とします。

以前の記事

準備

Google Data API SDKをインストールします。インストール方法はこちらの記事を参照してください。

UI

下図のUIを準備します。TextBoxを2つ、Buttonを1つ、ListViewを1つ配置します。ListViewのViewプロパティはDetailsに設定し、Columnsに2つ要素を追加します。(2列にします。)

コード記述前の準備

コードを記述する前に、Google Data API のライブラリの参照を追加します。
ソリューションエクスプローラの[参照設定]ノードで右クリックしポップアップメニューを表示します。メニューの[参照の追加]を選択します。


参照ダイアログが表示されます。Google Data API SDKディレクトリの(デフォルトでは"C:\Program Files (x86)\Google\Google Data API SDK\Redist")ライブラリを参照に追加します。

今回は
  • Google.GData.Analytics.dll
  • Google.GData.Client.dll
  • Google.GData.Extensions.dll
を追加します。

ソリューションエクスプローラの参照設定ノードににライブラリが追加されました。

コード

ButtonのClickイベントにコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Google.GData.Client;
using Google.GData.Analytics;
using Google.GData.Extensions;

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

    private void button_GetProfile_Click(object sender, EventArgs e)
    {
      string userName = textBox_User.Text;
      string passWord = textBox_Pass.Text;

      AccountQuery query = new AccountQuery();
      AnalyticsService service = new AnalyticsService("AnalyticsSampleApp(iPentec)");
      if (!string.IsNullOrEmpty(userName)) {
        service.setUserCredentials(userName, passWord);
      }

      AccountFeed accountFeed = service.Query(query);
      foreach (AccountEntry entry in accountFeed.Entries) {
        ListViewItem item = new ListViewItem(entry.Title.Text);
        //item.SubItems.Add(entry.Title.Text);
        item.SubItems.Add(entry.ProfileId.Value);
        listView_Profile.Items.Add(item);
      }
    }
  }
}

補足

Google Analytics API v2.4のURLを用いる場合のコードです。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Google.GData.Client;
using Google.GData.Analytics;
using Google.GData.Extensions;

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

    private void button_GetProfile_Click(object sender, EventArgs e)
    {
      string userName = textBox_User.Text;
      string passWord = textBox_Pass.Text;

      string apikey = "AIxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxx";
      string feedUrl = "https://www.googleapis.com/analytics/v2.4/management/accounts?key=" + apikey;
      AccountQuery query = new AccountQuery(feedUrl);

      AnalyticsService service = new AnalyticsService("AnalyticsSampleApp(iPentec)");
      if (!string.IsNullOrEmpty(userName)) {
        service.setUserCredentials(userName, passWord);
      }

      AccountFeed accountFeed = service.Query(query);
      foreach (AccountEntry entry in accountFeed.Entries) {
        ListViewItem item = new ListViewItem(entry.Title.Text);
        //item.SubItems.Add(entry.Title.Text);
        item.SubItems.Add(entry.ProfileId.Value);
        listView_Profile.Items.Add(item);
      }
    }
  }
}

解説

AccountQuery query = new AccountQuery();
AnalyticsService service = new AnalyticsService("AnalyticsSampleApp(iPentec)");
にて、AccountQueryとAnalyticsServiceクラスのインスタンスを作成します。

service.setUserCredentials(userName, passWord);
にて、setUserCredentials()メソッドを呼び出し認証情報を設定します。認証情報はGoogleアカウントのユーザーIDとパスワードを渡します。

AccountFeed accountFeed = service.Query(query);
AnalyticsServiceのインスタンスのQuery()メソッドを呼び出し、プロファイルの一覧を取得します。

  foreach (AccountEntry entry in accountFeed.Entries) {
    ListViewItem item = new ListViewItem(entry.Title.Text);
    item.SubItems.Add(entry.ProfileId.Value);
    listView_Profile.Items.Add(item);
  }
foreachループで取得したプロファイルをListViewに追加します。

実行結果

アプリケーションを実行すると下図の画面が表示されます。


UserNameのテキストボックスにGoogleアカウントのID(メールアドレス)、Passwordのテキストボックスにパスワードを入力し、プロファイルボタンを押します。

GoogleアカウントにAnalyticsプロファイルが結び付けられていれば、上図のように、ListViewにプロファイルの一覧が表示されます。

PV数などの取得

PV数などの集計結果の取得は、こちらの記事を参照してください

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