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

Organízate con las colecciones Guarda y clasifica el contenido según tus preferencias.

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.

Nota: Para crear un ID de cliente web o un cliente para la aplicación descargada, debes definir un nombre de producto en la pantalla de consentimiento. Si todavía no lo has hecho, se te pedirá que configures la pantalla de consentimiento.

Crear credenciales

  • Abre la página Credentials (Credenciales).
  • Haz clic en Create credentials (Crear credenciales) y selecciona OAuth client ID (ID de cliente de OAuth).
  • En Application type (Tipo de aplicación), selecciona Other (Otro).
  • En el campo del ID de cliente, indica quickstart y haz clic en Create (Crear).

En la página Credenciales, haz clic en el ID de cliente que acabas de crear y, después, en Descargar JSON. Guarda el archivo como client_secrets.json, lo necesitarás más adelante en el tutorial.

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 agregar 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 trabajas desde la línea de comandos, agrega 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 el valor de VIEW_ID por el ID de la vista a la que quieras acceder.
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 java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import com.google.analyticsreporting.v4.AnalyticsreportingScopes;
import com.google.analyticsreporting.v4.Analyticsreporting;
import com.google.analyticsreporting.v4.model.ColumnHeader;
import com.google.analyticsreporting.v4.model.DateRange;
import com.google.analyticsreporting.v4.model.DateRangeValues;
import com.google.analyticsreporting.v4.model.Dimension;
import com.google.analyticsreporting.v4.model.GetReportsRequest;
import com.google.analyticsreporting.v4.model.GetReportsResponse;
import com.google.analyticsreporting.v4.model.Metric;
import com.google.analyticsreporting.v4.model.MetricHeaderEntry;
import com.google.analyticsreporting.v4.model.Report;
import com.google.analyticsreporting.v4.model.ReportRequest;
import com.google.analyticsreporting.v4.model.ReportRow;

/**
 * A simple example of how to access the Google Analytics API.
 */
public class HelloAnalytics {
  // Path to client_secrets.json file downloaded from the Developer's Console.
  // The path is relative to HelloAnalytics.java.
  private static final String CLIENT_SECRET_JSON_RESOURCE = "client_secrets.json";

  // Replace with your view ID.
  private static final String VIEW_ID = "<REPLACE_WITH_VIEW_ID>";

  // The directory where the user's credentials will be stored.
  private static final File DATA_STORE_DIR = new File(
      System.getProperty("user.home"), ".store/hello_analytics");

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

  public static void main(String[] args) {
    try {
      Analyticsreporting service = initializeAnalyticsReporting();

      GetReportsResponse response = getReport(service);
      printResponse(response);
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  /**
   * Initializes an authorized Analytics Reporting service object.
   *
   * @return The analytics reporting service object.
   * @throws IOException
   * @throws GeneralSecurityException
   */
  private static Analyticsreporting initializeAnalyticsReporting() throws GeneralSecurityException, IOException {

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

    // Load client secrets.
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
        new InputStreamReader(HelloAnalytics.class
            .getResourceAsStream(CLIENT_SECRET_JSON_RESOURCE)));

    // Set up authorization code flow for all authorization scopes.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
        .Builder(httpTransport, JSON_FACTORY, clientSecrets,
            AnalyticsreportingScopes.all()).setDataStoreFactory(dataStoreFactory)
        .build();

    // Authorize.
    Credential credential = new AuthorizationCodeInstalledApp(flow,
        new LocalServerReceiver()).authorize("user");
    // Construct the Analytics Reporting service object.
    return new Analyticsreporting.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }

  /**
   * Query the Analytics Reporting API V4.
   * Constructs a request for the sessions for the past seven days.
   * Returns the API response.
   *
   * @param service
   * @return GetReportResponse
   * @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");

    //Create the Dimensions object.
    Dimension browser = new Dimension()
        .setName("ga:browser");

    // Create the ReportRequest object.
    ReportRequest request = new ReportRequest()
        .setViewId(VIEW_ID)
        .setDateRanges(Arrays.asList(dateRange))
        .setDimensions(Arrays.asList(browser))
        .setMetrics(Arrays.asList(sessions));

    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 the 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.

  • La aplicación cargará la página de autorización en un navegador.
  • Si todavía no has iniciado sesión en tu cuenta de Google, se te pedirá que lo hagas. Si has iniciado sesión en varias cuentas de Google, se te pedirá que selecciones una para usarla con la autorización.

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.