Salve salve meus amigos! Vamos iniciar mais um post? Espero que todos estejam bem e se cuidando!
Vamos abrir esse tópico falando de um outro processo bem comum na vida de quem quer trabalhar com Data Science. Vamos falar de como realizar o consumo de dados de algum lugar através de uma API.
Bem bacana esse assunto, porém vamos começar a explicar algumas coisas. Primeiro o que é uma API? Por que as empresas ou órgãos públicos possuem esse serviço?
O que é uma API?
API é um conjunto de rotinas e padrões de programação que são criados para permitir o acesso a um aplicativo de software ou plataforma baseado na Web. A sigla API refere-se ao termo em inglês "Application Programming Interface" que significa "Interface de Programação de Aplicativos".
Um grande exemplo de API é o Google Maps. Essa API foi desenvolvida com a intenção de permitir que outras empresas de software desenvolvam seus produtos associados a esse serviço de localização. Encontramos hoje vários desses serviços, que disponibilizam seus códigos e instruções para serem usados em outros sites da maneira mais conveniente para seus usuários.
Resumindo em poucas palavras, as APIs são desenvolvidas sempre que precisamos permitir que objetos externos necessitam interagir com nossos sistemas e para evitar essa interação direta, as APIs são desenvolvidas.
Não entrarei em detalhes sobre APIs, pois não é o nosso foco. Deixo um link para maiores informações a quem interessar! https://becode.com.br/o-que-e-api-rest-e-restful/
Agora que já sabemos um pouco, bem um pouco mesmo sobre APIs, vamos prosseguir.
Para trabalhar nesse post vou usar uma API bem bacana de um assunto pra lá de maneiro! Quem nunca ouviu falar em criptomoedas? Quem nunca ouviu falar em Bitcoin ou Ethereum? E sobre uma site de compras e vendas de criptomoedas chamado Mercado Bitcoin? Isso mesmo, vamos consumir as APIs que o Mercado Bitcoin disponibiliza de forma pública para que sejam possíveis montar painéis maneiríssimos sobre os altos e baixos desse mercado extremamente atraente!
Para começar a entender o mundo que estamos entrando, acessa ai o link.
Link Documentação APIs:
Link Mercado Bitcoin:
Aproveitei e deixei também o link do Mercado Bitcoin, vai que você goste, tenha uma graninha disponível e queira fazer um investimento! Boa sorte!
Essa é a hora de debruçar sobre as informações e conhecer um pouco mais. Olha a informação que eles colocam logo no inicio da página.
"Essa página descreve a API de Dados, uma forma automatizada de obter os dados de negociações do Mercado Bitcoin, em geral de uso de desenvolvedores de software que desejam integrar essas informações a outros sistemas. Por esse motivo, os métodos têm CORS configurado de maneira a permitir chamadas de outros domínios. A documentação abaixo descreve, com exemplos, como utilizar a interface de dados." Fonte: Mercado Bitcoint
Bem bacana! Continuando...
Toda API possui uma estrutura que determina como realizamos a navegação dentro dela. Em nosso caso, vamos observar a estrutura da API que estaremos usando.
Estrutura das Requisições
URL
É necessário fazer uma chamada HTTP, método GET, para a URL https://www.mercadobitcoin.net/api/<coin>/<method>/
Vamos abrir um parêntese aqui para abordar apenas uma definição.
O que é o método GET?
GET essa é a requisição mais comum de todas. Através dessa requisição nós pedimos a representação de um recurso: que pode ser um arquivo html, xml, json, etc.
Agora vamos observar a URL descrita acima. Reparem que ele possui dois parâmetros obrigatórios que são o coin e method.
O coin é qual criptomoeda que analisaremos, no nosso caso será o Bitcoin, usaremos BTC e o method existem 3 (ticker, orderbook e trades) no nosso caso vamos usar o ticker (resumo de operações executadas), pois queremos receber (requisitar) informações da nossa API. Na página acima, existe uma listagem de todas as moedas que é possível buscar e a definição dos métodos.
Com essas informações, nosso URL nasceu!
Basta copiar e colar no navegador para analisar o resultado.
{"ticker": {"high":"349996.80587000","low":"310000.00000000","vol":"243.94709921","last":"324499.92990000","buy":"324174.00196000","sell":"324499.92990000","open":"348699.95000000","date":1618744423}}
Volto a falar da documentação, nela é possível buscar uma breve descrição de cada tag e o tipo de dado.
Bacana demais! Conseguimos passar pelos assuntos, e até mesmo consultar uma API e analisar o seu resultado. Agora vamos entrar no intuito desse nosso post. Imagine o seguinte cenário. Você trabalha em uma empresa do mercado financeiro voltado para investimentos e seu chefe demande para você um dashboard com informações diárias sobre negociações em Bitcoin. Como você sairia dessa furada?
Vou tentar apoiar você nessa missão! Será uma luta de poucos rounds e você sairá como vencedor, acredita em mim?
O primeiro round nos já saímos vencedor pois sabemos o que é um Bitcoin e como e de onde buscar essas informações.
No intervalo seu treinador passou uma informação muito importante sobre o seu oponente! Vamos precisar criar uma rotina para buscar essas informações de forma diária e armazenar em algum lugar. O gongo soou anunciando o inicio do próximo round!
Construindo rotina em Python para ler uma API
Agora vamos ao golpe final. Com a ajuda do nosso amigo Python aliado ao nosso treinador Visual Studio Code, vamos partir pra dentro e ganhar essa luta.
Abra ai o seu Visual Studio Code e mãos na massa! Não quero ver ninguém parado!
Primeiro passo, instalação da biblioteca Requests e JSON.
pip install requests
pip install json
Feito isso, segue o jogo, ou melhor, segue o round. Definir quais bibliotecas vamos precisar.
# Importação das bibliotecas necessárias
import os
import csv
import time
import pandas as pd
import json
from pip._vendor import requests
from datetime import date
Não vou separar em variáveis as partes da URL (coin e method). No passo abaixo, crio uma variável para receber a URL da API e utilizo o método requests.get() da biblioteca Requests para requisitar as informações e o método json.loads() para carregar o retorno do GET que é devolvido em formado JSON.
# URL da API do Mercado Bitcoin
url = 'https://www.mercadobitcoin.net/api/btc/ticker/'
request = requests.get(url=url)
obj = json.loads(request.content)
Podemos colocar no nosso código o comando "print(request.content)", ele nos permite visualizar o retorno em JSON da API.
b'{"ticker": {"high":"349996.80587000","low":"310000.00000000","vol":"247.95538322","last":"320000.02999000","buy":"320000.00000000","sell":"320000.02997000","open":"347100.00000000","date":1618745967}}'
Vamos criar um Dataframe que irá permitir começar a trabalhar a informação.
# Criação do Dataframe, definição do nome das Colunas e datatype
df = pd.DataFrame(list(obj['ticker'].items()),columns = ['tipo','preco'], dtype=str)
df.id = df.preco.astype(str)
Fazendo uma breve pausa e tele transportando para a documentação da biblioteca Pandas para buscar uma definição de Dataframe.
Pandas DataFrame é uma estrutura de dados bidimensional com os dados alinhados de forma tabular em linhas e colunas, mutável em tamanho e potencialmente heterogênea, semelhantemente a uma pasta de trabalho do MS-EXCEL.
Próximo passo é definir quais variáveis vamos usar para transformar esse JSON em um arquivo manipulável e criar uma rotina para definir de forma automática o nome do arquivo e o processo de geração dele.
# Definição de variáveis
diretorioArquivo = 'c:\\Projetos\\python\\'
nomeArquivo = 'btc_ticker_'
nomeArquivoTratado = 'btc_ticker_diario_'
extensaoArquivo = '.csv'
data_atual = date.today()
# Variável que monta o nome do arquivo com os dados retornados conforme API
arquivoCompleto = diretorioArquivo + nomeArquivo + str(data_atual).replace('-','') + extensaoArquivo
# Processo de Gravação do Arquivo em Colunas
df.to_csv(arquivoCompleto)
Para gerar o arquivo vamos usar o método to_csv() da biblioteca Pandas.
Porém esse nosso arquivo está sendo gerado uma linha para cada TAG, conforme imagem abaixo. Vamos aplicar uma técnica chamada PIVOT que auxilia na transposição de linhas em colunas. Veremos como que fica.
No passo abaixo vamos ler o arquivo e transformar suas linhas em colunas.
# Processo de pivot do arquivo para transformar os dados de coluna para linha
arquivoPivot = pd.read_csv(arquivoCompleto)
df = arquivoPivot[['tipo','preco']]
dfArquivofinal = pd.pivot_table(df, values='preco',columns='tipo')
dfFinal = pd.DataFrame(dfArquivofinal)
# Variável que monta o nome do arquivo já com pivot
arquivoCompletoTratado = diretorioArquivo + nomeArquivoTratado + str(data_atual).replace('-','') + extensaoArquivo
# Gera arquivo final
dfFinal.to_csv(arquivoCompletoTratado,sep=';',index=False)
Feito isso os dados no arquivo passam a ser exibidos da seguinte forma.
E para finalizar o nosso script, vamos eliminar o arquivo que não está no formato que precisamos.
# Processo final de exclusão do arquivo
if os.path.exists(arquivoCompleto):
os.remove(arquivoCompleto)
else:
print("Não existe o arquivo '" +arquivoCompleto + "' no diretório!")
Pronto! Mais uma vitória! Falei que sairíamos vencedor!
Vamos agora disponibilizar o código completo!
Show de bola, meu amigo. Parabéns pelo artigo e mais ainda por transmitir o seu conhecimento. Isso faz toda diferença.