이 튜토리얼에서는 Analytics Reporting API v4에 액세스하는 데 필요한 단계를 안내합니다.
1. API 사용 설정
Analytics Reporting API v4를 사용하려면 먼저 설정 도구를 사용해야 합니다. 이 도구는 Google API 콘솔에서 프로젝트를 만들고, API를 사용 설정하고, 사용자 인증 정보를 만드는 방법을 안내합니다.
사용자 인증 정보 만들기
- 서비스 계정 페이지를 엽니다. 메시지가 표시되면 프로젝트를 선택합니다.
- 서비스 계정 만들기를 클릭한 다음 서비스 계정의 이름과 설명을 입력합니다. 기본 서비스 계정 ID를 사용하거나 다른 고유한 ID를 선택할 수도 있습니다. 완료하면 만들기를 클릭합니다.
- 이어지는 서비스 계정 권한(선택사항) 섹션은 선택하지 않아도 됩니다. 계속을 클릭합니다.
- 사용자에게 이 서비스 계정에 대한 액세스 권한 부여 화면에서 키 만들기 섹션이 나올 때까지 아래로 스크롤합니다. 키 만들기를 클릭합니다.
- 표시되는 측면 패널에서 키에 사용할 형식을 선택합니다. JSON을 사용하는 것이 좋습니다.
- 만들기를 클릭합니다. 새로운 공개 키/비공개 키 쌍이 생성되어 기기에 다운로드됩니다. 생성된 파일은 이 키의 유일한 사본으로 사용됩니다. 키를 안전하게 보관하는 방법을 자세히 알아보려면 서비스 계정 키 관리를 참조하세요.
- 비공개 키가 컴퓨터에 저장됨 대화상자에서 닫기를 클릭한 다음 완료를 클릭하여 서비스 계정 표로 돌아갑니다.
Google 애널리틱스 계정에 서비스 계정 추가
새로 만든 서비스 계정의 이메일 주소는 다음과 유사합니다.
quickstart@PROJECT-ID.iam.gserviceaccount.com
이 이메일 주소를 사용하여 API를 통해 액세스할 Google 애널리틱스 보기에 사용자를 추가합니다. 이 튜토리얼에서는 읽기 및 분석 권한만 있으면 됩니다.
2. 클라이언트 라이브러리 설치하기
Google 애널리틱스 API 자바 클라이언트를 설치하려면 추출해야 하는 모든 jar가 포함된 ZIP 파일을 다운로드하여 Java 클래스 경로에 복사해야 합니다.
- 애널리틱스 Reporting API v4 자바 클라이언트 라이브러리를 다운로드합니다. 이 라이브러리는 필요한 모든 종속 항목이 포함된 ZIP 파일로 번들로 제공됩니다.
- ZIP 파일의 압축을 풉니다.
libs
디렉터리 내의 모든 JAR을 클래스 경로에 추가합니다.google-api-services-analyticsreporting-v4-[version].jar
jar를 클래스 경로에 추가합니다.
자바 환경 세부정보
Eclipse
Eclipse의 경우 프로젝트의 클래스 경로에 JAR을 추가하는 방법은 이 StackOverflow 질문을 참고하세요.
NetBeans
NetBeans의 경우 이 StackOverflow 질문에서 프로젝트의 클래스 경로에 JAR을 추가하는 방법을 확인하세요.
IntelliJ IDEA
IntelliJ IDEA의 경우 프로젝트의 클래스 경로에 JAR을 추가하는 방법은 이 StackOverflow 질문을 참고하세요.
명령줄
명령줄에서 개발하는 경우 javac
및 java
명령어 호출에 다음을 추가합니다.
-classpath /path/to/directory/with/unzipped/jars
3. 샘플 설정
제공된 샘플 코드를 포함하는 HelloAnalyticsReporting.java
라는 단일 파일을 만들어야 합니다.
- 다음 소스 코드를
HelloAnalyticsReporting.java
로 복사하거나 다운로드합니다.
- 이전에 다운로드한
client_secrets.json
를 샘플 코드와 동일한 디렉터리로 이동합니다. KEY_FILE_LOCATION
의 값을 Play 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일간의 세션수가 출력됩니다.