CodeZine(コードジン)

特集ページ一覧

GoogleアナリティクスAPIでアクセスデータを活用するReporting API

Googleアナリティクス API徹底活用入門 第2回

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2016/12/21 14:00
目次

Reporting API活用のためのサンプルコード

 具体的なReporting APIの利用方法をサンプルコードで確認していきましょう。

ページビューランキングを取得

 もっとも読まれている(ページビュー数が多い)ページを、ランキングとして取得する方法を確認します。

Reporting APIへレポートを要求する

Reporting APIに対してレポートを要求するメソッドを確認します。

リスト1 レポートを呼び出すためのメソッド(Sample2AnalyticsReporting.java)
// APIでレポートを呼び出すためのメソッド
private static GetReportsResponse getReport(AnalyticsReporting service) throws IOException {
  // レポート期間指定
  DateRange dateRange = new DateRange();
  dateRange.setStartDate("31DaysAgo");
  dateRange.setEndDate("yesterday");
  // 以下リクエスト内容を設定
  // (1)ディメンションとして「ページ」を指定
  Dimension pagePath = new Dimension().setName("ga:pagePath");
  // (2)指標として「ページビュー」を指定
  Metric pageviews = new Metric().setExpression("ga:pageviews").setAlias("pageviews");
  // (3)ソートを行うOrderBy
  OrderBy orderby = new OrderBy().setFieldName("ga:pageviews").setSortOrder("descending");
  // (4)ReportRequestオブジェクトのメソッドでレポート内容を設定
  ReportRequest request = new ReportRequest()
      .setViewId(VIEW_ID)
      .setDateRanges(Arrays.asList(dateRange))
      .setDimensions(Arrays.asList(pagePath))
      .setOrderBys(Arrays.asList(orderby))
      .setMetrics(Arrays.asList(pageviews));
  ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
  requests.add(request);
  // 複数レポートがある場合はまとめて実行し、返り値responseを受け取る
  GetReportsRequest getReport = new GetReportsRequest().setReportRequests(requests);
  GetReportsResponse response = service.reports().batchGet(getReport).execute();

  return response;
}
(1)ディメンションとして「ページ」を指定

 ”ga:pagePath”の箇所がGA-APIでのディメンション名になります。

(2)指標として「ページビュー」を指定

 GoogleアナリティクスAPIのReportingのサービスを提供するAnalyticsReportingオブジェクトを生成し、返り値として返しています。

(3)ソートを行うOrderBy

 ランキング表示ではページビューが多い順にしたいので項目でページビューを、ソートとして"descending"(降順)を指定します。ソートはデフォルトではascending(昇順)です。

(4)ReportRequestオブジェクトのメソッドでレポート内容を設定

 (1)~(3)で生成したオブジェクトをReportRequestオブジェクトのメソッドで設定します。

 以上がGA-APIに対してレポートを要求する、基本的な手順になります。(1)~(4)の手順を繰り返すことで、さまざまなレポートを作成することができます。

Reporting APIからのレスポンスを処理する

 レポートリクエストに対してReporting APIからのレスポンスを処理します。レスポンスのデータは「ヘッダ情報」「行データ」で構成されているので、それぞれ処理していきます。

リスト2 APIからのレスポンス(Sample2AnalyticsReporting.java)
// APIからのレスポンスを確認する
private static void printResponse(GetReportsResponse response) {
  for (Report report: response.getReports()) {
    // (1)ヘッダ情報を取得
    ColumnHeader header = report.getColumnHeader();
    List<String> dimensionHeaders = header.getDimensions();
    List<MetricHeaderEntry> metricHeaders = header.getMetricHeader().getMetricHeaderEntries();
    // 行データを取得
    List<ReportRow> rows = report.getData().getRows();
    int ranking = 0;
    // ヘッダー情報を表示
    System.out.println("順位 : ページ : ページビュー");
     // (2)行データを処理
    for (ReportRow row: rows) {
      ranking++; // (3)ランキング順位表示のためのインクリメント
      List<String> dimensions = row.getDimensions();
      List<DateRangeValues> metrics = row.getMetrics();
      String page ="";
      for (int i = 0; i < dimensionHeaders.size() && i < dimensions.size(); i++) {
        page =  dimensions.get(i);
      }
      for (int j = 0; j < metrics.size(); j++) {
        DateRangeValues values = metrics.get(j);
        // 行データの表示
        for (int k = 0; k < values.getValues().size() && k < metricHeaders.size(); k++) {
          System.out.println(ranking+" : " + page + " : " + values.getValues().get(k));
        }
      }
    }
  }
}
(1)ヘッダ情報を取得

 レポート列データとしてヘッダー情報を取得した後、ディメンションと指標のヘッダ情報をそれぞれ取り出しておきます。

(2)行データを処理

 行の数は「ディメンション数」×「指標数」になります。該当するデータがない(Null)の場合はレスポンスとして行データは取得されないので表示でも割愛されます。

(3)ランキング順位表示のためのインクリメント

 ランキング順位を表示するために変数をレポート1行分の表示ごとにインクリメントします。

 下記のような結果が得られれば成功です。

順位 : ページ : ページビュー
1 : / : 729
2 : /services.php : 100
3 : /analytics.php : 50
4 : /contact.php : 23

複数のディメンションを設定する

 Googleアナリティクスのカスタムレポートではディメンションは最大5つまでしか設定できませんが、APIを用いる場合はディメンションは最大7つまで設定できます。複数ディメンションを指定する方法を確認します。

リスト3 複数ディメンションの指定(Sample3AnalyticsReporting.java)
// (1)ディメンションをすべて指定
Dimension landingPagePath = new Dimension().setName("ga:landingPagePath");
Dimension channelGrouping = new Dimension().setName("ga:channelGrouping");
Dimension deviceCategory = new Dimension().setName("ga:deviceCategory");
Dimension userType = new Dimension().setName("ga:userType");
Dimension city = new Dimension().setName("ga:city");
Dimension browser = new Dimension().setName("ga:browser");
Dimension dayOfWeek = new Dimension().setName("ga:dayOfWeek");
// 指標を指定
Metric pageviews = new Metric().setExpression("ga:pageviews").setAlias("pageviews");
// ソートを指定
OrderBy orderby = new OrderBy().setFieldName("ga:pageviews").setSortOrder("descending");
ReportRequest request = new ReportRequest()
    .setViewId(VIEW_ID)
    .setDateRanges(Arrays.asList(dateRange))
    // (2)リクエストにディメンションを設定
    .setDimensions(Arrays.asList(landingPagePath,channelGrouping,deviceCategory,userType,city,browser,dayOfWeek))
    .setOrderBys(Arrays.asList(orderby))
    .setMetrics(Arrays.asList(pageviews));
(1)ディメンションをすべて指定

 APIでのディメンション名を用いて指定したい分だけDimensionオブジェクトを作成します。ここでは7つ作成することになります。

(2)リクエストにディメンションを設定

 リクエストに対しても設定するディメンションはすべて、ReportRequestオブジェクトのメソッドで設定します。

 以上のように複数のディメンションの指定は単純に追加のみで実現できます。結果は以下のようになります。

順位 : ランディングページ : 参照元 :  デバイス :  ユーザータイプ :  市区町村 :  ブラウザ :  曜日 : ページビュー
1 : / : Organic Search : desktop : New Visitor : Kiyose : Safari : 2 : 18
2 : / : Organic Search : desktop : New Visitor : Minato : Chrome : 5 : 14
3 : / : Organic Search : desktop : New Visitor : Setagaya : Chrome : 0 : 13
4 : / : Direct : desktop : New Visitor : Shinjuku : Chrome : 1 : 12
5 : / : Organic Search : mobile : New Visitor : Yokohama : Safari : 0 : 11
6 : / : Referral : desktop : New Visitor : (not set) : Firefox : 6 : 11
7 : / : Organic Search : desktop : New Visitor : Minato : Chrome : 2 : 10
8 : / : Referral : desktop : New Visitor : Hull : Firefox : 1 : 10
9 : / : Direct : desktop : New Visitor : Yokohama : Chrome : 2 : 8
10 : / : Referral : desktop : New Visitor : Fukuoka : Chrome : 6 : 8
(略)

複数のビューからレポートデータを取得する

 複数のドメインからデータを取得したい場合など、複数のビューからレポートデータを取得したい場合があります。ただ、ビューは一度のリクエストにつきひとつまでしか設定できません。複数のビューからレポートデータを取得する場合は、取得したいビューの数だけリクエストを生成してレスポンスを受け取ります。

リスト4 複数のビューを指定する(Sample4AnalyticsReporting.java)
public static void main(String[] args) {
    try {
      AnalyticsReporting service = initializeAnalyticsReporting();
      // (1)ビューごとにレポートを取得
      String viewID = "XXXXX"; // ビューIDを指定
      GetReportsResponse response = getReport(service,viewID);
      printResponse(response);

      viewID = "YYYYYY"; // ビューIDを指定
      response = getReport(service,viewID);
      printResponse(response);
    } catch (Exception e) {
      e.printStackTrace();
    }
}

(略)

// APIでレポートを呼び出すためのメソッド
private static GetReportsResponse getReport(AnalyticsReporting service, String viewID) throws IOException {
// (2)ビューIDをうけとる
(1)ビューごとにレポートを取得

 レポート取得ごとにビューIDが異なるため、引数としてビューIDをレポート取得メソッドgetReportに渡しています。これをレポートを取得したいビューの数だけ繰り返すことになります。

(2)ビューIDをうけとる

 引数からビューIDを受け取り、メソッドを実行します。この後は動作は同じです。

 結果は下記のようになります。

順位 : ページ : ページビュー
1 : / : 729
2 : /services.php : 100
3 : /analytics.php : 50
4 : /contact.php : 23
順位 : ページ : ページビュー
1 : / : 238
2 : /entry/2015/04/29/202018 : 114
3 : /entry/2015/04/29/202019 : 2
(略)

まとめ

 今回はGoogleアナリティクスAPIの中でも最も利用頻度が高いであろうReporting APIについて解説しました。既存のアプリケーションと統合したり、顧客データと統合するなどレポート作成自動化に役立てていただければと思います。

 次回はメール開封時やIoTデバイスからのデータ取得を実現するAPIであるMeasurement Protocolを中心に解説予定です。



  • LINEで送る
  • このエントリーをはてなブックマークに追加

バックナンバー

連載:Googleアナリティクス API徹底活用入門

著者プロフィール

  • WINGSプロジェクト 西 潤史郎(ニシ ジュンシロウ)

    <WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きた...

  • 山田 祥寛(ヤマダ ヨシヒロ)

    静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。 主な著書に「入門シリーズ(サーバサイドAjax/XM...

あなたにオススメ

All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5