Analytics Reporting API v4,您好;服務帳戶的 Java 快速入門導覽課程

本教學課程會逐步介紹存取 Analytics Reporting API v4 的必要步驟。

1. 啟用 API

如要開始使用 Analytics Reporting API v4,您必須先使用設定工具,這項工具會逐步引導您在 Google API 控制台中建立專案、啟用 API,並建立憑證。

建立憑證

  1. 開啟「服務帳戶」頁面。如果出現系統提示,請選取您要使用的專案。
  2. 按一下 [ 建立服務帳戶],然後輸入服務帳戶的名稱和說明。您可以使用預設的服務帳戶 ID,也可以自行選擇其他不重複的名稱。完成後,請按一下 [建立]
  3. 系統會隨即顯示「服務帳戶權限」部分,不過您不一定要設定這些權限。請按一下 [繼續]。
  4. 在「將這個服務帳戶的存取權授予使用者」畫面中,向下捲動至「建立金鑰」部分。按一下 [ 建立金鑰]
  5. 在隨即顯示的側邊面板中選取金鑰格式;建議您選擇 [JSON]
  6. 按一下 [建立],接著,系統就會為您產生一對新的公開/私密金鑰,並下載至您的電腦中;這是金鑰的唯一副本,如要瞭解安全儲存的方式,請參閱管理服務帳戶金鑰
  7. 在 [已將私密金鑰儲存至您的電腦中] 對話方塊中按一下 [關閉],然後再按一下 [完成],即可返回您的服務帳戶表格。

在 Google Analytics (分析) 帳戶中新增服務帳戶

新建立的服務帳戶電子郵件地址看起來會像這樣:

quickstart@PROJECT-ID.iam.gserviceaccount.com

請使用這個電子郵件地址,在您要透過 API 存取的 Google Analytics (分析) 資料檢視中新增使用者。本教學課程僅需要「檢視及分析」權限。

2. 安裝用戶端程式庫

若要安裝 Google Analytics API Java 用戶端,您必須下載 ZIP 檔案,當中包含所有要擷取並複製到 Java 類別路徑的 jar 檔案。

  1. 下載 Analytics Reporting API v4 Java 用戶端程式庫,該檔案會封裝成 ZIP 檔案,內含所有必要依附元件。
  2. 將 ZIP 檔案解壓縮。
  3. libs 目錄中的所有 JAR 新增至類別路徑。
  4. google-api-services-analyticsreporting-v4-[version].jar jar 新增至類別路徑。

Java 環境詳細資料

Eclipse

針對 Eclipse,請參閱這個 StackOverflow 問題,瞭解如何將 JAR 新增至專案的類別路徑。

NetBeans

如為 NetBeans,請參閱這個 StackOverflow 問題,瞭解如何將 JAR 新增至專案的類別路徑。

IntelliJ IDEA

針對 IntelliJ IDEA,請參閱這個 StackOverflow 問題,瞭解如何將 JAR 新增至專案的類別路徑。

指令列

如果是透過指令列進行開發,請將下列內容加入 javacjava 指令叫用中:

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

3. 設定範例

您必須建立名為 HelloAnalyticsReporting.java 的單一檔案,其中包含指定的程式碼範例。

  • 將下列原始碼複製或下載HelloAnalyticsReporting.java
  • 將先前下載的 client_secrets.json 移至與程式碼範例相同的目錄。
  • KEY_FILE_LOCATION 的值替換為 Play 管理中心中的適當值。
  • 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
    

完成上述步驟後,樣本就會針對指定的資料檢視輸出過去七天的工作階段數。