Apresentação da Reporting API v4 do Google Analytics: início rápido de Java para contas de serviço

Este tutorial apresenta as etapas necessárias para acessar a API Reporting API v4 do Google Analytics.

1. Ative a API

Para começar a usar a API de relatórios V4 do Google Analytics, primeiro é necessário usar a ferramenta de configuração, que orienta você na criação de um projeto no Console de APIs do Google, na ativação da API e na criação de credenciais.

Criar credenciais

  1. Abra a página Contas de serviço. Se solicitado, selecione um projeto.
  2. Clique em Criar conta de serviço, digite um nome e uma descrição para a conta correspondente. Você pode usar o ID da conta de serviço padrão ou escolher um código diferente e único. Quando terminar, clique em Criar.
  3. A seção seguinte ,Permissões da conta de serviço (opcional), não é necessária. Clique em Continuar.
  4. Em Conceda aos usuários acesso a essa conta de serviço, role a tela para baixo até a seção Criar chave. Clique em Criar chave.
  5. No painel lateral exibido, selecione o formato da sua chave. JSON é a opção recomendada.
  6. Clique em Criar. Seu novo par de chave pública/privada é gerado, e o download é feito na sua máquina. Essa é a única cópia da chave. Para saber mais sobre como armazenar com segurança, consulte Como gerenciar chaves de contas de serviço.
  7. Clique em Fechar na caixa de diálogo Chave privada salva no seu computador e clique em Concluir para retornar à tabela das suas contas de serviço.

Adicionar conta de serviço à conta do Google Analytics

A conta de serviço recém-criada terá um endereço de e-mail com uma aparência semelhante a esta:

quickstart@PROJECT-ID.iam.gserviceaccount.com

Use esse endereço de e-mail para adicionar um usuário à vista do Google Analytics que você quer acessar pela API. Para este tutorial, são necessárias apenas permissões de leitura e análise.

2. Instale a biblioteca cliente

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 da Reporting API v4 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 ao seu caminho de classe.
  4. Adicione o jar google-api-services-analyticsreporting-v4-[version].jar ao seu caminho de classe.

Detalhes do ambiente Java

Eclipse

Para o Eclipse, confira esta pergunta no StackOverflow (link em inglês) para instruções sobre como adicionar JARs ao caminho de classe do seu projeto.

NetBeans

Para o NetBeans, confira esta pergunta no StackOverflow com instruções sobre como adicionar JARs ao caminho de classe do seu projeto.

IntelliJ IDEA

Para o IntelliJ IDEA (link em inglês), consulte esta pergunta no StackOverflow (link em inglês) para instruções sobre como adicionar JARs ao caminho de classe do seu projeto.

Linha de comando

Se você estiver desenvolvendo na linha de comando, adicione o seguinte às suas invocações de comando javac e java:

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

3. Configure a amostra

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

  • Copie ou faça o download do código-fonte a seguir para HelloAnalyticsReporting.java.
  • Mova o client_secrets.json salvo anteriormente para o mesmo diretório que o exemplo de código.
  • Substitua os valores de KEY_FILE_LOCATION pelos valores apropriados do Developer Console.
  • Substitua o valor de VIEW_ID pelo ID da vista que você quer acessar.
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. Executar a amostra

Se você estiver usando um ambiente de desenvolvimento integrado, verifique se tem um destino de execução padrão definido para a classe HelloAnalytics. Em caso negativo, você pode compilar e executar o aplicativo a partir da linha de comando:

  • Compile a amostra usando:

    javac -classpath '/path/to/analyticsreporting/*:/path/to/analyticsreporting/libs/*' HelloAnalyticsReporting.java
    
  • Execute a amostra usando:

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

Quando você concluir essas etapas, a amostra gerará o número de sessões dos últimos sete dias para a vista específica.