Antes de começarmos a desenvolver, vamos entender quais serão os passos realizados pelo script para a montagem do relatório.
Neste passo-a-passo, iremos buscar as 5 páginas mais acessadas nos últimos 30 dias, listá-las em uma tabela e buscar o tráfego de cada uma delas nos 30 dias anteriores, comparando a variação em uma terceira coluna.
O relatório será montado em algumas etapas:
- Acessar a API do GA e extrair as páginas mais acessadas do blog;
- Detectar as 5 páginas mais acessadas;
- Buscar os acessos dessas páginas nos 30 dias anteriores;
- Calcular a variação no tráfego;
- Inserir os dados na planilha;
- Configurar um gatilho para executar o código periodicamente.
O próximo passo é escrever o código que irá montar o relatório. No arquivo do script, delete os códigos existentes para começarmos a desenvolver o script.
Então iremos começar utilizando a API do GA. A documentação dessa API pode ser acessada nesse link, onde podemos encontrar toda a referência para a utilização desse serviço.
Para extrair dados, utilizamos a função:
[cce lang=”javascript”]Analytics.Data.Ga.get(tableId, startDate, endDate, metric, options);[/cce]
Onde:
- tableId: valor referente ao perfil de acesso da conta
- startDate: data do início do período dos dados coletados
- endDate: data do final do período
- metric: valores referentes às metricas que queremos analisar
- options: objeto com algumas opções de busca, como filtro ou dimensões extras
Para auxiliar no preenchimento desses campos, temos o Query Explorer, uma ferramenta que permite experimentar e visualizar combinações desses parâmetros.
No exemplo acima, listamos para nossa conta (o valor do ids é preenchido automaticamente após selecionar a parte superior), para as datas do período e para a métrica de pageviews (visualizações).
Foi configurado ainda como opcional a dimensão (pagePath), ordem de listagem e o filtro (pagePath contém /blog).
Então vamos começar a inserir os primeiros códigos, configurando o período da busca:
Como a função do Analytics utiliza a formatação yyyy-MM-dd, utilizaremos uma função nativa do AppsCripts para ajustar a data que queremos para esse formato.
[cce lang=”javascript”]function getBlogPageviews(){
var today = new Date();
var oneMonthAgo = new Date(today.getTime() – 30 * 24 * 60 * 60 * 1000);
var startDate = Utilities.formatDate(oneMonthAgo, “GMT”, ‘yyyy-MM-dd’);
var endDate = Utilities.formatDate(today, “GMT”, ‘yyyy-MM-dd’);
Logger.log(startDate);
Logger.log(endDate);
} [/cce]
No final desse código utilizamos o Logger, que imprime valores que podem ser lidos em View -> Logs.
Após rodar esses códigos e se certificar de que os períodos estão corretos, vamos inserir a função para coletar os dados do Analytics:
[cce lang=”javascript”]function getBlogPageviews(){
var today = new Date();
var oneMonthAgo = new Date(today.getTime() – 30 * 24 * 60 * 60 * 1000);
var startDate = Utilities.formatDate(oneMonthAgo, “GMT”, ‘yyyy-MM-dd’);
var endDate = Utilities.formatDate(today, “GMT”, ‘yyyy-MM-dd’);
var ids = “ga:number”;
var metrics = ‘ga:pageviews’;
var options = {
‘filters’: ‘ga:pagePath=@/blog/’,
‘dimensions’: ‘ga:pagePath’,
‘sort’: ‘-ga:pageviews’,
‘max-results’: ’50’
};
var ssTable = [];
var report = Analytics.Data.Ga.get(ids, startDate, endDate, metrics, options);
if (report.rows) {
for (var i = 0; i < 10; i++){
ssTable.push(report.rows[i]);
Logger.log(report.rows[i]);
}
}
Logger.log(ssTable);
} [/cce]
Nesse códigos, definimos variáveis para os parâmetros que definimos com o Query Explorer e criamos o objeto com as opções. Então utilizamos a função que o Apps Script oferece para acessar a API. Por fim, passamos os valores do resultado para uma tabela e imprimimos esses valores. Para inserir os resultados na planilha, inserimos o seguinte código no final da função anterior:
[cce lang=”javascript”]var ss = SpreadsheetApp.openByUrl(
‘https://docs.google.com/spreadsheets/d/1AOIg7bkFBqYncnXL_6KSijH3bfziXglKuUWWHJXhdDg/’);
var sheet = ss.getSheetByName(‘Sheet1’);
var tableRange = sheet.getRange(1, 1, ssTable.length, ssTable[0].length); tableRange.setValues(ssTable);[/cce]
Nesse código, acessamos a planilha com o SpreadsheetApp, inserindo a url da planilha criada para o projeto (insira a url da sua planilha). Com a planilha salva em uma variável, definimos qual aba será utilizada (Sheet1 no caso).
Com a aba selecionada, criamos uma variável (tableRange) com o range no qual serão inseridos os dados da tabela. Esse range é definido pela posição da primeira célula (linha e coluna) e depois com o tamanho em linhas e colunas. Esses tamanhos foram obtidos pela propriedade length da variável que contém os valores.
Agora o próximo passo é coletar os valores referentes ao mês anterior.
Para isso, repetiremos a forma com que pegamos os dados do último mês, alterando as datas de início e fim dos períodos usando uma nova data twoMonthsAgo.
[cce lang=”javascript”]var twoMonthsAgo = new Date(today.getTime() – 60 * 24 * 60 * 60 * 1000);
startDate = Utilities.formatDate(twoMonthsAgo, “GMT”, ‘yyyy-MM-dd’);
endDate = Utilities.formatDate(oneMonthAgo, “GMT”, ‘yyyy-MM-dd’);[/cce]
E então faremos uma nova requisição para o GA:
[cce lang=”javascript”]report = Analytics.Data.Ga.get(ids, startDate, endDate, metrics, options);[/cce]
Como esses resultados não estão ordenados da mesma forma que os anteriores, devemos realizar uma busca para cada linha da tabela que queremos analisar, da seguinte forma:
[cce lang=”javascript”]if (report.rows) {
// iterar em cada linha da tabela que queremos montar
for (var i = 1; i <= 10; i++){
// procurar o valor relativo, se não encontrar adiciona 0
var found = false;
for (var j = 0; j < report.rows.length; j++){
if (report.rows[j][0] == ssTable[i][0]){
found = true;
ssTable[i].push(report.rows[j][1]);
ssTable[i].push(j-i+1);
}
}
if (found == false){
ssTable[i].push(0);
ssTable[i].push(99);
}
Logger.log(ssTable[i]);
}
} [/cce]
Nesse código, criamos um loop que passa em cada linha e procura em todos os novos resultados se a página é a mesma. Caso seja, adiciona o valor à linha e também adiciona a variação de posição do mês anterior ao mês atual. Por último, devemos alterar a primeira linha da tabela, editando a linha onde definimos, alterando de:
[cce lang=”javascript”]var ssTable = [[‘Caminho da página’, ‘Visualizações’]];[/cce]
para:
[cce lang=”javascript”]var ssTable = [[‘Caminho da página’, ‘Visualizações’, ‘Visualizações anterior’, ‘Variação Posição’]];[/cce]
E, por último, inserir no final o código para adicionar esses novos dados na tabela (mover para o final).
[cce lang=”javascript”]var tableRange = sheet.getRange(1, 1, ssTable.length, ssTable[0].length);
tableRange.setValues(ssTable);[/cce]
Agora rode e veja na planilha os resultados.