Primeiramente e óbvio, é preciso dos dados da conta Google como o e-mail e senha para autenticação. Cada site cadastrado no Analytics tem um ID do Perfil e ele pode ser localizado na seguinte página de Configurações do Perfil. Através desse Id é que consultamos os dados de um determinado site.
Com esses dados em mãos, vamos ao entendimento da integração. O Google disponibilizou um framework que auxilia na consulta e retorno de dados em .NET e ela pode ser baixada no Google GData. Dentro dela contêm vários binários mas precisaremos apenas dos seguintes:
- Google.GData.Analytics.dll
- Google.GData.Client.dll
- Google.GData.Extensions.dll
Adicione-os ao seu projeto. Mas antes de começar a programar isso, vamos ao entendimento das consultas realizadas. No link http://code.google.com/intl/pt-BR/apis/analytics/docs/gdata/gdataExplorer.html tem um simulador que será similar à consulta feita pela sua aplicação. Já no link http://code.google.com/intl/pt-BR/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html contêm toda as especificações necessárias.
Como não gosto de perder tempo e, para muitos pode ser um pouco confuso o seu entendimento logo de cara, vamos fazer uma abstração:
- ids: é o ID do Perfil conforme vimos anteriormente;
- dimensions: vamos "acatar" que seja os relacionamentos (linhas) (não é obrigatório);
- metrics: vamos "acatar" que seja o que deseja buscar (colunas);
- segment: especificação do tipo de consulta (não é obrigatório);
- filters: é o WHERE da consulta (não é obrigatório);
- sort: ordenação (não é obrigatório);
- start-date: data de início (formato yyyy-MM-dd);
- end-date: data final (formato yyyy-MM-dd);
- start-index: serve para paginar dados (como o MySQL usa o LIMIT);
- max-result: quantidade máxima de registros retornados.
Essa é a explicação mais entendível possível e que posso passar para vocês. Logo, antes de botar a mão na massa, sugiro fazer várias simulações e ver como é retornado os objetos. De acordo com a simulação que fiz, por exemplo, e de acordo com a figura seria a seguinte busca:
"Me retorne todas as cidades, que visitaram meu blog, com suas respectivas quantidades de visitas no período de 03/07/2011 a 17/07/2011 ordenada por cidade. Só me traga os 50 primeiros registros."
Então, me seria retornado a seguinte "tabela":
Ficou claro? Tranquilo, né? A pior parte já passou. Agora, porquê escrevi "tabela"... Porque não é! Lembra que abstraímos para que seja isso. Sabendo de como a API trabalha então bastemos implementar. Vamos lá! Pode-se criar uma classe ou incorporar na mesma página o código. Fica a seu critério!
Adicione os seguintes namespaces:
using Google.Analytics;
using Google.GData.Analytics;
using Google.GData.Client;
using Google.GData.Extensions;
Também as variáveis abaixo são necessárias para a devida autenticação e consulta nas quais descrevem:
// Variáveis
string user; // Usuário da Conta Google Analytics
string pass; // Senha da Conta Google Analytics
string id_tabela; // ID do Perfil
// Inicialização
user = "email@gmail.com";
pass = "senha";
id_tabela = "ga:30897221"; // Tem que colocar a string "ga" na frete do ID do Perfil
Agora adicione os seguinte métodos:
/// <summary>
/// Consulta o Analytics
/// </summary>
/// <param name="query"></param>
private DataFeed ConsultaAnalytics(DataQuery query)
{
AnalyticsService asv = new AnalyticsService("gaExportAPI_acctSample_v2.0");
asv.setUserCredentials(user, pass);
String baseUrl = "https://www.google.com/analytics/feeds/data";
query.Ids = id_tabela;
query.Uri = new Uri(baseUrl);
return asv.Query(query);
}
/// <summary>
/// Retorna o resultado da consulta
/// </summary>
/// <param name="query"></param>
/// <returns></returns>
private DataTable RetornaTabela(DataQuery query)
{
DataTable resultado = new DataTable();
DataFeed feed = ConsultaAnalytics(query);
if (feed.Entries.Count > 0)
{
// Cria as colunas
DataEntry colunEntry = feed.Entries[0] as DataEntry;
foreach (Dimension colundimension in colunEntry.Dimensions)
resultado.Columns.Add(new DataColumn(colundimension.Name.Substring(3)));
foreach (Metric colunmetric in colunEntry.Metrics)
resultado.Columns.Add(new DataColumn(colunmetric.Name.Substring(3)));
// Insere os dados
foreach (DataEntry singleEntry in feed.Entries)
{
DataRow rw = resultado.NewRow();
foreach (Metric metric in singleEntry.Metrics)
rw[metric.Name.Substring(3)] = metric.Value;
foreach (Dimension dimension in singleEntry.Dimensions)
rw[dimension.Name.Substring(3)] = dimension.Value;
resultado.Rows.Add(rw);
}
}
return resultado;
}
Óbvio que essas são apenas sugestões de implementações e você podem mudar o quanto achar melhor a depender de sua unidade de negócio. Agora vamos fazer aquela consulta:
// Dados da consulta
DataQuery q = new DataQuery();
q.Dimensions = "ga:city";
q.Metrics = "ga:visits";
q.GAStartDate = DateTime.Parse("03/07/2011").ToString("yyyy-MM-dd");
q.GAEndDate = DateTime.Parse("17/07/2011").ToString("yyyy-MM-dd");
q.Sort = "ga:city";
q.NumberToRetrieve = 50;
// Resultado
DataTable resultado = RetornaTabela(q);
Pronto! Irá me retornar um DataTable com aquela tabela de dados. Basicamente todas aquelas informações que você vê no Analytics são vindas em formato tabela e que, posteriormente, são feitos tratamentos e cálculos sobre eles. Como disse no início do artigo, agora basta usar a tabela de dados conforme desejar...
Espero que tenham gostado depois de um tempo sem postar nada...
3 comentários:
Muito massa cara, sempre quis fazer esse tipo de integração mas nunca consegui, vlw!
Funcionou de prima! Muito obrigado ...
Não consegui, como coloco o no webform, uma tabela com um id? se sim qual?
Postar um comentário