Google Analytics libera API para desenvolvedores

Ontem li no Profissionais Web que o Google disponibilizou uma API para o Google Analytics, isso significa que agora será possível desenvolver aplicativos utilizando as estatísticas vindas do Analytics.

Uma verdadeira mão na roda!

 

O que é possível fazer com a API do Analytics?

Com a API significa que você pode ter acesso a TODOS os dados disponíveis no Analytics de um aplicativo terceirizado ou desenvolvido por você, ou em sites de terceiros. Para o meu caso pensei em duas aplicações.

 

1. Exibir relatórios para os clientes em interface própria

 

Atualmente eu trabalho com aplicativos web e com CMS próprio (GS Intra), porém nunca desenvolvi um sistema de estatísticas para ele por dois motivos principais relacionadas ao Analytics:

  • Gratuito
  • Não utiliza recursos do meu servidor
  • Superioridade técnica ao que eu poderia desenvoler

Com o uso da API será possível que eu centralize em um só aplicativo o gerenciamento do conteúdo, dos clientes e estatísticas do site de meus clientes. Não preciso mandar o cliente para um site externo para que ele visualize as estatísticas. Facilita para o cliente, é obviamente é melhor para o desenvolvedor, que agrega mais funcionalidade e valor ao sistema.

 

2. Acompanhar impacto de mudanças no site

Eu tenho sérios problemas para acompanhar o impacto das alterações realizadas no And After. Por exemplo, adiciono um elemento de navegação visando aumentar o tempo médio de visita dentro do site no dia 27 de abril.

Preciso de um log, onde eu adicione nesta data todas as alterações feitas para que posteriormente eu colete informações do "antes e depois". Utilizei por algum tempo o Excel para fazer isso, mas era praticamente no CTRL+C e CTRL+V para mesclar dados do Buscapé, AdSense e Analytics em uma mesma tabela, além das datas das modificações.

Agora é possível eu tem um banco de dados com todas as alterações realizadas em no site (como o exemplo do elemento de navegação) e mesclar com os dados que serão importados da API, facilitando a criação do "antes e depois" das alterações de forma automática. 

Quando (e se) a API do AdSense for liberada então, ficará show. Em um único aplicativo será possível medir o impacto de mudanças nas visitas e rendimentos de um site. 

 

Ta aí a dica para um aplicativo que eu utilizaria. haha 🙂

 

 

Saiba mais sobre a API do Analytics em

Blog oficial do Google Analytics

Google Code Analytics

Javascript

Java

 

 

O que já existe desenvolvido?

Polaris

Até o momento testei um aplicativo desktop, o Polaris. Ele utiliza a plataforma (plataforma?) Adobe Air, e a versão free é extremamente simples de usar.

Apresenta diversas informações em uma pequena janela com uma interface bastante intuitiva. 

Confira algumas telas do Polaris , o  analytics desktop:

Polaris - Google analytics destkop

Polaris - Google analytics destkop

Polaris - Google analytics destkop

Polaris - Google analytics destkop

 

Recomendo! 

 

Mobile

Não testei, mas no blog oficial do Analytics recomendaram uma aplicação Android do Analytics.

 

 

Assim que eu fizer testes com a ferramenta publicarei os resultados e programações aqui no O desenvolvedor, se você já desenvolveu alguma coisa ou quer compartilhas suas idéias pode publicar um artigo ou comentar. 🙂

Biblioteca GD: trabalhe com imagens no PHP

Com PHP é possível além de trabalhar com a saída (x)html ter manipulação de imagens. A biblioteca mais utilizada é a GD – http://br.php.net/gd

Por padrão ela já vem instalada desde a versão 4.3 do PHP, e com ela é possível desde criar imagens do 0, escrevendo textos, usando filtros de opacidade, até criar miniaturas de outras imagens ou, ainda mesclar as mesmas, criando mosaicos e afins, com saídas em formato jpg, png, e por aí vai. As possibilidades são infinitas, e ficam a disposição e necessidade de quem for implementar.

Abaixo segue o exemplo clássico de uso mais simples da biblioteca: criar uma imagem com largura e altura definida, com um texto no miolo dela.

<?php

function createImageWithText($width, $height, $txt) {

       //cria uma imagem com largura x altura definida pelo usuário
        $im = imagecreatetruecolor($width, $height);
        //aloca as cores para imagem
        $text_color = imagecolorallocate($im, 233, 14, 91);
        //escreve o texto na imagem
        imagestring($im, 1, 5, 5,  $txt, $text_color);
       
        //inicia buffer
        ob_start();
        // cria imagem de saída, formato jpeg, bom 85% de qualidade
        imagejpeg($im, NULL, 85);
        //captura saída para string
        $contents = ob_get_contents();
        //finaliza captura
        ob_end_clean();
        //libera memória
        imagedestroy($im);
        //escreve arquivo em disco, usando os comando básicos do PHP
        $fh = fopen("temp/img2.jpg", "w+" );
            fwrite( $fh, $contents );
        fclose( $fh );

   
    }

   createImageWithText(400, 200, "meu texto");

?>

Em breve farei outros posts a respeito!

Como usar o confirm() no javascript

Muitas vezes é necessário interagir com o visitante que está no seu site, e a forma mais trivial é usar o comando confirm() do javascript para isso.

Com ele você pode parar o fluxo que está acontecendo exibindo uma caixa de diálogo – na qual a mensagem exibida é passada como parâmetro para esse comando – na qual o usuário tem a opção de escolher entre Sim e Não (ou Ok e Cancelar, dependendo do browser). Quando o usuário faz a seleção, o comando retorna true ou false, o que possibilita que o fluxo seja alterado.

Um exemplo de uso:

if(confirm("Deseja realmente fazer isso?")) {
  //faz algo, como chamar uma função que apaga dados
} else {
  alert("Ok, você não quer mesmo fazer isso…");
}

Simples e prático!

Como contar arquivos em uma pasta usando ASP (FSO)

Na intranet de um cliente existe um módulo para distribuição de arquivos para os clientes dele, para isso eu utilizo o File System Object (FSO), que navega pelas pastas especificadas do sistema (onde meu cliente sobe diversos arquivos por FTP), identifica os arquivos e distribui cada arquivo para o respectivo usuário final (o cliente do meu cliente).

Com poucos arquivos a distribuição acontece tranquilamente, os arquivos são movidos para a pasta de cada usuário, cada usuário recebe uma notificação por e-mail com o link para a área de login do sistema com acesso aos arquivos. Porém todo o servidor tem um limite para execução de scripts e muitas vezes simplesmente aumentar esse limite de tempo de execução não é recomendável, pois se alguma coisa der errado (como um loop infinito) vai ficar sobrecarregndo o servidor.

New Folder

Isso sim é organizar os documentos em pastas

 

Começaram a acontecer problemas quando existiam muitos arquivos para mover, pois além da listagem de todos os arquivos o sistema segue uma lógica para identificar de qual usuário é cada arquivo para que a distribução seja feita de forma correta.

A solução para não retornar o erro de limite de tempo excedido e não aumentar loucamente este limite (o usuário certamente vai achar que deu erro quando uma página demorar demais para carregar) foi limitar o número de arquivos movimentados por vez, isso permite dar um feedback entre a "paginação" evitando que o usuário pense que o aplicativo travou ou deu erro e clique repetidamente em botões da interface. Eles gostam disso.

Segue uma parte da solução que adotei.

 

Como contar quantos arquivos tem em uma pasta utilizando o FSO?

Quando procurei informações de como contar quantos arquivos existiam em uma pasta a maioria envolvia um loop por todos os arquivos, e isso me lembrou minha experiência com POG: Não programe isso!

Twittei para ver se alguém conhecia uma solução melhor do que um loop, @chrisloki@cleiverrr e @alinedecampos responderam com idéias/sugestões, não achei nenhuma documentação completa do FSO (ok, só dei uma googleada básica) mas resolvi testar algumas coisas como UBound (para pegar o índica mais alto de uma array) e depois um count.

O UBound não funciona, o array de arquivos não pode ser tratado como um normal, mas existe o comando COUNT no FSO, segue abaixo o script para contar quantos arquivos existem em uma pasta:

 

dirtowalk = "../web_users/gssolutions/arquivos/"

Set fs = CreateObject("Scripting.FileSystemObject")

Set f = fs.GetFolder(server.mappath(dirtowalk))

Set fc = f.Files

total = fc.count

response.write "Total de arquivos na pasta " & dirtowalk & ": " & total

 

É isso aí, um simples .count no "array" de arquivos retorna o número de arquivos dentro da pasta. Caso existam subpastas, você teria que criar um loop para ir navegando e somando os arquivos dentro de cada subpasta…

Mais funcional e elegante do que um "For Each arquivo In fc"!

Obrigado a todos os que ajudaram e responderam meus pedidos de socorro no twitter, espero ter ajdado também! 🙂

Usando o comando eval()

Javascript não é uma linguagem tipada. Disso já sabemos. Então, muitas vezes, as coisas não funcionam exatamente como esperamos.

Um caso que acontece muito pode ser simulado nesse exemplo que segue: um formulário com dois campos e uma rotina que executa a soma dos valores dos dois campos:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Exemplo de soma</title>
<script type="application/javascript">
    window.onload = function() {
        document.getElementById("calcular").onclick = function() {
            var val1 = document.getElementById("campo1").value;
            var val2 = document.getElementById("campo2").value;
            alert(val1 + val2);
        }
    }
</script>
</head>
<body>
<h1>Soma – exemplo</h1>
<form action="#" method="post">
    <label for="campo1">campo 1:</label><input type="text" id="campo1" />
    <label for="campo1">campo 2:</label><input type="text" id="campo2" />
    <input type="button" id="calcular" value="calcular" />
</form>
</body>
</html>

Faça um teste preenchendo os inputs com valores numéricos, e clique no botão de calcular. Se você preencher com, por exemplo, 5 e 3, ao clicar no botão terá um alert() com o valor 53.
O que aconteceu? O interpretador do javascript entende que são strings (textos), e a soma que ele faz é, na verdade, uma concatenação das strings.

Como resolver isso?

Existe um comando nativo do javascript, eval(param), que recebe um parâmetro e o interpreta. Mude a linha que faz a soma para

alert(eval(val1) + eval(val2));

E você verá que a soma, que antes era uma concatenação, vai ser feita da forma esperada: somando realmente os valores.

Mas, fica o alerta: usar o comando eval() deve sempre ser muito bem analisado se vale a pena. Uma vez que ele interpreta qualquer comando que está em uma string, você acaba abrindo o seu código para ser executado por terceiros.

Num próximo post mostro como fazer essa soma de uma forma mais elegante!