Atualização dos Dados de Plantio-ADP
============================================================
Bem-vindo ao Sistema de Atualização dos Dados de Plantio-ADP
Engenheiro de dados: Eduardo Alves de Carvalho
Contato: eduardo@e-setorial.com.br
============================================================
Credencial: app_dba
Conexão com o banco de dados estabelecida.
MENU:
1. Criar estrutura do banco de dados
2. Atualizar dados para um ano específico
3. Apagar dados para um ano específico
4. Contar registros nas tabelas
5. Remover arquivos de cache do Python
6. Remover tabelas - DROP TABLES
7. Iniciar Flask
8. Testar endpoints - Visão do cliente
9. Parar Flask
10. Sair
Escolha uma opção:
.
|-- README.md
|-- airflow
| `-- dags
| `-- airflow_dag.py
|-- api
| |-- __init__.py
| |-- db_operations_api.py
| `-- endpoints.py
|-- api.py
|-- config.py
|-- data
| `-- dct_municipio_uf.csv
|-- data_pipeline
| |-- __init__.py
| |-- api_requests.py
| |-- data_processing.py
| `-- db_operations.py
|-- main.py
|-- requirements.txt
|-- setup_and_run_api.sh
`-- terraform
`-- main.tf
cd ADP
pip install requirements.txt
Ajuste o valor de APP_ENV para app_operator ou app_dba conforme deseje utilizar uma ou outra credencial
APP_ENV=app_operator
#APP_ENV=app_dba
Usuário WebService - Grant de Select
DB_USER_API='insira-seu-usuario'
DB_PASSWORD_API='insira-sua-senha'
DB_HOST_API='insira-seu-host'
DB_PORT_API=3306
DB_NAME_API='insira-seu-banco-de-dados'
JWT_SECRET_KEY='insira-sua-secret-key'
# String_de_conexao_MySQL="mysql+mysqlconnector://insira-seu-usuario@insira-seu-host:3306/insira-seu-banco-de-dados?charset=utf8"
Usuário DBA
DB_USER_APP='insira-seu-usuario'
DB_PASSWORD_APP='insira-sua-senha'
DB_HOST_APP='insira-seu-host'
DB_PORT_APP=3306
DB_NAME_APP='insira-seu-banco-de-dados'
# String_de_conexao_MySQL="mysql+mysqlconnector://insira-seu-usuario@insira-seu-host:3306/insira-seu-banco-de-dados?charset=utf8"
Usuário Operador - Não Dropa nem Recria as tabelas
DB_USER_APP='insira-seu-usuario'
DB_PASSWORD_APP='insira-sua-senha'
DB_HOST_APP='insira-seu-host'
DB_PORT_APP=3306
DB_NAME_APP='insira-seu-banco-de-dados'
# String_de_conexao_MySQL="mysql+mysqlconnector://insira-seu-usuario@insira-seu-host:3306/insira-seu-banco-de-dados?charset=utf8"
Para executar a aplicação:
python3 main.pyPara testar os endpoints protegidos, você precisa primeiro obter um token de acesso. Vamos usar o endpoint /login para isso:
curl -X POST http://localhost:5000/login -H "Content-Type: application/json" -d '{"username": "admin", "password": "admin"}'Isso deve retornar um token JWT:
{
"success": true,
"access_token": "seu-token-jwt"
}Agora, você pode usar esse token para acessar os endpoints protegidos.
- Área Colhida
Endpoint: /area_colhida
Método: GET
Parâmetros Obrigatórios:
municipio_id: Código do município (IBGE)
year: Ano desejado
Exemplo de Chamada da API com curl:
curl -X GET "http://localhost:5000/area_colhida?municipio_id=1100049&year=2020" -H "Authorization: Bearer <YOUR_TOKEN>"Descrição
Esse endpoint retorna a área colhida para o município e ano especificados.
Exemplo de Resposta de Sucesso:
{
"data":{
"area_colhida":1000,
"id_uf_ibge":11,
"municipio_id":"1100049",
"nm_municipio":"Cacoal",
"sg_uf":"RO",
"year":"2020"
},
"message":"Dados recuperados com sucesso",
"success":true
}Exemplo de Resposta de Erro:
{
"success": false,
"data": null,
"message": "Parâmetros obrigatórios: municipio_id, year"
}- Produtividade
Endpoint: /produtividade
Método: GET
Parâmetros Obrigatórios:
estado: Lista de estados brasileiros (UF)
year: Ano desejado
Exemplo de Chamada da API com curl:
curl -X GET "http://localhost:5000/produtividade?estado=SP&estado=RJ&year=2020" -H "Authorization: Bearer <YOUR_TOKEN>"Descrição
Esse endpoint retorna a produtividade para os estados e ano especificados.
Exemplo de Resposta de Sucesso:
{
"data":[
{
"estado":"PR",
"produtividade":"3.7717",
"year":"2020"
},
{
"estado":"SP",
"produtividade":"3.4314",
"year":"2020"
}
],
"message":"Dados recuperados com sucesso",
"success":true
}Exemplo de Resposta de Erro:
{
"success": false,
"data": null,
"message": "Parâmetros obrigatórios: estado, year"
}- Quantidade Produzida
Endpoint: /quantidade_produzida
Método: GET
Parâmetros Obrigatórios:
municipio: Lista de códigos de municípios (IBGE)
ano: Lista de anos desejados
Exemplo de Chamada da API com curl:
curl -X GET "http://localhost:5000/quantidade_produzida?municipio=1100049&municipio=1100130&ano=2020&ano=2021" -H "Authorization: Bearer <YOUR_TOKEN>"Descrição
Esse endpoint retorna a quantidade produzida para os municípios e anos especificados.
Exemplo de Resposta de Sucesso:
{
"data":[
{
"municipio_id":1100049,
"quantidade_produzida":6000,
"year":2021
},
{
"municipio_id":1100049,
"quantidade_produzida":3000,
"year":2020
},
{
"municipio_id":1100130,
"quantidade_produzida":48953,
"year":2021
},
{
"municipio_id":1100130,
"quantidade_produzida":50433,
"year":2020
}
],
"message":"Dados recuperados com sucesso",
"success":true
}Exemplo de Resposta de Erro:
{
"success": false,
"data": null,
"message": "Parâmetros obrigatórios: municipio, ano"
}Exemplo de Resposta de Erro (Excesso de Dados):
{
"success": false,
"data": null,
"message": "Número de dados solicitados excede o limite de 100"
}Para alimentar nossa base de dados, utilizamos dois endpoints da API SIDRA do IBGE. Abaixo estão os detalhes de cada endpoint e exemplos de como utilizá-los.
Este endpoint retorna dados sobre a área colhida para um determinado ano.
URL: https://apisidra.ibge.gov.br/values/t/5457/n6/all/v/216/p/{year}/c782/40124?formato=json
Parâmetros:
year: Ano desejado para a consulta (ex: 2020)
Exemplo de URL:
https://apisidra.ibge.gov.br/values/t/5457/n6/all/v/216/p/2020/c782/40124?formato=json
Este endpoint retorna dados sobre a quantidade produzida para um determinado ano.
URL: https://apisidra.ibge.gov.br/values/t/5457/n6/all/v/214/p/{year}/c782/40124?formato=json
Parâmetros:
year: Ano desejado para a consulta (ex: 2020)
Exemplo de URL:
https://apisidra.ibge.gov.br/values/t/5457/n6/all/v/214/p/2020/c782/40124?formato=json