API de informes Hello Analytics, versión 4: inicio rápido en Java para las cuentas de servicio

Con la ayuda de este tutorial podrás seguir los pasos para acceder a la versión 4 de la API de informes de Analytics.

1. Habilitar la API

Para empezar a utilizar la versión 4 de la API de informes de Analytics, primero debes usar la herramienta de configuración, que te guiará por los pasos necesarios para crear un proyecto en la consola de APIs de Google, habilitar la API y crear las credenciales.

Crear credenciales

  1. Abre la página Cuentas de servicio. Si se te solicita, selecciona un proyecto.
  2. Haz clic en Create service account (Crear cuenta de servicio).
  3. En la ventana Crear cuenta de servicio, escribe el nombre de la cuenta de servicio y selecciona Suministrar una nueva clave privada. A continuación, haz clic en Crear.

El nuevo par de claves pública/privada se genera y se descarga en el equipo, lo que sirve de copia única de esta clave. Eres responsable de almacenarla de forma segura.

Agregar una cuenta de servicio a la cuenta de Google Analytics

La dirección de correo electrónico de la cuenta de servicio que acabas de crear será parecida a esta:

quickstart@PROJECT-ID.iam.gserviceaccount.com

Úsala para añadir un usuario a la vista de Google Analytics a la que quieras acceder a través de la API. En este tutorial solo se necesitan permisos de lectura y análisis.

2. Instalar la biblioteca de cliente

Para instalar el cliente Java de la API de Google Analytics, debes descargar un archivo .zip que contiene todos los archivos .jar necesarios, extraerlos y copiarlos en la ruta de clases de Java.

  1. Descarga la biblioteca de cliente Java de la API de informes de Analytics, versión 4, que está incluida en un archivo .zip con todos los archivos necesarios.
  2. Descomprime el archivo .zip.
  3. Agrega todos los archivos jar del directorio libs a tu ruta de clases.
  4. Agrega el archivo jar google-api-services-analyticsreporting-v4-[version].jar a tu ruta de clases.

Datos del entorno Java

Eclipse

Si usas Eclipse, lee esta pregunta de StackOverflow para saber cómo puedes añadir los archivos .jar en la ruta de clases de tu proyecto.

NetBeans

Si usas NetBeans, lee esta pregunta de StackOverflow para saber cómo puedes añadir los archivos .jar en la ruta de clases de tu proyecto.

IntelliJ IDEA

Si usas IntelliJ IDEA, lee esta pregunta de StackOverflow para saber cómo puedes añadir los archivos .jar en la ruta de clases de tu proyecto.

Línea de comandos

Si programas desde la línea de comandos, añade el código siguiente en las invocaciones de los comandos javac y java:

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

3. Configurar el código de muestra

Deberás crear un archivo denominado HelloAnalyticsReporting.java, que contendrá el código de muestra indicado.

  • Copia o descarga el código fuente siguiente en HelloAnalyticsReporting.java.
  • Traslada el archivo client_secrets.json descargado anteriormente al mismo directorio en el que se encuentra el código de muestra.
  • Sustituye los valores de KEY_FILE_LOCATION por los valores adecuados de Developers Console.
  • Sustituye el valor de VIEW_ID por el ID de la vista a la que quieras 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 el código de muestra

Si utilizas un IDE, comprueba que tengas un destino de ejecución predeterminado configurado como clase HelloAnalytics. De lo contrario, puedes compilar y ejecutar la aplicación desde la línea de comandos:

  • Compila muestra con el siguiente comando:

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

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

Cuando finalices estos pasos, el código de muestra enviará el número de sesiones de los últimos siete días correspondiente a la vista indicada.