domingo, 23 de fevereiro de 2014

APIs e novas funções do Excel 2013 para acessar dados na internet

Faz tempo, né?
Mas espero que este post seja bem interessante para os meus dois leitores...

O tema: algo que vem me fascinando há algum tempo - APIs ou "Application Programmable Interfaces", Interfaces que muitos sites tem para facilitar a consulta e o uso dos dados neles hospedados.

Em muitos casos, para usar uma API, basta o registro do seu e-mail (verdadeiro, pois nele você receberá um link para confirmação ou a sua própria senha (key) de acesso).

Os termos para utilização variam muito de site para site, e o número de consultas que é permitido no plano gratuito também.

E o que eu quero fazer?

Mostrar como você pode utilizar o Excel 2013 que tem 3 lindas funções para Web para fazer consultas direto a uma API, SEM NECESSIDADE de qualquer programação!

Neste caso usarei a API do site  http://www.wunderground.com/, que fornece dados gratuitos sobre o tempo atual e a previsão ds próximos dias. Os limites de uso para o registro gratuito são bem apertados, confesso que "estourei" o meu pois você pode fazer só 10 consultas por minuto, e fiz bem mais que isso.

Qual era meu objetivo?


Descobrir as condições do tempo em diversas cidades brasileiras. Veja o resultado a seguir para algumas cidades. Note que eu usei os códigos dos aeroportos. Por exemplo, CGH é o aeroporto de Congonhas, e GRU é o de Guarulhos, e ambos servem São Paulo. Por que fiz isso? Em alguns casos o site do wunderground nao conseguia achar os dados para a cidade, e tive a ideia de procurar por aeroporto. Bingo! Existiam informações para todos os aeroportos que eu queria...


Agora que você já viu que funciona, vamos ao "como fazer"...

Atenção - o help do Excel 2013 em inglês tem um "how to" excelente para o uso destas novas funções, e inclusive usa o mesmo site como exemplo, mas procura por dados nos EUA, o que leva a uma consulta um pouco diferente.

Supondo que você já tenha se registrado no site e tenha obtido sua API_key, e a colocado numa célula da planilha que eu convenientemente chamei de (adivinhe?) API_key, o próximo passo é escrever o comando:

=SERVIÇOWEB("http://api.wunderground.com/api/"&API_Key&"/geolookup/conditions/forecast/q/Brazil/"&C$4&".xml")

O que a célula C$4 contém? Na planilha que eu acabei de mostrar para vocês, o código do aeroporto, por exemplo, SDU para o Santos Dumont.

O resultado da função SERVIÇOWEB acima é um arquivo .xml que tem um MONTE de informações sobre o local que você está investigando, inclusive a previsão dos próximos dias. Esta função SERVIÇOWEB é talvez a mais importante das 3 novas funções para Web do Excel 2013, e em seguida mostraremos outra.

Suponha que o resultado da função SERVIÇOWEB acima esteja na célula C3 da sua planilha.

Como eu falei, o conteúdo desta célula C3 é um arquivo .xml, no qual você tem que "pescar" a informação que te interessa (e este tem sido o meu grande problema). Para isso use a função FILTROXML, a segunda das 3 novas do Excel 2013.

Por exemplo:
=FILTROXML(C$3;"//local_time_rfc822")
Fornece a data e horário da consulta. No caso da imagem neste post, o resultado é:
Sun, 23 Feb 2014 15:16:32 -0300

Em resumo, a sintaxe da função FILTROXML é: FILTROXML(cél. que contem o arquivo xml, xpath).

E onde está a encrenca? Em definir o xpath...
No meu caso está sendo meio tentativa e erro - funciona mais ou menos como estrutura de diretórios e subdiretórios e existem aplicativos que "pegam" um arquivo .xml e te dizem qual o xpath correto para o "pedaço" de informação que você quer. Em teoria... na prática não consegui fazer funcionar para mim!

O post está meio grande e eu vou me despedindo, mas antes gostaria de dizer que:

1) O Yahoo tem uma API maravilhosa (e grátis), inclusive com uma linguagem de programação moleza, que é uma parente de SQL mas é uma obviedade! Lindo!

2) Existe um número enorme (e crescente) de APIs. Neste momento em que escrevo o post, o site: www.programmableweb.com  lista 11063 APIs, sendo que 53 foram adicionadas nos últimos 7 ias e 208 nos últimos 30 dias. Isso deve significar algo, não é?

3) É claro que você pode programar as suas chamadas às APIs. Em R existe um pacote XML, mas eu ainda não usei. Ex