DEV Community

Cover image for Como consumir uma API em Python
mph7
mph7

Posted on

Como consumir uma API em Python

​ Hoje em dia, temos varios serviços conectados, enviando e recebendo dados, através de diversas formas, uma delas sendo atraves de APIs, que são intermediários que permitem que dois softwares se comuniquem, e hoje iremos aprender a consumir uma API em Python.


Com qual API iremos nos conectar?

​ Primeiramente, utilizaremos uma API chamada ViaCEP, oque ela faz, em poucas palavras, é receber o numero de um CEP e devolver as informações sobre aquele CEP informado.

Primeiros passos

​ Para podermos nos conectar à API, precisaremos da biblioteca request, então iremos importa-la e montar a estrutura básica do nosso código:

import requests

def main():


if __name__ == '__main__':
    main()
Enter fullscreen mode Exit fullscreen mode

​ Todo nosso código será escrito dentro da função main.

​ No contexto da nossa API, precisaremos de um CEP para realizar nossa pesquisa, e o mesmo será digitado pelo usuário que utilizar o programa:

cep = input('Digite o CEP para a consulta: ')
Enter fullscreen mode Exit fullscreen mode

​ Um CEP é composto de 8 dígitos, algo fora disso é considerado um CEP inválido, então podemos conferir se o CEP é válido para prosseguir, ou pedir um novo CEP até receber um com 8 dígitos:

while 1:
    cep = input('Digite o CEP para a consulta: ')

    if len(cep) != 8:
        break
    print('Quantidade de dígitos inválida.')
Enter fullscreen mode Exit fullscreen mode

​ Agora que temos um CEP com uma quantidade de dígitos válida, podemos começar a interagir com a API em si, no site oficial temos o formato de URL que será utilizada:

https://viacep.com.br/ws/01001000/json/

​ '01001000' será o local onde irá o CEP, e json será o formato que receberemos as informações. Podemos então substituir e fazer o request:

request = requests.get('https://viacep.com.br/ws/{}/json/'.format(cep))
Enter fullscreen mode Exit fullscreen mode

​ A função .get nos permite extrair o conteúdo da URL com as informaçoes, as duas chaves {} marcam um local que podemos substituir por alguma coisa usando a função .format(), e substituímos pelo CEP.

​ Já que nosso arquivo é um json, podemos apresentar como um json usando a função .json():

address_data = request.json()
Enter fullscreen mode Exit fullscreen mode

​ Um arquivo json pode se transformar em um dicionário em Python, o que facilita para utilizar os valores, sendo necessário apenas informar a chave como index, vamos observar o arquivo json da API no cep 01001000:

{
  "cep": "01001-000",
  "logradouro": "Praça da Sé",
  "complemento": "lado ímpar",
  "bairro": "Sé",
  "localidade": "São Paulo",
  "uf": "SP",
  "ibge": "3550308",
  "gia": "1004",
  "ddd": "11",
  "siafi": "7107"
}
Enter fullscreen mode Exit fullscreen mode

​ Nesse caso, queremos mostrar ao usuários somente alguns dos dados, sendo o CEP, logradouro, complemento, bairro, localidade e o estado, estas são as chaves que utilizarem no nosso dicionário, mas só podemos mostrar se o CEP for válido, no caso de CEP inválido recebemos um json com um erro:

{
  "erro": true
}
Enter fullscreen mode Exit fullscreen mode

​ Então iremos excluir resultados com erros, e formatar o texto para mostrar de uma forma mais organizada:

if "erro" not in address_data:
    print("### CEP ENCONTRADO ###")
    print("CEP: {}".format(address_data["cep"]))
    print("Logradouro: {}".format(address_data["logradouro"]))
    print("Complemento: {}".format(address_data["complemento"]))
    print("Bairro: {}".format(address_data["bairro"]))
    print("Cidade: {}".format(address_data["localidade"]))
    print("Estado: {}".format(address_data["uf"]))

else:
    print("{}: CEP Inválido".format(cep))

Enter fullscreen mode Exit fullscreen mode

​ Como dito, basicamente formate o texto usando o dicionário com os índices desejados. Com isso novo programa está praticamente pronto, podemos incluir no final também uma opção para o usuário poder reutilizar e pesquisar um CEP novamente:

option = int(input("Deseja realizar uma nova consulta? \n1. Sim\n2. Sair\n"))
if option == 1:
    main()
else:
    print("Saindo...")
Enter fullscreen mode Exit fullscreen mode

​ Chamando a função main(), todo o processo irá ocorrer novamente, e isso você pode modificar da maneira que desejar para mostrar os dados, inclusive, podemos colocar um cabeçalho no começo antes de inserir o CEP:

print("#" * 30)
print("#" * 7, " Consultar CEP ", "#" * 7)
print("#" * 30, "\n")
Enter fullscreen mode Exit fullscreen mode

​ O programa funcionando:

CEP com menos de 8 dígitos

​ No caso de um CEP com menos de 8 Dígitos:

image

​ E no caso de um CEP inválido:

CEP inválido

​ E assim temos um programa funcional para consulta de CEP utilizando uma API, se você leu até aqui, espero que você tenha aprendido, você pode conferir o código aqui, obrigado por ler e até uma próxima!

Discussion (0)