@@ -21,95 +21,96 @@ jobs:
2121 - name: Executar Script Python para Baixar e Processar
2222 run: |
2323 python -c """
24- import requests
25- import json
26- import os
27-
28- # Etapa 1: Baixar os dados
29- print('Baixando o arquivo JSON...')
30- url = 'https://estruturaorganizacional.dados.gov.br/doc/estrutura-organizacional/completa.json?codigoPoder=1&codigoEsfera=1&codigoUnidade=86144&retornarOrgaoEntidadeVinculados=SIM'
31- response = requests.get(url)
32- response.raise_for_status()
33- source_data = response.json()
34-
35- # Etapa 2: Pré-processar os dados em uma lista de dicionários mais simples
36- print('Pré-processando JSON...')
37- unidades = source_data.get('unidades', [])
38- dados = [
39- {
40- ' sigla ' : u.get('sigla', ''),
41- ' nome ' : u.get('nome', ''),
42- ' competencia ' : u.get('competencia', ''),
43- ' municipio ' : u.get('endereco', {}).get('municipio', ''),
44- ' uf ' : u.get('endereco', {}).get('uf', ''),
45- ' cep ' : u.get('endereco', {}).get('cep', ''),
46- ' codigoUnidade ' : u.get('codigoUnidade', '').split('/')[-1],
47- ' codigoUnidadePai ' : u.get('codigoUnidadePai', '').split('/')[-1] if u.get('codigoUnidadePai') else None
48- }
49- for u in unidades
50- ]
51-
52- # Função auxiliar para encontrar o caminho completo
53- def caminho_completo(unidade, lista_completa) :
54- caminho = []
55- atual = unidade
56- while atual :
57- caminho.insert(0, atual.get('sigla') or atual.get('nome'))
58- codigo_pai = atual.get('codigoUnidadePai')
59- if not codigo_pai :
60- break
61- # Encontra o próximo pai na lista
62- atual = next((x for x in lista_completa if x.get('codigoUnidade') == codigo_pai), None)
63- return '/'.join(caminho)
64-
65- # Etapa 3: Processar cada unidade para adicionar os campos finais
66- print('Processando cada unidade...')
67- dados_completos = []
68- for u in dados :
69- sigla_completa = caminho_completo(u, dados)
70-
71- # Lógica especial para NURACs
72- if u['sigla'].startswith('NURAC') :
73- partes_nome = u['nome'].split(' ')
74- cidade = partes_nome[6] if len(partes_nome) > 6 else ''
75- estado = partes_nome[7].replace('(', '').replace(')', '') if len(partes_nome) > 7 else ''
76- sigla_corrigida = f'NURAC {cidade} {estado}'
77-
78- partes_caminho = sigla_completa.split('/')
79- if len(partes_caminho) >= 3 :
80- sigla_completa_corrigida = f'{partes_caminho[0]}/{partes_caminho[1]}/{partes_caminho[2]}/{sigla_corrigida}'
81- else :
82- sigla_completa_corrigida = sigla_completa # Fallback
83- else :
84- sigla_corrigida = u['sigla']
85- sigla_completa_corrigida = sigla_completa
86-
87- # Adiciona os novos campos
88- u['siglaCorrigida'] = sigla_corrigida
89- u['siglaCompletaCorrigida'] = sigla_completa_corrigida
90- dados_completos.append(u)
91-
92- # Etapa 4: Salvar o JSON processado
93- with open('estrutura-py.json', 'w', encoding='utf-8') as f :
94- json.dump(dados_completos, f, ensure_ascii=False, indent=2)
95- print('Arquivo estrutura-py.json gerado.')
96-
97- # Etapa 5: Gerar o arquivo HTML
98- print('Gerando arquivo HTML...')
99- html_content = '''
100- <!DOCTYPE html><html lang="pt-BR"><head><meta charset="UTF-8"><title>Estrutura ANAC (Python)</title></head><body>
101- <h1>Estrutura Organizacional ANAC (Gerado com Python)</h1>
102- <table border="1"><thead><tr><th>Sigla</th><th>Sigla Completa</th><th>Nome</th><th>UF</th></tr></thead><tbody>
103- ' ''
104- for item in dados_completos:
105- html_content += f"<tr><td>{item.get(' siglaCorrigida', '')}</td><td>{item.get('siglaCompletaCorrigida', '')}</td><td>{item.get('nome', '')}</td><td>{item.get('uf', '')}</td></tr>\\n"
106-
107- html_content += '</tbody></table></body></html>'
108-
109- with open('estrutura-py.html', 'w', encoding='utf-8') as f :
110- f.write(html_content)
111- print('Arquivo estrutura-py.html gerado.')
112- " " "
24+ import requests
25+ import json
26+ import os
27+
28+ # Etapa 1: Baixar os dados
29+ print('Baixando o arquivo JSON...')
30+ url = 'https://estruturaorganizacional.dados.gov.br/doc/estrutura-organizacional/completa.json?codigoPoder=1&codigoEsfera=1&codigoUnidade=86144&retornarOrgaoEntidadeVinculados=SIM'
31+ response = requests.get(url)
32+ response.raise_for_status()
33+ source_data = response.json()
34+
35+ # Etapa 2: Pré-processar os dados em uma lista de dicionários mais simples
36+ print('Pré-processando JSON...')
37+ unidades = source_data.get('unidades', [])
38+ dados = [
39+ {
40+ 'sigla' : u.get('sigla', ''),
41+ 'nome' : u.get('nome', ''),
42+ 'competencia' : u.get('competencia', ''),
43+ 'municipio' : u.get('endereco', {}).get('municipio', ''),
44+ 'uf' : u.get('endereco', {}).get('uf', ''),
45+ 'cep' : u.get('endereco', {}).get('cep', ''),
46+ 'codigoUnidade' : u.get('codigoUnidade', '').split('/')[-1],
47+ 'codigoUnidadePai' : u.get('codigoUnidadePai', '').split('/')[-1] if u.get('codigoUnidadePai') else None
48+ }
49+ for u in unidades
50+ ]
51+
52+ # Função auxiliar para encontrar o caminho completo
53+ def caminho_completo(unidade, lista_completa):
54+ caminho = []
55+ atual = unidade
56+ while atual:
57+ caminho.insert(0, atual.get('sigla') or atual.get('nome'))
58+ codigo_pai = atual.get('codigoUnidadePai')
59+ if not codigo_pai:
60+ break
61+ # Encontra o próximo pai na lista
62+ atual = next((x for x in lista_completa if x.get('codigoUnidade') == codigo_pai), None)
63+ return '/'.join(caminho)
64+
65+ # Etapa 3: Processar cada unidade para adicionar os campos finais
66+ print('Processando cada unidade...')
67+ dados_completos = []
68+ for u in dados:
69+ sigla_completa = caminho_completo(u, dados)
70+
71+ # Lógica especial para NURACs
72+ if u['sigla'].startswith('NURAC'):
73+ partes_nome = u['nome'].split(' ')
74+ cidade = partes_nome[6] if len(partes_nome) > 6 else ''
75+ estado = partes_nome[7].replace('(', '').replace(')', '') if len(partes_nome) > 7 else ''
76+ sigla_corrigida = f'NURAC {cidade} {estado}'
77+
78+ partes_caminho = sigla_completa.split('/')
79+ if len(partes_caminho) >= 3:
80+ sigla_completa_corrigida = f'{partes_caminho[0]}/{partes_caminho[1]}/{partes_caminho[2]}/{sigla_corrigida}'
81+ else :
82+ sigla_completa_corrigida = sigla_completa # Fallback
83+ else :
84+ sigla_corrigida = u['sigla']
85+ sigla_completa_corrigida = sigla_completa
86+
87+ # Adiciona os novos campos
88+ u['siglaCorrigida'] = sigla_corrigida
89+ u['siglaCompletaCorrigida'] = sigla_completa_corrigida
90+ dados_completos.append(u)
91+
92+ # Etapa 4: Salvar o JSON processado
93+ with open('estrutura-py.json', 'w', encoding='utf-8') as f:
94+ json.dump(dados_completos, f, ensure_ascii=False, indent=2)
95+ print('Arquivo estrutura-py.json gerado.')
96+
97+ # Etapa 5: Gerar o arquivo HTML
98+ print('Gerando arquivo HTML...')
99+ html_content = '''
100+ <!DOCTYPE html><html lang="pt-BR"><head><meta charset="UTF-8"><title>Estrutura ANAC (Python)</title></head><body>
101+ <h1>Estrutura Organizacional ANAC (Gerado com Python)</h1>
102+ <table border="1"><thead><tr><th>Sigla</th><th>Sigla Completa</th><th>Nome</th><th>UF</th></tr></thead><tbody>
103+ '''
104+ for item in dados_completos:
105+ html_content += f"<tr><td>{item.get('siglaCorrigida', '')}</td><td>{item.get('siglaCompletaCorrigida', '')}</td><td>{item.get('nome', '')}</td><td>{item.get('uf', '')}</td></tr>\\n"
106+
107+ html_content += '</tbody></table></body></html>'
108+
109+ with open('estrutura-py.html', 'w', encoding='utf-8') as f:
110+ f.write(html_content)
111+ print('Arquivo estrutura-py.html gerado.')
112+ """
113+
113114 - name: Salvar Artefatos (Python)
114115 uses: actions/upload-artifact@v4
115116 with:
0 commit comments