Pesquisando pelos blogs a gente acaba conhecendo vários pacotes que fazem isso. Alguns ótimos, outros exageradamente grandes, mas minha dificuldade sempre foi fazer funcionar através do firewall do escritório. Pesquisei um pouco mais e adotei uma abordagem mais minimalista, baixando os dados direto das APIs dos institutos e trabalhando. Segue um código de exemplo simples, facilmente adaptável e a explicação:
Os dados do BCB estão acessíveis através de endereços web especialmente construídos, que podemos colocar no próprio browser. Vou usar como exemplo a série do IBC-BR, que é a série 24363. O endereço para ela é:
http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json
Se quiser, experimente colar este endereço no seu navegador. Os dados aparecem razoavelmente ordenados, de acordo com o formato JSON. Repare que o número da série é parte do endereço, portanto, para puxar outra série basta substituir o número dela no local correto.
Para o IBC reparei que a série não vai até o final quado chamada neste endereço. Para vir ela toda eu adiciono no fim uma data inicial e ele interpreta que quero tudo, até o fim. O endereço fica assim:
http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json&dataInicial=01/01/2001
Repare que coloquei 2001, mas os dados só começam em 2003. O R possui algumas bibliotecas que lêem os dados no formato JSON, eu escolhi usar a “jsonlite”.
library(jsonlite)
A função que lê os dados JSON é a fromJSON. Na linha a seguir mando ele baixar os dados do endereço, passo pelo fromJSON para traduzir para o formato data.frame e salvo em uma variável.
ibc = fromJSON("http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json&dataInicial=01/01/2001")
Se der um erro provavelmente você está no escritório e a TIC está bloqueando o acesso direto. Contornamos isso baixando os dados primeiro para um arquivo e lendo ele a partir daí.
download.file("http://api.bcb.gov.br/dados/serie/bcdata.sgs.24363/dados?formato=json&dataInicial=01/01/2001","ibcbr.json") ibc = fromJSON("ibcbr.json")
Já podemos ler essa variável IBC no R normalmente, PARECE que está tudo certo. Se analisarmos mais profundamente, no entanto, vemos que os dados estão codificados como “caracteres” e não como números. Vamos fazer a conversão no R mesmo.
ibc$valor = as.numeric(ibc$valor) ibc$data = as.Date(ibc$data,"%d/%m/%Y") ibc plot(ibc, type="l", main="IBC-BR", ylab="", xlab="")
O último gráfico deve ficar assim:
Esse método vale para o BCB, mas para os demais órgãos é semelhante. Só é questão de descobrir como são formados os endereços e qual formato de arquivo eles usam. Por exemplo, no IBGE os endereços são formados com regras de acordo com esta página: http://api.sidra.ibge.gov.br/home/ajuda
Muito boa sua dica! Muito obrigado! Abs
Olá Gabriel,
Tu tivestes algum problema em usar este api recentemente?
Sempre utilizei o teu exemplo para os meus api’s, no entanto agora não estou conseguindo ter acesso aos do SGS pelo api.
Testei aqui e os dois métodos funcionaram pra mim. Qual erro aparece pra você?