본문 바로가기
Tools/Google Analytics API

구글 애널리틱스 API 자바 연결방법 정리글

by wakestand 2021. 11. 9.
반응형

자바에서 구글 애널리틱스 API를 연결해 주기에 앞서

API를 사용하려면

Maven 혹은 Gradle을 사용할 수 있어야 하고

 

'구글 계정'과 '구글 애널리틱스 계정'이

꼭 있어야 가능하다

 

Hello Analytics Reporting API v4; Java quickstart for service accounts

Hello Analytics Reporting API v4; Java quickstart for service accounts This tutorial walks through the steps required to access the Analytics Reporting API v4. Note: The purpose of these quickstart guides is to help you get through the initial hurdles of A

developers.google.com

다음으로 구글 애널리틱스 API와 연결하는 예제는

위 링크에서 볼 수 있는데

영어기 때문에 그냥 건너뛰고

내 블로그를 참조하면 된다

 

깃허브에서 내려받아 그대로 사용하는 방법

직접 구현하는 방법 두 가지를 설명하려고 하는데

 

먼저 깃허브의 예제를 가져오는 경우

아래 링크를 내려받은 뒤

 

GitHub - wakeisle9933/analytics-connection-sample

Contribute to wakeisle9933/analytics-connection-sample development by creating an account on GitHub.

github.com

HelloAnalyticsReporting.java 파일에서

KEY_FILE_LOCATION

VIEW_ID

부분의 값만 채워주면 되는데

방법은 스크롤을 아래로 내려서

구글 클라우드 부분부터 확인해주면 되고

 

직접 구현해서 사용할 경우에는

HelloAnalyticsReporting.java

파일을 만든 뒤에

아래 코드를 복사, 붙여넣기를 해준다

 

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));
          }
        }
      }
    }
  }
}

 

코드를 옮겨넣은 뒤에는

 

Gradle의 경우에는 build.gradle 파일에서

dependencies {} 안에

 

	implementation 'com.google.apis:google-api-services-analyticsreporting:v4-rev20211020-1.32.1'

 

위 코드를 넣고 다시 구축해주면 되고

 

Maven의 경우에는 pom.xml 파일에서

<dependencies> </dependencies> 안에

 

    <dependency>
      <groupId>com.google.apis</groupId>
      <artifactId>google-api-services-analyticsreporting</artifactId>
      <version>v4-rev20211020-1.32.1</version>
    </dependency>

 

위 코드를 넣고 다시 구축해주면 된다

 

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

다음으로 위 링크의

구글 클라우드 플랫폼으로 접속한 후

구글 애널리틱스에 접근하기 위한

계정을 설정해줘야 하는데

 

왼쪽 상단의 프로젝트 선택을 누른 뒤

프로젝트 선택 팝업창이 열리면

우측의 새 프로젝트를 눌러준다

 

여기서 프로젝트 이름을 설정하고 만들기

 

다음으로는 구글 클라우드 플랫폼 왼쪽의 메뉴를 누른 뒤

API 및 서비스 > 라이브러리를 눌러주자

 

검색창에서 Analytics로 검색하면

Google Analytics Reporting API가 보일텐데

이걸 선택한 뒤 사용을 눌러주자

 

사용을 누르면 위와 같이

Analytics Reporting API 화면으로 이동한 것이 보이는데

왼쪽 메뉴의 '사용자 인증 정보'를 누른 뒤

 

상단에서 '+ 사용자 인증 정보 만들기'를 누르고

'서비스 계정'을 눌러주자

 

서비스 계정 이름 / 서비스 계정 ID를 입력한 뒤

완료를 눌러준다

 

여기서 서비스 계정 하단의

이메일 부분을 복사해 놓은 뒤

오른쪽의 서비스 계정 관리를 눌러주자

(서비스 계정을 만들었는데 나오지 않을 경우 새로고침)

 

서비스 계정 관리 화면에서

우측의 작업 부분의 키 관리를 눌러주면

 

위와 같은 화면이 나오는데

왼쪽의 키 추가를 누른 뒤

새 키 만들기를 누른다

 

여기서 JSON을 선택한 후 만들기를 눌러주면

위와 같은 JSON 파일을 받을 수 있는데

이 파일을 잘 가지고 있다가 글 아래에서 사용한다

(파일을 다시 생성할 수 없기 때문에 주의할 것

분실 시에는 새 키 만들기를 다시 해야 함)

 

이제 구글 애널리틱스로 돌아간 뒤에

 

첫 화면에서 하단의 관리 버튼을 누르고

 

관리자 화면에서 계정 액세스 관리를 눌러주자

 

여기서 우측 상단의 + 버튼을 누른 뒤 

아까 만들어둔 서비스 계정의 이메일

(~.iam.gserviceaccount.com 으로 끝나는)

을 넣어준 후 표준 역할은 관리로 설정하고

추가를 눌러주자

 

이제 기본 세팅은 다 끝났으니

HelloAnalyticsReporting.java 에서

KEY_FILE_LOCATION, VIEW_ID를 변경해줘야 하는데

 

KEY_FILE_LOCATION은 아까 새 키 만들면서 생성된

JSON 파일의 위치를 말하는데

 

private static final String KEY_FILE_LOCATION = "C:\\workspace\\analytics-web\\src\\main\\resources\\userdata\\파일명.json";

 

이런 식으로 경로를 잡아주면 된다

 

다음은 VIEW_ID인데

 

구글 애널리틱스로 접속한 후

하단의 관리를 눌러주자

 

다음으로 관리 화면에서

오른쪽의 보기 설정을 클릭해주면

이렇게 보기 ID가 나오는데

이 값을 VIEW_ID에 넣어주면 된다

 

이제 기나긴 세팅이 모두 끝났으니

한번 구동을 시켜보면

 

구동이 잘 되는 것이 보인다

반응형

댓글