Um sistema de automação robótica de processos (RPA) para consultar, processar e armazenar informações de países através da API REST Countries.
Funcionalidades • Instalação • Uso • Estrutura • Tecnologias
Este projeto foi desenvolvido como parte da disciplina de Robotic Process Automation (RPA). O sistema automatiza o processo de:
- 📝 Coletar nomes de países do usuário
- 🌐 Buscar informações detalhadas na API REST Countries
- 🔍 Filtrar e processar os dados recebidos
- 💾 Armazenar no banco de dados SQLite
- ✅ Validar duplicatas antes de inserir
- ✅ Consulta Automatizada: Busca dados de 3 países por execução
- ✅ API REST Countries: Integração com API pública usando endpoints
/translatione/name - ✅ Suporte Multilíngue: Aceita nomes de países em português (com acento) e inglês
- ✅ Banco de Dados Local: Armazenamento em SQLite na pasta
data/ - ✅ Validação de Duplicatas: Impede inserção de países já cadastrados
- ✅ Filtro por Correspondência Exata: Seleciona automaticamente o país correto em casos de múltiplos resultados
- ✅ Feedback Visual: Mensagens informando status das operações em tempo real
- Python 3.8 ou superior
- pip (gerenciador de pacotes Python)
- Clone o repositório
git clone https://github.com/Impacta-Projetos/Ap2-RPA.git
cd Ap2-RPA- Instale as dependências
pip install -r requirements.txt- Execute o programa
python main.pypython main.pyExemplo de interação:
Digite o nome do 1º país: brasil
Digite o nome do 2º país: china
Digite o nome do 3º país: japão
✓ País 'brasil' inserido com sucesso!
✓ País 'china' inserido com sucesso!
✓ País 'japão' inserido com sucesso!
O projeto segue uma arquitetura modular organizada em camadas funcionais distintas, facilitando manutenção e evolução do sistema.
| Campo | Tipo | Descrição |
|---|---|---|
id |
INTEGER | Chave primária (auto incremento) |
nome_comum |
TEXT | Nome comum do país |
nome_oficial |
TEXT | Nome oficial completo |
capital |
TEXT | Capital do país |
continente |
TEXT | Continente onde se localiza |
regiao |
TEXT | Região geográfica |
subregiao |
TEXT | Sub-região específica |
populacao |
INTEGER | População total |
area |
REAL | Área territorial (km²) |
moeda_nome |
TEXT | Nome da moeda oficial |
moeda_simbolo |
TEXT | Símbolo da moeda |
idioma_principal |
TEXT | Idioma principal |
fuso_horario |
TEXT | Fuso horário principal |
bandeira_url |
TEXT | URL da imagem da bandeira |
- Python 3.13 - Linguagem principal
- SQLite3 - Banco de dados relacional
- REST Countries API - API de dados geográficos
- Requests - Requisições HTTP
O sistema aceita nomes de países em:
- ✅ Português com acento: França, México, Japão, Suíça
- ✅ Inglês: France, Mexico, Japan, Switzerland
- ✅ Nomes compostos: Estados Unidos, Reino Unido, África do Sul
| Nome Digitado | País Retornado | Status |
|---|---|---|
china |
China (People's Republic of China) | ✅ |
frança |
France (French Republic) | ✅ |
estados unidos |
United States | ✅ |
japão |
Japan | ✅ |
mexico |
Mexico | ✅ |
alemanha |
Germany | ✅ |
- ❌ Apelidos não oficiais (ex: "EUA", "Inglaterra") não são reconhecidos pela API
- ❌ Nomes sem acento em português (ex: "franca", "japao") podem não funcionar
- ✅ Recomendação: Digite o nome completo com acentuação correta
O sistema utiliza dois endpoints da API REST Countries para máxima compatibilidade:
-
/translation/{pais}- Busca por nomes traduzidos (aceita português)- Permite buscar "França", "México", "Japão" diretamente
- Retorna países que contêm o termo buscado em suas traduções
-
/name/{pais}- Fallback para nomes em inglês- Usado quando o endpoint de tradução falha
- Garante compatibilidade com nomes em inglês
# Busca primeiro por tradução, depois por nome em inglês
url_translation = f"https://restcountries.com/v3.1/translation/{pais}"
# Se falhar, tenta:
url_name = f"https://restcountries.com/v3.1/name/{pais}"Quando a API retorna múltiplos países (ex: "China" e "Taiwan" para busca "china"), o sistema:
- Compara o termo pesquisado com:
- Nome comum em inglês
- Nome oficial
- Tradução em português
- Se encontrar correspondência exata, usa esse país
- Caso contrário, usa o primeiro resultado
# Exemplo: Busca por "china"
# Verifica: nome_pt.lower() == "china"
# ✅ Retorna: China (People's Republic of China)
# ❌ Ignora: Taiwan (Republic of China)Antes de inserir um país, o sistema verifica se já existe:
cursor.execute('SELECT id FROM paises WHERE nome_comum = ?', (nome_pais,))
if cursor.fetchone():
print("⚠ País já existe no banco de dados!")- ✅ API indisponível ou país não encontrado
- ✅ Dados incompletos na resposta da API
- ✅ Duplicatas no banco de dados
- ✅ Criação automática do diretório
data/
Para cada país, são extraídos 13 campos da API:
| Categoria | Campos |
|---|---|
| Identificação | Nome comum, Nome oficial |
| Localização | Capital, Continente, Região, Sub-região |
| Demografia | População |
| Geografia | Área territorial |
| Economia | Moeda (nome e símbolo) |
| Cultura | Idioma principal |
| Outros | Fuso horário, URL da bandeira |
$ python main.py
Digite o nome completo do 1º país que deseja buscar: Brasil
Digite o nome completo do 2º país que deseja buscar: China
Digite o nome completo do 3º país que deseja buscar: Japão
✓ País 'brasil' inserido com sucesso!
✓ País 'china' inserido com sucesso!
✓ País 'japão' inserido com sucesso!Observação: O sistema aceita nomes em português (com ou sem acento) e inglês.
$ python main.py
Digite o nome completo do 1º país que deseja buscar: Brasil
Digite o nome completo do 2º país que deseja buscar: Alemanha
Digite o nome completo do 3º país que deseja buscar: México
⚠ País 'brasil' já existe no banco de dados!
✓ País 'alemanha' inserido com sucesso!
✓ País 'méxico' inserido com sucesso!$ python main.py
Digite o nome completo do 1º país que deseja buscar: xyzabc
Digite o nome completo do 2º país que deseja buscar: Portugal
Digite o nome completo do 3º país que deseja buscar: Espanha
✗ Não foi possível obter dados para 'xyzabc'
✓ País 'portugal' inserido com sucesso!
✓ País 'espanha' inserido com sucesso!Esta seção apresenta o fluxo completo de execução do sistema através de imagens que demonstram cada etapa do processo.
O sistema inicia com o código principal (main.py) executando os imports necessários dos módulos paises e dos arquivos do core (input, filter, insert).
O banco de dados SQLite é criado automaticamente na pasta data/ e a conexão é estabelecida para preparar o ambiente de armazenamento.
A tabela paises é criada no banco com todos os campos necessários para armazenar as informações completas de cada país.
A função obter_paises() executa um loop (cont de 1 a 3) solicitando ao usuário o nome dos países desejados através de input(), armazenando cada entrada em uma lista e retornando essa lista.
Resultado da função obter_paises() mostrando os 3 países que foram inseridos pelo usuário, armazenados na variável paises_lista.
Para cada item da lista de países, é chamada a função filtrar_dados(), que por sua vez chama a função buscar_pais() para processar as informações.
A função buscar_pais() faz uma requisição HTTP para a API REST Countries:
- Primeiro tenta o endpoint
/translationpara buscar o nome em português - Se status 200: retorna os países encontrados
- Caso contrário: tenta o endpoint
/namepara buscar pelo nome em inglês
Quando a API retorna múltiplos países para uma busca (como "França"), o primeiro resultado pode não ser o país desejado. Aqui vemos um exemplo de JSON retornado pela API REST Countries, que será processado pela função filtrar_dados().
O sistema implementa um algoritmo que percorre todos os países retornados e verifica correspondência exata entre:
- Nome buscado vs.
name.common(nome comum em inglês) - Nome buscado vs.
name.official(nome oficial) - Nome buscado vs.
translations.por.common(nome em português, se disponível)
Quando encontra correspondência exata no loop, a variável pais_info recebe os dados do país correto. O algoritmo interrompe o loop (break) e processa apenas esse país específico. Os dados são organizados no dicionário pais_data.
A função insert_pais() recebe dois parâmetros: pais_data (dicionário com dados extraídos) e nome_buscado (string original digitada pelo usuário). Primeiro executa:
SELECT id FROM paises WHERE nome_comum = ?Se o país já existe: exibe "⚠ País já existe!" e retorna False
Se não existe: executa INSERT com os 13 campos e retorna True
Mensagens de confirmação após todos os países serem processados e inseridos no banco de dados.
Visualização final da tabela paises no banco de dados com os 3 países buscados e todos os dados solicitados devidamente preenchidos.
graph TD
A[Início - main.py] --> B[Criar/Conectar BD]
B --> C[Criar Tabela países]
C --> D[obter_paises()]
D --> E[Lista de 3 países]
E --> F[Para cada país: filtrar_dados()]
F --> G[buscar_pais() - API Request]
G --> H{Status 200?}
H -->|Sim| I[Processar JSON]
H -->|Não| J[Tentar endpoint /name]
I --> K[Filtrar país correto]
K --> L[insert_pais()]
L --> M{Já existe?}
M -->|Sim| N[Exibir: Já existe]
M -->|Não| O[INSERT no BD]
O --> P[Próximo país]
P --> Q[Fechar conexão]
Q --> R[Fim]
Contribuições são bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/MinhaFeature) - Commit suas mudanças (
git commit -m 'Adiciona MinhaFeature') - Push para a branch (
git push origin feature/MinhaFeature) - Abra um Pull Request
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Felipe Viana e Ryan Rodrigues Cordeiro
⭐ Se este projeto foi útil, considere dar uma estrela!











