Xin chào Analytics Reporting API phiên bản 4; bắt đầu nhanh Java cho tài khoản dịch vụ

Hướng dẫn này sẽ trình bày các bước bắt buộc để truy cập vào API Báo cáo Analytics phiên bản 4.

1. Bật API

Để bắt đầu sử dụng API Báo cáo Analytics phiên bản 4, trước tiên, bạn cần sử dụng công cụ thiết lập. Công cụ này sẽ hướng dẫn bạn tạo dự án trong Bảng điều khiển API của Google, bật API và tạo thông tin đăng nhập.

Tạo thông tin đăng nhập

  1. Mở trang Tài khoản dịch vụ. Nếu thấy lời nhắc, hãy chọn một dự án.
  2. Nhấp vào Tạo tài khoản dịch vụ rồi nhập tên và phần mô tả cho tài khoản dịch vụ. Bạn có thể sử dụng mã tài khoản dịch vụ mặc định hoặc chọn một mã riêng biệt khác. Khi hoàn tất, hãy nhấp vào Tạo.
  3. Bạn không bắt buộc phải làm gì trong phần Quyền tài khoản dịch vụ (tuỳ chọn) sau đó. Hãy nhấp vào Tiếp tục.
  4. Trên màn hình Cấp cho người dùng quyền truy cập vào tài khoản dịch vụ này, hãy cuộn xuống phần Tạo khoá. Nhấp vào Tạo khoá.
  5. Trong bảng điều khiển bên xuất hiện, hãy chọn định dạng cho khoá của bạn: bạn nên chọn JSON.
  6. Nhấp vào Tạo. Cặp khoá công khai/riêng tư mới của bạn sẽ được tạo và tải xuống máy của bạn; đây là bản sao duy nhất của khoá này. Để biết thông tin về cách lưu trữ khoá an toàn, hãy xem Quản lý khoá tài khoản dịch vụ.
  7. Nhấp vào Đóng trên hộp thoại Khoá riêng tư đã lưu vào máy tính của bạn, sau đó nhấp vào Xong để trở về bảng tài khoản dịch vụ.

Thêm tài khoản dịch vụ vào tài khoản Google Analytics

Tài khoản dịch vụ mới tạo sẽ có một địa chỉ email giống như sau:

quickstart@PROJECT-ID.iam.gserviceaccount.com

Sử dụng địa chỉ email này để thêm người dùng vào chế độ xem Google Analytics mà bạn muốn truy cập thông qua API. Trong hướng dẫn này, bạn chỉ cần có quyền Đọc và phân tích.

2. Cài đặt thư viện ứng dụng

Để cài đặt Ứng dụng Java API của Google Analytics, bạn phải tải xuống một tệp zip chứa tất cả các tệp jar bạn cần để trích xuất và sao chép vào classpath Java.

  1. Tải thư viện ứng dụng Java phiên bản 4 của API Báo cáo Analytics xuống. Thư viện này đóng gói dưới dạng tệp ZIP với tất cả các phần phụ thuộc bắt buộc.
  2. Giải nén tệp ZIP.
  3. Thêm tất cả tệp JAR trong thư mục libs vào classpath.
  4. Thêm tệp jar google-api-services-analyticsreporting-v4-[version].jar vào classpath.

Thông tin chi tiết về môi trường Java

Eclipse

Đối với Eclipse, hãy xem câu hỏi về StackOverflow để biết hướng dẫn thêm tệp JAR vào classpath của dự án.

NetBeans

Đối với NetBeans, hãy xem câu hỏi về StackOverflow để biết hướng dẫn về cách thêm tệp JAR vào classpath của dự án.

IntelliJ IDEA

Đối với IntelliJ IDEA, hãy xem câu hỏi về StackOverflow để biết hướng dẫn về cách thêm tệp JAR vào classpath của dự án.

Dòng lệnh

Nếu bạn phát triển từ dòng lệnh, hãy thêm phần sau vào lệnh gọi javacjava:

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

3. Thiết lập mẫu

Bạn cần tạo một tệp có tên HelloAnalyticsReporting.java chứa mã mẫu đã cho.

  • Sao chép hoặc tải xuống mã nguồn sau vào HelloAnalyticsReporting.java.
  • Di chuyển client_secrets.json đã tải xuống trước đó vào cùng thư mục với mã mẫu.
  • Thay thế các giá trị của KEY_FILE_LOCATION bằng các giá trị thích hợp từ Developer Console.
  • Thay thế giá trị của VIEW_ID bằng mã của thành phần hiển thị mà bạn muốn truy cập.
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. Chạy mẫu

Nếu bạn đang dùng IDE, hãy đảm bảo bạn đã đặt đích chạy mặc định thành lớp HelloAnalytics. Nếu không, bạn có thể biên dịch và chạy ứng dụng từ dòng lệnh:

  • Biên dịch mẫu bằng:

    javac -classpath '/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting.java
    
  • Chạy mẫu bằng cách sử dụng:

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

Khi bạn hoàn thành các bước này, mẫu sẽ xuất ra số phiên trong 7 ngày qua cho chế độ xem đã cho.