Введение в Google Analytics API: краткое руководство по Java для установленных приложений

В этом руководстве описывается, как получить доступ к аккаунту Google Analytics, отправлять запросы в API этого сервиса, обрабатывать ответы и извлекать результаты обработки с применением Core Reporting API 3.0, Management API 3.0 и OAuth 2.0.

Шаг 1. Включите Google Analytics API

Перед началом работы с Google Analytics API используйте инструмент настройки, чтобы создать проект в Google API Console, включить API и зарегистрировать учетные данные.

Создайте идентификатор клиента

Откройте раздел "Учетные данные" и выполните следующие действия:

  1. Нажмите Создать учетные данные и выберите Идентификатор клиента OAuth.
  2. В разделе Тип приложения выберите Другие типы.
  3. Введите название.
  4. Нажмите кнопку Создать.

Выберите созданные учетные данные и нажмите Скачать файл JSON. Сохраните файл как client_secrets.json. Он понадобится вам позже.

Шаг 2. Установите клиентскую библиотеку Google

Чтобы установить клиент Java для Google Analytics API, необходимо скачать ZIP-архив, содержащий все файлы JAR. Их нужно извлечь и скопировать в путь к классу Java.

  1. Скачайте клиентскую библиотеку Google Analytics для Java. Она запакована в ZIP-файл со всеми необходимыми взаимосвязями.
  2. Распакуйте ZIP-файл.
  3. Добавьте все файлы JAR из каталога libs в путь к классу Java.
  4. Добавьте файл google-api-services-analytics-v3-[version].jar в путь к классу.

Шаг 3. Настройте пример

Вам нужно создать файл HelloAnalytics.java с кодом этого примера.

  1. Скопируйте или скачайте приведенный ниже код для HelloAnalytics.java.
  2. Переместите ранее загруженный файл client_secrets.json в тот каталог, где находится код примера.
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 com.google.api.services.analytics.Analytics;
import com.google.api.services.analytics.AnalyticsScopes;
import com.google.api.services.analytics.model.Accounts;
import com.google.api.services.analytics.model.GaData;
import com.google.api.services.analytics.model.Profiles;
import com.google.api.services.analytics.model.Webproperties;

import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;


/**
 * Простой пример получения доступа к Google Analytics API.
 */
public class HelloAnalytics {
  // Путь к файлу client_secrets.json, скачанному из Developers Console.
  // Путь задан относительно объекта HelloAnalytics.java.
  private static final String CLIENT_SECRET_JSON_RESOURCE = "client_secrets.json";

  // Каталог, в котором будут храниться учетные данные пользователя.
  private static final File DATA_STORE_DIR = new File(
      System.getProperty("user.home"), ".store/hello_analytics");

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

  public static void main(String[] args) {
    try {
      Analytics analytics = initializeAnalytics();
      String profile = getFirstProfileId(analytics);
      printResults(getResults(analytics, profile));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private static Analytics initializeAnalytics() throws Exception {

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

    // Загрузка секретного кода клиента.
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
        new InputStreamReader(HelloAnalytics.class
            .getResourceAsStream(CLIENT_SECRET_JSON_RESOURCE)));

    // Настройка потока кода авторизации для всех областей применения метода AUTH.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
        .Builder(httpTransport, JSON_FACTORY, clientSecrets,
        AnalyticsScopes.all()).setDataStoreFactory(dataStoreFactory)
        .build();

    // Авторизация.
    Credential credential = new AuthorizationCodeInstalledApp(flow,
        new LocalServerReceiver()).authorize("user");

    // Создание объекта службы Google Analytics.
    return new Analytics.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }


  private static String getFirstProfileId(Analytics analytics) throws IOException {
    // Получение первого идентификатора представления (профиля) для авторизованного пользователя.
    String profileId = null;

    // Запрос списка всех аккаунтов, связанных с сервисным аккаунтом.
    Accounts accounts = analytics.management().accounts().list().execute();

    if (accounts.getItems().isEmpty()) {
      System.err.println("Аккаунты не найдены");
    } else {
      String firstAccountId = accounts.getItems().get(0).getId();

      // Запрос списка свойств, связанных с первым аккаунтом.
      Webproperties properties = analytics.management().webproperties()
          .list(firstAccountId).execute();

      if (properties.getItems().isEmpty()) {
        System.err.println("Свойства не найдены");
      } else {
        String firstWebpropertyId = properties.getItems().get(0).getId();

        // Запрос списка представлений (профилей), связанных с ресурсом.
        Profiles profiles = analytics.management().profiles()
            .list(firstAccountId, firstWebpropertyId).execute();

        if (profiles.getItems().isEmpty()) {
          System.err.println("Представления (профили) не найдены");
        } else {
          // Возвращает первый профиль (представление), связанный с ресурсом.
          profileId = profiles.getItems().get(0).getId();
        }
      }
    }
    return profileId;
  }

  private static GaData getResults(Analytics analytics, String profileId) throws IOException {
    // Запрос к Core Reporting API о количестве сессий
    // за последние семь дней.
    return analytics.data().ga()
        .get("ga:" + profileId, "7daysAgo", "today", "ga:sessions")
        .execute();
  }

  private static void printResults(GaData results) {
    // Синтаксический анализ ответа Core Reporting API на
    // имя профиля и количество сессий.
    if (results != null && !results.getRows().isEmpty()) {
      System.out.println("View (Profile) Name: "
        + results.getProfileInfo().getProfileName());
      System.out.println("Total Sessions: " + results.getRows().get(0).get(0));
    } else {
      System.out.println("Нет результатов");
    }
  }
}

Шаг 4. Запустите пример

После того как вы включили Google Analytics API, установили клиентскую библиотеку Google API для Java и настроили код примера, он готов к запуску.

Если вы используете IDE, убедитесь, что цель запуска по умолчанию определена классом HelloAnalytics.

  1. Приложение загрузит страницу авторизации в браузере.
  2. Если вы ещё не вошли в аккаунт Google, вам будет предложено это сделать. Если вы вошли в несколько аккаунтов Google, вы должны будете выбрать для авторизации один из них.

После выполнения всех шагов будет выведено название первого профиля авторизованного пользователя в Google Analytics и количество сеансов за последние семь дней.

Имея авторизованный служебный объект Analytics, вы можете запустить любой из примеров кода, приведенных в справочных материалах по Management API. Например, можно попробовать изменить код, чтобы использовать метод accountSummaries.list.