Explorar dados geográficos e endereços é uma tarefa comum em diversas aplicações web. Uma das formas mais eficientes de fazer isso é através da consulta de CEPs (Códigos de Endereçamento Postal), que permite acessar informações detalhadas de localização com simplicidade e precisão. Neste post, vamos mergulhar no processo de criação de uma função de consulta de CEP em Python, utilizando a API do ViaCEP para transformar um código postal em informações úteis e práticas de endereço.
Nossa principal ênfase é na lógica de consulta de CEPs com Python e no manuseio de dados de APIs externas, mas também mostraremos como integrar essa funcionalidade em uma aplicação web básica usando Flask. Flask é um micro-framework em Python que nos permite criar aplicações web de forma rápida e com poucas linhas de código, perfeito para nosso exemplo prático.
Os tópicos que abordaremos incluem:
- Desenvolvimento de uma função Python para consultar endereços a partir de CEPs.
- Manipulação de respostas de API e tratamento de erros.
- Implementação básica dessa funcionalidade em uma aplicação Flask.
- Criação de um formulário web para interação do usuário.
Este tutorial é ideal tanto para quem está começando com programação em Python e deseja aprender sobre integração com APIs, quanto para aqueles interessados em uma introdução prática ao desenvolvimento web com Flask. Ao final deste post, você terá um exemplo claro de como Python pode ser usado para resolver problemas reais de forma eficiente e como ele pode ser integrado em aplicações web.
Prepare seu ambiente de desenvolvimento e venha descobrir como é fácil e empolgante trabalhar com Python e Flask na consulta de dados geográficos!
pip install requests
import requests
import json
Estas linhas importam as bibliotecas necessárias:
VIA_CEP_URL = "http://www.viacep.com.br/ws/{}/json"
Esta linha define a URL da API do ViaCEP. O {} é um placeholder que será substituído pelo CEP na chamada da função.
def consulta_cep(cep):
Esta linha inicia a definição da função consulta_cep, que recebe um cep como argumento.
resposta = requests.get(VIA_CEP_URL.format(cep))
Usa a biblioteca requests para fazer uma requisição GET para a API do ViaCEP. O cep fornecido na função substitui o {} na URL.
if resposta.ok:
Verifica se a resposta da API foi bem-sucedida (código de status HTTP 200).
endereco = json.loads(resposta.text)
Converte a resposta da API de JSON para um dicionário Python.
if 'erro' in endereco:
raise ValueError("CEP inválido")
Verifica se a resposta contém a chave 'erro', o que indica um CEP inválido. Se sim, levanta uma exceção ValueError.
return {
"bairro": endereco.get("bairro", ""),
"cep": endereco.get("cep", ""),
"cidade": endereco.get("localidade", ""),
"logradouro": endereco.get("logradouro", ""),
"uf": endereco.get("uf", ""),
"complemento": endereco.get("complemento", "")
}
elif resposta.status_code == 400:
raise ValueError("Erro na chamada da API")
Se a resposta da API for um erro de cliente (código de status HTTP 400), levanta uma exceção ValueError.
Essencialmente, a função consulta_cep é uma maneira prática de acessar e processar informações de endereços a partir de um CEP, utilizando a API do ViaCEP e tratando possíveis erros de forma eficiente.
Este é o exemplo completo do código:
import requests
import json
# URL da API ViaCEP
VIA_CEP_URL = "http://www.viacep.com.br/ws/{}/json"
def consulta_cep(cep):
# Realiza a requisição para a API do ViaCEP
resposta = requests.get(VIA_CEP_URL.format(cep))
# Verifica se a resposta é bem-sucedida
if resposta.ok:
endereco = json.loads(resposta.text)
# Checa se o CEP é inválido
if 'erro' in endereco:
raise ValueError("CEP inválido")
# Estrutura os dados do endereço
return {
"bairro": endereco.get("bairro", ""),
"cep": endereco.get("cep", ""),
"cidade": endereco.get("localidade", ""),
"logradouro": endereco.get("logradouro", ""),
"uf": endereco.get("uf", ""),
"complemento": endereco.get("complemento", "")
}
# Trata o caso de erro na requisição
elif resposta.status_code == 400:
raise ValueError("Erro na chamada da API")
# Exemplo de uso
# try:
# resultado = consulta_cep("01001-000")
# print(resultado)
# except ValueError as e:
# print(e)
Aqui concluímos nossa função básica de consulta de cep, agora vou te mostrar como colocar isso tanto em um input para uso no shell como em um formulário Flask para consulta via web.
import requests
import json
VIA_CEP_URL = "http://www.viacep.com.br/ws/{}/json"
def consulta_cep(cep):
resposta = requests.get(VIA_CEP_URL.format(cep))
if resposta.ok:
endereco = json.loads(resposta.text)
if 'erro' in endereco:
raise ValueError("CEP inválido")
return {
"bairro": endereco.get("bairro", ""),
"cep": endereco.get("cep", ""),
"cidade": endereco.get("localidade", ""),
"logradouro": endereco.get("logradouro", ""),
"uf": endereco.get("uf", ""),
"complemento": endereco.get("complemento", "")
}
elif resposta.status_code == 400:
raise ValueError("Erro na chamada da API")
# Capturando o CEP do usuário
cep_usuario = input("Digite o CEP para consulta: ")
try:
resultado = consulta_cep(cep_usuario)
print("\nInformações do Endereço:")
for chave, valor in resultado.items():
print(f"{chave.capitalize()}: {valor}")
except ValueError as erro:
print(f"Erro: {erro}")
Exemplo de uso com página Flask WEB
Primeiro instale o pacote Flask:
pip install Flask
Agora vamos escrever nosso código completo no arquivo app.py
from flask import Flask, render_template, request
import requests
import json
app = Flask(__name__)
VIA_CEP_URL = "http://www.viacep.com.br/ws/{}/json"
def consulta_cep(cep):
response = requests.get(VIA_CEP_URL.format(cep))
if response.ok:
address = json.loads(response.text)
if address.get("erro"):
raise ValueError("CEP inválido")
return {
"bairro": address.get("bairro", ""),
"cep": address.get("cep", ""),
"cidade": address.get("localidade", ""),
"logradouro": address.get("logradouro", ""),
"uf": address.get("uf", ""),
"complemento": address.get("complemento", "")
}
elif response.status_code == 400:
raise ValueError("Erro na chamada da API")
@app.route('/', methods=['GET'])
def index():
return render_template('index.html')
@app.route('/consulta-cep', methods=['POST'])
def consulta():
cep = request.form['cep']
try:
address = consulta_cep(cep)
return render_template('index.html', address=address)
except ValueError as e:
return render_template('index.html', error=str(e))
if __name__ == '__main__':
app.run(debug=True)
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Consulta de CEP</title>
</head>
<body>
<h1>Consulta de CEP</h1>
<form method="post" action="/consulta-cep">
<label for="cep">CEP:</label>
<input type="text" id="cep" name="cep" required>
<button type="submit">Consultar</button>
</form> {% if error %}
{{ error }}
{% endif %} {% if address %}
<h2>Resultado:</h2>
<p>Bairro: {{ address.bairro }}</p>
<p>CEP: {{ address.cep }}</p>
<p>Cidade: {{ address.cidade }}</p>
<p>Logradouro: {{ address.logradouro }}</p>
<p>UF: {{ address.uf }}</p>
<p>Complemento: {{ address.complemento }}</p>
{% endif %}
</body>
</html>
Através deste tutorial, exploramos como Python, em conjunto com o Flask, pode ser utilizado para criar uma aplicação web prática e eficiente. Demonstramos não apenas como realizar um consulta de CEP com Python usando uma API externa, mas também como integrar essa funcionalidade em uma interface web amigável com um formulário HTML.
A simplicidade do Flask o torna uma escolha ideal para prototipagem rápida e desenvolvimento de aplicações web pequenas a intermediárias. Com algumas linhas de código, estabelecemos um servidor web, processamos dados de entrada do usuário e interagimos com uma API externa, provando a eficácia e a eficiência do Flask no ecossistema de desenvolvimento web.
Este exemplo serve como uma ótima base para projetos mais complexos. Você pode expandir essa aplicação para incluir mais funcionalidades, como uma interface mais rica, validação de dados mais robusta ou até mesmo integrar com outras APIs para enriquecer os dados de endereço.
Esperamos que este artigo tenha sido esclarecedor e que inspire você a explorar mais sobre programação em Python e desenvolvimento web com Flask. As possibilidades são vastas, e com as ferramentas certas, você pode criar aplicações incríveis que atendam às suas necessidades e às de seus usuários, para receber mais novidades se inscreva na nossa newsletter, obrigado e até a próxima.
Comentarios Recentes