Introduzione all'API Analytics: guida rapida di Java per le applicazioni installate

Questo tutorial illustra i passaggi necessari per accedere a un account Google Analytics, eseguire query sulle API Analytics, gestire le risposte dell'API e generare i risultati. In questo tutorial vengono utilizzati l'API di reporting principale 3.0, l'API di gestione v3.0 e l'OAuth2.0.

Passaggio 1: attiva l'API Analytics

Per iniziare a utilizzare l'API Google Analytics, devi prima utilizzare lo strumento di configurazione, che ti guida nella creazione di un progetto nella console API di Google, nell'abilitazione dell'API e nella creazione delle credenziali.

Creare un ID client

Dalla pagina Credenziali:

  1. Fai clic su Crea credenziali e seleziona ID client OAuth.
  2. Seleziona Altro per TIPO DI APPLICAZIONE.
  3. Assegna un nome alla credenziale.
  4. Fai clic su Crea.

Seleziona la credenziale appena creata e fai clic su Scarica JSON. Salva il file scaricato come client_secrets.json. Ti servirà più avanti nel tutorial.

Passaggio 2: installa la libreria client di Google

Per installare il client Java dell'API di Google Analytics, devi scaricare un file ZIP contenente tutti i jar che devi estrarre e copiare nel classpath di Java.

  1. Scarica la libreria client Java di Google Analytics, raggruppata come un file ZIP con tutte le dipendenze richieste.
  2. Estrai il file ZIP
  3. Aggiungi tutti i JAR all'interno della directory libs al tuo classpath.
  4. Aggiungi il jar google-api-services-analytics-v3-[version].jar a classpath.

Passaggio 3: configura l'esempio

Devi creare un singolo file denominato HelloAnalytics.java, che conterrà il codice campione fornito.

  1. Copia o scarica il seguente codice sorgente in HelloAnalytics.java.
  2. Sposta l'elemento client_secrets.json scaricato in precedenza all'interno della stessa directory del codice di esempio.
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;


/**
 * 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";

  // 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";
  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);

    // 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 auth scopes.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow
        .Builder(httpTransport, JSON_FACTORY, clientSecrets,
        AnalyticsScopes.all()).setDataStoreFactory(dataStoreFactory)
        .build();

    // Authorize.
    Credential credential = new AuthorizationCodeInstalledApp(flow,
        new LocalServerReceiver()).authorize("user");

    // Construct the Analytics service object.
    return new Analytics.Builder(httpTransport, JSON_FACTORY, credential)
        .setApplicationName(APPLICATION_NAME).build();
  }

  private static String getFirstProfileId(Analytics analytics) throws IOException {
    // Get the first view (profile) ID for the authorized user.
    String profileId = null;

    // Query for the list of all accounts associated with the service account.
    Accounts accounts = analytics.management().accounts().list().execute();

    if (accounts.getItems().isEmpty()) {
      System.err.println("No accounts found");
    } else {
      String firstAccountId = accounts.getItems().get(0).getId();

      // Query for the list of properties associated with the first account.
      Webproperties properties = analytics.management().webproperties()
          .list(firstAccountId).execute();

      if (properties.getItems().isEmpty()) {
        System.err.println("No properties found");
      } else {
        String firstWebpropertyId = properties.getItems().get(0).getId();

        // Query for the list views (profiles) associated with the property.
        Profiles profiles = analytics.management().profiles()
            .list(firstAccountId, firstWebpropertyId).execute();

        if (profiles.getItems().isEmpty()) {
          System.err.println("No views (profiles) found");
        } else {
          // Return the first (view) profile associated with the property.
          profileId = profiles.getItems().get(0).getId();
        }
      }
    }
    return profileId;
  }

  private static GaData getResults(Analytics analytics, String profileId) throws IOException {
    // Query the Core Reporting API for the number of sessions
    // in the past seven days.
    return analytics.data().ga()
        .get("ga:" + profileId, "7daysAgo", "today", "ga:sessions")
        .execute();
  }

  private static void printResults(GaData results) {
    // Parse the response from the Core Reporting API for
    // the profile name and number of sessions.
    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("No results found");
    }
  }
}

Passaggio 4: esegui l'esempio

Dopo aver abilitato l'API Analytics, installato la libreria client delle API di Google per Java e configurato il codice sorgente di esempio, l'esempio è pronto per essere eseguito.

Se utilizzi un IDE, assicurati che sia impostata una destinazione predefinita per l'esecuzione sulla classe HelloAnalytics.

  1. L'applicazione caricherà la pagina di autorizzazione in un browser.
  2. Se non hai ancora eseguito l'accesso al tuo Account Google, ti verrà richiesto di farlo. Se hai eseguito l'accesso a più Account Google, ti verrà chiesto di selezionare un account da utilizzare per l'autorizzazione.

Al termine di questi passaggi, l'esempio restituisce il nome della prima vista (profilo) Google Analytics dell'utente autorizzato e il numero di sessioni negli ultimi sette giorni.

Con l'oggetto di servizio Analytics autorizzato ora puoi eseguire qualsiasi esempio di codice trovato nei documenti di riferimento dell'API Management. Ad esempio, potresti provare a modificare il codice per utilizzare il metodo accountSummaries.list.