Blog

Postado em em 15 de setembro de 2022

APIs com Paginação em Python – API do Banco Central

Hoje eu vou te mostrar como trabalhar com APIs com paginação em Python para que consiga buscar o que precisa em várias páginas!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

https://youtu.be/GGkUt4hy0T8

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

APIs com Paginação em Python

A ideia dessa aula é te mostrar como trabalhar com APIs com paginação utilizando a API dinheiro em circulação do banco central.

APIs que possuem paginação nada mais são do que APIs que vão te retornar os resultados em páginas, ou seja, vamos ter que fazer mais de uma requisição para obter tudo.

API do Banco Central

É claro que você não precisa obter tudo se não quiser, mas esse tipo de API separa os resultados em páginas.

Vamos ao exemplo para que você entenda como utilizar essa API com paginação. Lembrando que vamos utilizar a API do banco central.

A documentação você pode encontrar no link abaixo para visualizar as informações e tirar suas dúvidas em relação a API.

https://dadosabertos.bcb.gov.br/dataset?res_format=API

import requests

link = "https://olinda.bcb.gov.br/olinda/servico/mecir_dinheiro_em_circulacao/versao/v1/odata/informacoes_diarias?$top=10000&$orderby=Data%20desc&$format=json"

requisicao = requests.get(link)
informacoes = requisicao.json()


# import pprint

# pprint.pprint(informacoes)

Aqui nesse primeiro código nós temos a importação da biblioteca requests, que é uma biblioteca para fazer a requisição para API, então você precisa dela instalada.

Feito isso nós vamos utilizar o link para fazer a nossa requisição, esse link possui o código do recurso que é o tipo de informação que vamos buscar: diária ou com categoria.

E vamos ter outros parâmetros. Não se preocupe que tudo isso está na documentação, então pode acessar o link abaixo para ver o link de requisição e os parâmetros que pode utilizar nessa solicitação.

https://dadosabertos.bcb.gov.br/dataset/dinheiro-em-circulao/resource/03906f0c-6c5e-4fda-aa03-6b571cbc9753

Feito isso temos o código para pegar (get) uma informação, ou seja, de fato fazer a requisição nesse link.

Depois vamos apenas trazer as informações que estão no formato json que é o formato padrão dessa API.

OBS: A parte que está comentada utiliza a biblioteca pprint para que você consiga visualizar o resultado em json de uma forma mais organizada. Isso melhora a visualização e as informações não ficam todas em um único bloco.

Para o segundo bloco de código nós vamos utilizar a biblioteca pandas para visualizar esses dados em formato de tabela, o que facilita tanto a visualização quanto a análise dos dados.

import pandas as pd

tabela = pd.DataFrame(informacoes["value"])

tabela["Valor"] = tabela["Valor"].map("R${:,.2f}".format)

display(tabela)

Vamos importar a biblioteca e vamos transformar as informações em um dataframe, que é basicamente uma matriz, ou seja, vamos ter linhas e colunas.

A linha de código logo abaixo é para transformar a informação da coluna de valor em um formato de moeda, pois assim fica muito mais fácil visualizar os dados.

Caso você não faça isso vai visualizar uma coluna com números sem nenhuma separação o que dificulta na análise de dados.

OBS: Mas se for fazer algum tratamento depois pode utilizar os dados normalmente e formatar somente no final!

Informações em formato de tabela já com formatação de moeda
Informações em formato de tabela já com formatação de moeda

Esse é o resultado da transformação das nossas informações em uma tabela. Só que você deve ter notado que temos 10.000 linhas.

Aqui é onde temos a parte de paginação dessa API. Cada requisição dessa API te permite buscar uma página com 10.000 informações, então o que fazer se quisermos buscar todas as informações?

# pegar todas as informacoes com varias requisiçoes

tabela_final = pd.DataFrame()
pular_indice = 0

while True:
    link = f'https://olinda.bcb.gov.br/olinda/servico/mecir_dinheiro_em_circulacao/versao/v1/odata/informacoes_diarias?$top=10000&$skip={pular_indice}&$orderby=Data%20desc&$format=json'
    requisicao = requests.get(link)
    informacoes = requisicao.json()
    tabela = pd.DataFrame(informacoes["value"])
    if len(informacoes['value']) < 1:
        break
    tabela_final = pd.concat([tabela_final, tabela])
    pular_indice += 10000

display(tabela_final)

Para isso vamos utilizar esse código com a estrutura de repetição While. Aqui nós vamos fazer a requisição para obter as informações dessa API.

OBS: Dentro da documentação e da parte do ponto de acesso da API, você vai poder testar no próprio site alguns parâmetros e vai notar que temos um chamado top e skip.

O parâmetro top, vai informar quantas informações vamos pegar de uma vez, sendo que esse máximo é de 10.000.

Já o parâmetro skip indica quantas informações nós vamos pular para começar a obter novas informações.

Então para esse código nós vamos de 10.000 em 10.000 já que a API só consegue retornar um máximo de 10.000 informações em cada requisição.

O nosso código vai fazer a primeira requisição dos primeiros 10.000 dados e vai juntar isso dentro de um dataframe, depois vamos adicionar mais 10.000 ao nosso skip para podermos obter as próximas informações.

Você deve ter notado que temos uma função if dentro desse código, isso é para verificar se a quantidade de informações de valores dentro da requisição é menor do que 1.

Mas porque esse teste? Isso é apenas para sabermos quando as informações terminaram, pois como estamos utilizando uma estrutura while precisamos dizer a ela quando parar.

Imagine que você tenha as informações em páginas e temos 9 páginas de informação, o que acontece se você visualizar a página 10?

Não vai ter nenhuma informação, então quando formos verificar se a coluna de valores é menor do que 1, isso será verdadeiro, então vamos utilizar o comando break para sair do loop.

Com isso você evita um loop infinito, ou seja, você evita com que o seu código fique rodando infinitamente.

Obtenção de todos os dados das páginas
Obtenção de todos os dados das páginas

Aqui você vai notar que temos 9 páginas de informações, então temos quase 90.000 informações que conseguimos obter dessa API.

Claro que você pode pegar apenas informações específicas quando estamos tratando de uma API com paginação.

Como temos os parâmetros top e skip você pode pegar as informações que quiser com a combinação deles.

Conclusão – APIs com Paginação em Python

Nessa aula eu te mostrei como fazer usar a API dinheiro em circulação do banco central para trabalhar com APIs com paginação.

Esse tipo de API é muito comum, então você tem informações em páginas, que pode obter somente uma página ou parte dela, ou pegar todas as informações que ela oferece com uma estrutura de repetição.

Então a ideia foi te mostrar como pegar informações com várias requisições para que tenha as informações completas de uma API.

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero na linguagem de programação que mais cresce no mundo? Inscreva-se gratuitamente no Intensivão de Python!