Hello Analytics Reporting API, wersja 4; krótkie wprowadzenie w Javie dla kont usługi

W tym samouczku opisujemy krok po kroku, jak uzyskać dostęp do interfejsu Analytics Reporting API w wersji 4.

1. Włącz API

Aby zacząć korzystać z interfejsu Analytics Reporting API w wersji 4, musisz najpierw użyć narzędzia do konfiguracji, które przeprowadzi Cię przez proces tworzenia projektu w Konsoli interfejsów API Google, włączania interfejsu API i tworzenia danych logowania.

Utwórz dane logowania

  1. Otwórz stronę Konta usługi. Jeśli pojawi się monit, wybierz projekt.
  2. Kliknij Utwórz konto usługi, a potem wpisz jego nazwę i opis. Możesz użyć domyślnego identyfikatora konta usługi lub wybrać inny, unikalny identyfikator. Gdy już to zrobisz, kliknij Utwórz.
  3. Określenie opcji w kolejnej sekcji Uprawnienia konta usługi (opcjonalnie) nie jest wymagane. Kliknij Dalej.
  4. Na ekranie Przyznaj użytkownikom dostęp do tego konta usługi przewiń w dół do sekcji Utwórz klucz. Kliknij Utwórz klucz.
  5. W wyświetlonym panelu bocznym wybierz format klucza. Zalecamy JSON.
  6. Kliknij Utwórz. Nowa para kluczy publicznych/prywatnych zostanie wygenerowana i pobrana na Twoje urządzenie. To jedyny egzemplarz tego klucza. Informacje o tym, jak bezpiecznie go przechowywać, znajdziesz w opisie zarządzania kluczami konta usługi.
  7. W oknie Na komputerze zapisano klucz prywatny kliknij Zamknij, a potem kliknij Gotowe, aby powrócić do tabeli z kontami usług.

Dodaj konto usługi do konta Google Analytics

Nowo utworzone konto usługi będzie miało adres e-mail podobny do tego:

quickstart@PROJECT-ID.iam.gserviceaccount.com

Użyj tego adresu e-mail, aby dodać użytkownika do widoku Google Analytics, do którego chcesz uzyskać dostęp za pomocą interfejsu API. W tym samouczku potrzebne są tylko uprawnienia do odczytu i analizy.

2. Instalowanie biblioteki klienta

Aby zainstalować klienta Java interfejsu Google Analytics API, musisz pobrać plik zip zawierający wszystkie pliki jar, które musisz wyodrębnić i skopiować do ścieżki klasy Java.

  1. Pobierz bibliotekę klienta interfejsu Analytics Reporting API w wersji 4 w języku Java, która jest dołączona jako plik ZIP ze wszystkimi wymaganymi zależnościami.
  2. Wyodrębnij plik ZIP.
  3. Dodaj wszystkie pliki JAR z katalogu libs do ścieżki klasy.
  4. Dodaj do ścieżki klasy plik jar google-api-services-analyticsreporting-v4-[version].jar.

Szczegóły środowiska Java

Zaćmienie

W przypadku Eclipse zapoznaj się z tym pytaniem w StackOverflow, aby dowiedzieć się, jak dodać pliki JAR do ścieżki klasy projektu.

NetBeans

W przypadku NetBeans zapoznaj się z tym pytaniem w StackOverflow, aby dowiedzieć się, jak dodać pliki JAR do ścieżki klasy projektu.

IDEA IntelliJ

Aby uzyskać pomysł na temat IntelliJ, zapoznaj się z tym pytaniem w StackOverflow, aby dowiedzieć się, jak dodać pliki JAR do ścieżki klasy projektu.

Wiersz poleceń

Jeśli programujesz w wierszu poleceń, dodaj do wywołań poleceń javac i java te dane:

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

3. Konfigurowanie przykładu

Musisz utworzyć jeden plik o nazwie HelloAnalyticsReporting.java, który będzie zawierał podany przykładowy kod.

  • Skopiuj lub pobierz ten kod źródłowy do HelloAnalyticsReporting.java.
  • Przenieś pobrany wcześniej plik client_secrets.json do tego samego katalogu, w którym znajduje się przykładowy kod.
  • Zastąp wartości parametru KEY_FILE_LOCATION odpowiednimi wartościami z Konsoli Play.
  • Zastąp wartość VIEW_ID identyfikatorem widoku, do którego chcesz uzyskać dostę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. Uruchamianie przykładowego

Jeśli używasz IDE, sprawdź, czy Twój domyślny cel uruchamiania jest ustawiony na klasę HelloAnalytics. W przeciwnym razie możesz skompilować i uruchomić aplikację z poziomu wiersza poleceń:

  • Skompiluj próbkę za pomocą:

    javac -classpath '/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting.java
    
  • Uruchom przykład za pomocą polecenia:

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

Gdy wykonasz te czynności, w przykładzie wyświetli się liczba sesji dla danego widoku danych z ostatnich 7 dni.