Hello Analytics Reporting API v4. 설치된 애플리케이션을 위한 Java 빠른 시작

이 튜토리얼에서는 Analytics Reporting API v4에 액세스하는 데 필요한 단계를 안내합니다.

1. API 사용 설정

Analytics Reporting API v4를 사용하려면 먼저 설정 도구를 사용해야 합니다. 이 도구는 Google API 콘솔에서 프로젝트를 만들고, API를 사용 설정하고, 사용자 인증 정보를 만드는 방법을 안내합니다.

참고: 웹 클라이언트 ID 또는 설치된 애플리케이션 클라이언트를 생성하려면 동의 화면에서 제품 이름을 설정해야 합니다. 아직 동의 화면을 구성하지 않았다면 동의 화면 구성 메시지가 표시됩니다.

사용자 인증 정보 만들기

  • 사용자 인증 정보 페이지를 엽니다.
  • 사용자 인증 정보 만들기를 클릭하고 OAuth 클라이언트 ID를 선택합니다.
  • 애플리케이션 유형으로 기타를 선택합니다.
  • 클라이언트 ID의 이름을 quickstart로 지정하고 만들기를 클릭합니다.

사용자 인증 정보 페이지에서 새로 생성된 클라이언트 ID를 클릭하고 JSON 다운로드를 클릭하여 client_secrets.json로 저장합니다. 이 ID는 튜토리얼의 후반부에서 필요합니다.

2. 클라이언트 라이브러리 설치하기

Google 애널리틱스 API 자바 클라이언트를 설치하려면 추출해야 하는 모든 jar가 포함된 ZIP 파일을 다운로드하여 Java 클래스 경로에 복사해야 합니다.

  1. 애널리틱스 Reporting API v4 자바 클라이언트 라이브러리를 다운로드합니다. 이 라이브러리는 필요한 모든 종속 항목이 포함된 ZIP 파일로 번들로 제공됩니다.
  2. ZIP 파일의 압축을 풉니다.
  3. libs 디렉터리 내의 모든 JAR을 클래스 경로에 추가합니다.
  4. google-api-services-analyticsreporting-v4-[version].jar jar를 클래스 경로에 추가합니다.

자바 환경 세부정보

Eclipse

Eclipse의 경우 프로젝트의 클래스 경로에 JAR을 추가하는 방법은 이 StackOverflow 질문을 참고하세요.

NetBeans

NetBeans의 경우 이 StackOverflow 질문에서 프로젝트의 클래스 경로에 JAR을 추가하는 방법을 확인하세요.

IntelliJ IDEA

IntelliJ IDEA의 경우 프로젝트의 클래스 경로에 JAR을 추가하는 방법은 이 StackOverflow 질문을 참고하세요.

명령줄

명령줄에서 개발하는 경우 javacjava 명령어 호출에 다음을 추가합니다.

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

3. 샘플 설정

제공된 샘플 코드를 포함하는 HelloAnalyticsReporting.java라는 단일 파일을 만들어야 합니다.

  • 다음 소스 코드를 HelloAnalyticsReporting.java로 복사하거나 다운로드합니다.
  • 이전에 다운로드한 client_secrets.json를 샘플 코드와 동일한 디렉터리로 이동합니다.
  • VIEW_ID의 값을 액세스하려는 뷰의 ID로 바꿉니다.
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;

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

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


/**
 * A simple example of how to access the Google Analytics API.
 */
public class HelloAnalytics {
  // Path to client_secrets.json file downloaded from the Developer's Console.
  // The path is relative to HelloAnalytics.java.
  private static final String CLIENT_SECRET_JSON_RESOURCE = "client_secrets.json";

  // Replace with your view ID.
  private static final String VIEW_ID = "<REPLACE_WITH_VIEW_ID>";

  // The directory where the user's credentials will be stored.
  private static final File DATA_STORE_DIR = new File(
      System.getProperty("user.home"), ".store/hello_analytics");

  private static final String APPLICATION_NAME = "Hello Analytics Reporting";
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  private static NetHttpTransport httpTransport;
  private static FileDataStoreFactory dataStoreFactory;

  public static void main(String[] args) {
    try {
      Analyticsreporting service = initializeAnalyticsReporting();

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


  /**
   * Initializes an authorized Analytics Reporting service object.
   *
   * @return The analytics reporting service object.
   * @throws IOException
   * @throws GeneralSecurityException
   */
  private static Analyticsreporting initializeAnalyticsReporting() throws GeneralSecurityException, IOException {

    httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

    // Load client secrets.
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
        new InputStreamReader(HelloAnalytics.class
            .getResourceAsStream(CLIENT_SECRET_JSON_RESOURCE)));

    // Set up authorization code flow for all authorization scopes.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
        .Builder(httpTransport, JSON_FACTORY, clientSecrets,
            AnalyticsreportingScopes.all()).setDataStoreFactory(dataStoreFactory)
        .build();

    // Authorize.
    Credential credential = new AuthorizationCodeInstalledApp(flow,
        new LocalServerReceiver()).authorize("user");
    // Construct the Analytics Reporting service object.
    return new Analyticsreporting.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }

  /**
   * Query the Analytics Reporting API V4.
   * Constructs a request for the sessions for the past seven days.
   * Returns the API response.
   *
   * @param service
   * @return GetReportResponse
   * @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");

    //Create the Dimensions object.
    Dimension browser = new Dimension()
        .setName("ga:browser");

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

    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 the 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 클래스로 설정되어 있는지 확인합니다.

  • 애플리케이션이 브라우저에 인증 페이지를 로드합니다.
  • 아직 Google 계정에 로그인하지 않은 경우 로그인하라는 메시지가 표시됩니다. 여러 Google 계정에 로그인한 경우 승인에 사용할 계정 하나를 선택하라는 메시지가 표시됩니다.

이 단계를 완료하면 샘플에는 특정 보기에 대한 지난 7일간의 세션수가 출력됩니다.