API de Hello Analytics Reporting v4; guía de inicio rápido de Java para cuentas de servicio

En este instructivo, se explican los pasos necesarios para acceder a la API de Analytics Reporting v4.

1. Habilita la API

Para comenzar a usar la API de Analytics Reporting v4, primero debes usar la herramienta de configuración, que te guiará para crear un proyecto en la Consola de API de Google, habilitar la API y crear credenciales.

Crea credenciales

  1. Abre la página Cuentas de servicio. Si se te solicita, selecciona un proyecto.
  2. Haz clic en Crear cuenta de servicio y, luego, ingresa un nombre y una descripción para la cuenta de servicio. Puedes usar el ID predeterminado de la cuenta de servicio o elegir uno que sea único y diferente. Cuando hayas terminado, haz clic en Crear.
  3. No es obligatoria la sección de Permisos de cuenta de servicio (opcional) que aparece a continuación. Haz clic en Continuar.
  4. En la pantalla Otorga a usuarios acceso a esta cuenta de servicio, desplázate hacia abajo hasta encontrar la sección Crear clave. Haz clic en Crear clave.
  5. En el panel lateral que aparece, selecciona el formato para tu clave. Se recomienda el código JSON.
  6. Haz clic en Crear. Ya se generó y descargó el nuevo par de claves pública y privada en tu equipo, que será la única copia. Para obtener más información a fin de almacenarla de forma segura, consulta Cómo administrar claves para cuentas de servicio.
  7. Haz clic en Cerrar, en el diálogo Se guardó la clave privada en tu computadora, y luego haz clic en Listo para regresar a la tabla de tus cuentas de servicio.

Agrega una cuenta de servicio a la cuenta de Google Analytics

La cuenta de servicio recién creada tendrá una dirección de correo electrónico similar a esta:

quickstart@PROJECT-ID.iam.gserviceaccount.com

Usa esta dirección de correo electrónico para agregar un usuario a la vista de Google Analytics a la que deseas acceder a través de la API. Para este instructivo, solo se necesitan los permisos de lectura y análisis.

2. Instala la biblioteca cliente

Para instalar el cliente Java de la API de Google Analytics, debes descargar un archivo ZIP que contenga todos los archivos jar que necesitas extraer y copiar en tu ruta de clase de Java.

  1. Descarga la biblioteca cliente de Java de la API de Analytics Reporting v4, que se incluye como un archivo ZIP con todas las dependencias necesarias.
  2. Extrae el archivo ZIP.
  3. Agrega todos los archivos JAR dentro del directorio libs a tu ruta de clase.
  4. Agrega el jar google-api-services-analyticsreporting-v4-[version].jar a la ruta de clase.

Detalles del entorno de Java

Eclipse

Para Eclipse, consulta esta pregunta de StackOverflow y obtén instrucciones para agregar archivos JAR a la ruta de clase de tu proyecto.

NetBeans

Para NetBeans, consulta esta pregunta de StackOverflow a fin de obtener instrucciones para agregar archivos JAR a la ruta de clase de tu proyecto.

IntelliJ IDEA

Para IntelliJ IDEA, consulta esta pregunta de StackOverflow y obtén instrucciones para agregar archivos JAR a la ruta de clase de tu proyecto.

Línea de comandos

Si desarrollas desde la línea de comandos, agrega lo siguiente a tus invocaciones de comandos javac y java:

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

3. Configura la muestra

Deberás crear un solo archivo llamado HelloAnalyticsReporting.java, que contendrá el código de muestra dado.

  • Copia o descarga el siguiente código fuente en HelloAnalyticsReporting.java.
  • Mueve el client_secrets.json descargado previamente al mismo directorio que el código de muestra.
  • Reemplaza los valores de KEY_FILE_LOCATION con los valores adecuados de Play Console.
  • Reemplaza el valor de VIEW_ID por el ID de la vista a la que deseas acceder.
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. Ejecutar la muestra

Si usas un IDE, asegúrate de tener un objetivo de ejecución predeterminado establecido en la clase HelloAnalytics. De lo contrario, puedes compilar y ejecutar la aplicación desde la línea de comandos:

  • Compila la muestra con el comando siguiente:

    javac -classpath '/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting.java
    
  • Ejecuta la muestra con el comando siguiente:

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

Cuando termines estos pasos, la muestra mostrará la cantidad de sesiones de los últimos siete días para la vista determinada.