Este projeto é um script ETL (Extract, Transform, Load) que automatiza a coleta de municípios brasileiros através da API do IBGE e busca CEPs associados utilizando a API do ViaCEP, persistindo os dados em um banco de dados MongoDB.
A maneira mais simples de executar o projeto é utilizando o Docker Compose, que já configura tanto o banco de dados quanto a aplicação.
- Docker instalado
- Docker Compose instalado
-
Subir os Containers: No diretório raiz do projeto, execute:
docker compose up -d
Isso irá:
- Iniciar um container MongoDB.
- Construir a imagem da aplicação Python.
- Iniciar o processo de sincronização automaticamente.
-
Acompanhar os Logs: Para ver o progresso da coleta e sincronização:
docker logs -f cep-app-1
-
Parar a Execução:
docker compose down
A aplicação já está configurada para se conectar ao MongoDB dentro da rede do Docker utilizando a variável de ambiente MONGO_URI definida no docker-compose.yml:
- URI:
mongodb://mongodb:27017/
Se você quiser conectar ao banco de dados usando uma ferramenta externa (como MongoDB Compass ou Robo 3T) enquanto os containers estão rodando:
- Hostname:
localhost - Porta:
27017 - URL de Conexão:
mongodb://localhost:27017/
O script main.py agora conta com maior resiliência e segue o seguinte fluxo:
- Conexão Robusta: O script testa a conexão com o MongoDB via
pinge utiliza um timeout de 5 segundos. Caso o banco não esteja acessível, ele encerra a execução com uma mensagem clara de erro. - Gerenciamento Automático de Índices: Na primeira execução, o script cria automaticamente índices únicos para
ibge_idecep, garantindo performance e evitando dados duplicados no banco. - Coleta de Municípios: Faz uma requisição para a API do IBGE para obter a lista de todos os municípios brasileiros (~5.571).
- Persistência de Municípios: Salva os municípios no MongoDB (coleção
municipios) de forma segura, verificando a estrutura de dados retornada (suporte a diferentes layouts de micro/mesorregião da API IBGE). - Busca de CEPs: Para cada município, faz uma consulta na API ViaCEP.
- Atenção: Como o ViaCEP exige um logradouro, o script utiliza por padrão o termo "Rua" como exemplo pedagógico para buscar os registros.
- Tratamento de Erros e Rate Limit:
- Existe um delay obrigatório de 1.5 segundos entre cada chamada ao ViaCEP para evitar bloqueio de IP.
- O script agora lida de forma isolada com erros em cada município (bloco
try-except), permitindo que a coleta continue mesmo se um município específico falhar.
- Idempotência: O script verifica se o município ou CEP já foi processado antes de fazer uma nova chamada, permitindo retomar a sincronização de onde parou em caso de interrupção.
- Execução via Docker (Recomendada): Utilize o Docker Compose para rodar o projeto, pois ele garante que o MongoDB esteja configurado e acessível na rede interna do Docker. Execuções manuais via
python3 main.pyfora do container podem falhar se o MongoDB não estiver rodando nolocalhost:27017. - Limites da API ViaCEP: A API retorna no máximo 50 registros por consulta.
- Bloqueio de IP: Não reduza o tempo de delay no
main.py, pois o ViaCEP possui mecanismos rígidos contra data mining. Se receber um erro 429, o script aguardará automaticamente 60 segundos antes de tentar novamente. - Banco de Dados: Os dados são persistidos em um volume Docker chamado
mongo-data, garantindo que você não perca os dados ao reiniciar os containers.