はじめてのアナリティクス Reporting API v4: サービス アカウント向け Java クイックスタート

このチュートリアルでは、アナリティクス Reporting API v4 にアクセスする手順を詳しく説明します。

1. API を有効にする

アナリティクス Reporting API v4 を使用するには、まずセットアップ ツールの手順に沿って Google API Console でプロジェクトを作成し、API を有効にして、認証情報を作成する必要があります。

認証情報を作成

  1. [サービス アカウント] ページを開きます。 画面のメッセージに従って、プロジェクトを選択します。
  2. [サービス アカウントを作成] をクリックします。
  3. [サービス アカウントの作成] ウィンドウで、サービス アカウント名を入力して [新しい秘密鍵の提供] をオンにします。選択したら、[保存] をクリックします。

新しい公開鍵 / 秘密鍵のペアが生成され、マシンにダウンロードされます。この鍵には他のコピーはありません。安全に保管してください

Google アナリティクス アカウントにサービス アカウントを追加

新規作成したサービス アカウントのメールアドレスは、次のようになります。

quickstart@PROJECT-ID.iam.gserviceaccount.com

このメールアドレスを使用し、API 経由でアクセスする Google アナリティクスのビューにユーザーを追加します。このチュートリアルで必要なのは、表示と分析権限のみです。

2. クライアント ライブラリをインストールする

Google アナリティクス API Java クライアントをインストールするには、すべての JAR ファイルが含まれる ZIP ファイルをダウンロードして展開し、Java のクラスパスにコピーする必要があります。

  1. アナリティクス Reporting API V4 Java クライアント ライブラリをダウンロードします。このライブラリにはすべての必要な依存ライブラリが含まれ、ZIP ファイル形式でまとめられています。
  2. ZIP ファイルを展開します。
  3. libs ディレクトリ内のすべての JAR をクラスパスに追加します。
  4. JAR ファイル google-api-services-analyticsreporting-v4-[version].jar をクラスパスに追加します。

Java 環境の詳細

Eclipse

Eclipse の場合、プロジェクトのクラスパスに JAR を追加する手順については、Stack Overflow のこちらの質問をご覧ください。

NetBeans

NetBeans の場合、プロジェクトのクラスパスに JAR を追加する手順については、Stack Overflow のこちらの質問をご覧ください。

IntelliJ IDEA

IntelliJ IDEA の場合、プロジェクトのクラスパスに JAR を追加する手順については、Stack Overflow のこちらの質問をご覧ください。

コマンドライン

コマンドラインから開発を行う場合は、javac および java のコマンド呼び出しに次の行を追加します。

-classpath /path/to/directory/with/unzipped/jars

3.サンプルをセットアップする

HelloAnalyticsReporting.java という名前のファイルを 1 つ作成する必要があります。このファイルには以下に示すサンプルコードを記述します。

  • 次のソースコードをコピーまたはダウンロードして、HelloAnalyticsReporting.java に追加します。
  • 前にダウンロードした client_secrets.json をサンプルコードと同じディレクトリに移動します。
  • KEY_FILE_LOCATION の値を、Developers Console に表示された適切な値に置換します。
  • VIEW_ID の値をアクセスするビューの ID に置き換えます。
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;

import java.io.FileInputStream;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.google.api.services.analyticsreporting.v4.AnalyticsReportingScopes;
import com.google.api.services.analyticsreporting.v4.AnalyticsReporting;

import com.google.api.services.analyticsreporting.v4.model.ColumnHeader;
import com.google.api.services.analyticsreporting.v4.model.DateRange;
import com.google.api.services.analyticsreporting.v4.model.DateRangeValues;
import com.google.api.services.analyticsreporting.v4.model.GetReportsRequest;
import com.google.api.services.analyticsreporting.v4.model.GetReportsResponse;
import com.google.api.services.analyticsreporting.v4.model.Metric;
import com.google.api.services.analyticsreporting.v4.model.Dimension;
import com.google.api.services.analyticsreporting.v4.model.MetricHeaderEntry;
import com.google.api.services.analyticsreporting.v4.model.Report;
import com.google.api.services.analyticsreporting.v4.model.ReportRequest;
import com.google.api.services.analyticsreporting.v4.model.ReportRow;

public class HelloAnalyticsReporting {
  private static final String APPLICATION_NAME = "Hello Analytics Reporting";
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  private static final String KEY_FILE_LOCATION = "<REPLACE_WITH_JSON_FILE>";
  private static final String VIEW_ID = "<REPLACE_WITH_VIEW_ID>";
  public static void main(String[] args) {
    try {
      AnalyticsReporting service = initializeAnalyticsReporting();

      GetReportsResponse response = getReport(service);
      printResponse(response);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * Initializes an Analytics Reporting API V4 service object.
   *
   * @return An authorized Analytics Reporting API V4 service object.
   * @throws IOException
   * @throws GeneralSecurityException
   */
  private static AnalyticsReporting initializeAnalyticsReporting() throws GeneralSecurityException, IOException {

    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = GoogleCredential
        .fromStream(new FileInputStream(KEY_FILE_LOCATION))
        .createScoped(AnalyticsReportingScopes.all());

    // Construct the Analytics Reporting service object.
    return new AnalyticsReporting.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }

  /**
   * Queries the Analytics Reporting API V4.
   *
   * @param service An authorized Analytics Reporting API V4 service object.
   * @return GetReportResponse The Analytics Reporting API V4 response.
   * @throws IOException
   */
  private static GetReportsResponse getReport(AnalyticsReporting service) throws IOException {
    // Create the DateRange object.
    DateRange dateRange = new DateRange();
    dateRange.setStartDate("7DaysAgo");
    dateRange.setEndDate("today");

    // Create the Metrics object.
    Metric sessions = new Metric()
        .setExpression("ga:sessions")
        .setAlias("sessions");

    Dimension pageTitle = new Dimension().setName("ga:pageTitle");

    // Create the ReportRequest object.
    ReportRequest request = new ReportRequest()
        .setViewId(VIEW_ID)
        .setDateRanges(Arrays.asList(dateRange))
        .setMetrics(Arrays.asList(sessions))
        .setDimensions(Arrays.asList(pageTitle));

    ArrayList<ReportRequest> requests = new ArrayList<ReportRequest>();
    requests.add(request);

    // Create the GetReportsRequest object.
    GetReportsRequest getReport = new GetReportsRequest()
        .setReportRequests(requests);

    // Call the batchGet method.
    GetReportsResponse response = service.reports().batchGet(getReport).execute();

    // Return the response.
    return response;
  }

  /**
   * Parses and prints the Analytics Reporting API V4 response.
   *
   * @param response An Analytics Reporting API V4 response.
   */
  private static void printResponse(GetReportsResponse response) {

    for (Report report: response.getReports()) {
      ColumnHeader header = report.getColumnHeader();
      List<String> dimensionHeaders = header.getDimensions();
      List<MetricHeaderEntry> metricHeaders = header.getMetricHeader().getMetricHeaderEntries();
      List<ReportRow> rows = report.getData().getRows();

      if (rows == null) {
         System.out.println("No data found for " + VIEW_ID);
         return;
      }

      for (ReportRow row: rows) {
        List<String> dimensions = row.getDimensions();
        List<DateRangeValues> metrics = row.getMetrics();

        for (int i = 0; i < dimensionHeaders.size() && i < dimensions.size(); i++) {
          System.out.println(dimensionHeaders.get(i) + ": " + dimensions.get(i));
       	}

        for (int j = 0; j < metrics.size(); j++) {
          System.out.print("Date Range (" + j + "): ");
          DateRangeValues values = metrics.get(j);
          for (int k = 0; k < values.getValues().size() && k < metricHeaders.size(); k++) {
            System.out.println(metricHeaders.get(k).getName() + ": " + values.getValues().get(k));
          }
        }
      }
    }
  }
}

4. サンプルを実行する

IDE を使用している場合は、デフォルトの実行ターゲットを必ず HelloAnalytics クラスに設定してください。 それ以外の場合は、次のようにコマンドラインからアプリケーションをコンパイルして実行できます。

  • 次のコマンドを使用してサンプルをコンパイルします。

    javac -classpath '/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting.java
    
  • 次のコマンドを使用してサンプルを実行します。

    java -classpath '.:/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting
    

以上の手順が完了すると、サンプルコードによって、指定されたビューの過去 7 日間のセッション数が出力されます。