Introdução à Google Analytics API: início rápido de Java para contas de serviço

Este tutorial mostra as etapas necessárias para acessar uma conta do Google Analytics, consultar as APIs do Google Analytics, lidar com as respostas da API e gerar os resultados. A API de relatórios principais v3.0, a API de gerenciamento v3.0 e o OAuth2.0 são usados neste tutorial.

Etapa 1: ativar a Google Analytics API

Para começar a usar a Google Analytics API, primeiro use a ferramenta de configuração, que fornece orientações para você criar um projeto no console de APIs do Google, ativar a API e criar credenciais.

Criar um Client-ID

  1. Abra a página Contas de serviço. Se solicitado, selecione um projeto.
  2. Clique em Criar conta de serviço.
  3. Na janela Criar conta de serviço, digite um nome para a conta de serviço e selecione Fornecer uma nova chave privada. Se você deseja conceder autoridade em todo o domínio do G Suite à conta de serviço, selecione também Ativar a delegação em todo o domínio do G Suite. Em seguida, clique em Criar.

Seu novo par de chave pública/privada é gerado, e o download dele é feito na sua máquina. Essa é a única cópia da chave. Você é responsável por armazená-la com segurança.

Adicionar conta de serviço à conta do Google Analytics

A conta de serviço recém-criada terá um endereço de e-mail, <projectId>-<uniqueId>@developer.gserviceaccount.com. Use-o para adicionar um usuário à conta do Google Analytics que você deseja acessar por meio da API. Apenas para este tutorial, são necessárias permissões de leitura e análise.

Etapa 2: instalar a biblioteca cliente do Google

Para instalar o cliente Java da Google Analytics API, você precisa fazer o download de um arquivo zip com todos os JARs necessários para extrair e copiar para seu classpath Java.

  1. Faça o download da Biblioteca cliente Java do Google Analytics, que está agrupada como um arquivo ZIP com todas as dependências necessárias.
  2. Extraia o arquivo ZIP.
  3. Adicione todos os JARs no diretório libs para seu classpath.
  4. Adicione o google-api-services-analytics-v3-[version].jar ao seu classpath.

Etapa 3: Configurar a amostra

Você precisa criar um único arquivo chamado HelloAnalytics.java, que conterá o código de amostra fornecido.

  1. Copie ou faça o download do código-fonte de amostra a seguir para o HelloAnalytics.java.
  2. Mova o client_secrets.p12 recebido anteriormente para o mesmo diretório que o código de amostra.
  3. Substitua os valores de SERVICE_ACCOUNT_EMAIL e KEY_FILE_LOCATION pelos valores apropriados do Developers Console.
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 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;

/**
 * A simple example of how to access the Google Analytics API using a service
 * account.
 */
public class HelloAnalytics {

  private static final String APPLICATION_NAME = "Hello Analytics";
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  private static final String KEY_FILE_LOCATION = "/path/to/your.p12";
  private static final String SERVICE_ACCOUNT_EMAIL = "<SERVICE_ACCOUNT_EMAIL>@developer.gserviceaccount.com";
  public static void main(String[] args) {
    try {
      Analytics analytics = initializeAnalytics();

      String profile = getFirstProfileId(analytics);
      System.out.println("First Profile Id: "+ profile);
      printResults(getResults(analytics, profile));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

  private static Analytics initializeAnalytics() throws Exception {
    // Initializes an authorized analytics service object.

    // Construct a GoogleCredential object with the service account email
    // and p12 file downloaded from the developer console.
    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(httpTransport)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
        .setServiceAccountPrivateKeyFromP12File(new File(KEY_FILE_LOCATION))
        .setServiceAccountScopes(AnalyticsScopes.all())
        .build();

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

Etapa 4: executar a amostra

Depois de você ter ativado a Google Analytics API, instalado a biblioteca cliente de APIs do Google para Java e configurado o código-fonte de amostra, a amostra estará pronta para ser executada.

Se você usa um IDE, verifique se tem uma execução padrão definida para a classe HelloAnalytics. Em caso negativo, você pode compilar e executar o aplicativo a partir da linha de comando:

  1. Compile a amostra usando:
    javac -classpath /path/to/google/lib/*:/path/to/google/lib/libs/* HelloAnalytics.java
  2. Execute a amostra usando:
    java -classpath ./:/path/to/google/lib/*:/path/to/google/lib/libs/* HelloAnalytics

Quando você concluir essas etapas, a amostra gerará o nome da primeira vista da propriedade (perfil) do Google Analytics do usuário autorizado, além do número de sessões dos últimos sete dias.

Com o objeto de serviço autorizado do Google Analytics, agora você pode executar qualquer uma das amostras de código nos documentos de referência da API de gerenciamento. Por exemplo, você pode tentar alterar o código para usar o método accountSummaries.list.