バージョン4の概要

バージョン4では、

  • 期間を単一ではなく、複数指定できるようになった
  • 複数のセグメントを一括指定して出力できるようになった
  • その場でカスタムの計算式を使ってメトリクスを指定できるようになった
  • コホート関連のディメンション・メトリクスが追加された
    • ユーザー単位の初回流入時の参照元/メディア, キャンペーンが取得できるようになった(未確認)
    • ライフタイムバリューに関するメトリクスが追加された
  • 1回のAPIリクエストで複数のレポートを取得できるようになった
  • ピポットテーブル用の条件指定を行うことで、APIのレスポンス形式がピポット化されたものになる
  • ディメンション「セッション数」のような数値が割り当てられているディメンションでは、ディメンションの区切り幅(ヒストグラムのバケット)を指定できるようになります。今までは1, 2, 3, 4, 5, 6, 7, 8, 9-14, 15-25, 26-50のような固定値だったものが動的に任意の区間を指定できるようになります。

といった形でパワーアップしています。
レポート生成に関わる条件指定が複雑化したためか、APIリクエストは今までのGETリクエストではなく、POSTリクエストでリクエストボディにJSON形式でパラメーターを設定する形式となっています。

その他の認証関連や、今まで基本的に使えていたディメンション・メトリクスは引き続き利用可能なようです。

なお、バージョン4のAPIを利用するには、Google Developer ConsoleからAnalytics Reporting API V4を有効にする必要があるのでご注意ください。

クライアントライブラリの対応状況

おそらくまだほとんどの言語のクライアントライブラリが対応していないものと思われます。Migrationの中にかろうじてPythonのコードがあり、gav4-pythonと言うGithubプロジェクトへのリンクがあるので、何が何でもいますぐ実行したい、という人はPythonを選択するのが良いかと思います。とはいえ、gav4-pythonのプロジェクトのコードは正式のものではなさそうですし、生のHTTPリクエストさえ実行すればAPI呼び出しできるので、Pythonにこだわる必要はありません。

実際、自分はPythonよりもRuby派なので、Rubyで生のHTTPリクエストを使ってCore Reporting API V4を実行する簡易なプログラムを作成しました。

Rubyで実行するための下準備

手順1: Developer ConsoleからAPIを有効にする

バージョン4のAPIを利用するには、Google Developer ConsoleからAnalytics Reporting API V4を有効にしてください。すでにGoogle Analytics Core Reporting APIを利用している場合でも、V4単体でAPIを有効にする必要があります。

有効にするのを忘れた場合であっても、APIを実行した時に丁寧なエラーメッセージが表示されるのですぐに気付きます。

手順2: AccessTokenを取得する

すでにAPIを利用している方であれば、大したことはないと思います。OAuth2.0での認証を行い、AccessTokenを取得してください。もしRefreshTokenがある場合はRefreshTokenからAccessTokenを取得します。

手順3: API実行を行う簡易クラスを実装する

require 'net/https'
require 'uri'
class CoreReportingV4Client
  def initialize(access_token)
    @access_token = access_token
  end

  def query(params)
    uri = URI.parse('https://analyticsreporting.googleapis.com/v4/reports:batchGet')
    request = Net::HTTP::Post.new(uri.path, {
      'Content-Type' => 'application/json',
      'Authorization' => "Bearer #{@access_token}",
    })
    request.body = params.to_json
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    response = http.start { |h| h.request(request) }
    JSON.parse(response.body)
  end
end

長いプログラムを想定した方も多いと思いますが、Rubyで書くとたったの20行ほどで基本となる部分は実装できてしまいます。
最初、「Content-Type」の指定を行わずに実行していたら、レスポンスボディが「{}」だけになってしまい試行錯誤しましたが、「Content-Type」を指定すれば問題なくデータが返ってきます。

手順4: APIを実行してレポートを取得する

client = CoreReportingV4Client.new('ここにアクセストークンを指定する')
puts client.query({
  reportRequests: [{
    viewId: "95664386",
    dateRanges: [{
      startDate: "2016-01-01",
      endDate: "2016-01-31",
    }],
    metrics: [{ expression: "ga:sessions" }],
    dimensions: [{ name: "ga:medium" }],
  }]
})

単純にメディア別のセッション数を出力するだけであれば上記のように実装することで、実現できてしまいます。ピポットテーブルやコホートなどを出力しようとすると、条件指定がどんどん複雑になっていきます。

使ってみた所感と今後に向けて

実はV4になって新しく実装されたレポート機能の多くは、RubyやJavaScriptなどのプログラミング言語と組合せることで実現できていたものがほとんどです。V4になって期間を複数指定できるようになったものの、V3であっても期間を変えて複数回APIを呼び出せば同じことができていました。セグメントの複数指定や複数レポートの一括取得も同様です。また数式計算やピポットテーブルもプログラム側で同様の実装ができますし、コホートについても何度もAPIを呼び出すことで実現できていました。
しかし、今までRubyやJavaScriptなどのプログラム側で実装していた部分が、APIの引数として直接指定することができるようになったので、プログラムの見やすさが格段に向上すると考えられます。

それに加え、コホート系のディメンションの増加やライフタイムバリュー系のメトリックスが追加されたことで、できることの幅が広がりました。まだ未検証ですが、メディア別のライフタイムバリューなんかも出力できるようになっているはずです。

引き続き、V4のReporting APIを使いながら、面白い何かを発見したら共有したいと思います。