-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2,664 changed files
with
8,692,521 additions
and
270,323 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
--- | ||
name: 'Template ' | ||
about: Criar Issue para a sprint | ||
title: Título da ISSUE | ||
labels: '' | ||
assignees: '' | ||
|
||
--- | ||
|
||
# Descrição | ||
Escreva a descrição a aqui... | ||
# Objetivos | ||
- [ ] Escreva os objetivos aqui... | ||
# Responsáveis | ||
@Escreva o nickname dos responsáveis aqui... | ||
# Critérios de avaliação | ||
* Escreva os critérios de avaliação aqui... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
name: Python CI | ||
|
||
on: | ||
pull_request: | ||
push: | ||
branches: | ||
- implementacao | ||
|
||
|
||
jobs: | ||
lint: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Checkout Repository | ||
uses: actions/checkout@v3 | ||
|
||
- name: Instalando o Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '3.10' | ||
|
||
- name: Install dependencies | ||
run: | | ||
python -m pip install --upgrade pip | ||
pip install pylint | ||
pip install selenium | ||
pip install PyPDF2 | ||
- name: Run Pylint | ||
run: | | ||
pylint Camada_Dados/extrair.py | ||
pylint Camada_Dados/regex.py | ||
pylint Camada_Dados/web_scraper.py |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
{ | ||
"nomeMunicipio": "IBIRUBÁ", | ||
"dataPost": "2009-08-20", | ||
"haNomeacao": true, | ||
"haExoneracao": false, | ||
"nomeados/exonerados": { | ||
"nomes_apos_nomeacao": [ | ||
"DOMINGOS TADEU DALLA COSTA", | ||
"MARIA FAGUNDES TOLEDO", | ||
"", | ||
"Jose Dorival Silva da Cruz como Coordenador Administrativo de Obras. \nGUSTAVO ROBERTO SCHROEDER", | ||
"JOSE DORIVAL SILVA DA CRUZ", | ||
"Rene Vicente da Silva como Coordenador do De partamento de Indústria e Comércio.\n \nGUSTAVO ROBERTO SCHROEDER", | ||
"RENE VICENTE DA SILVA", | ||
"Michele Aline Aldebrand Artmann como Assesso ra de Gabinete do Secretário Geral.\nGUSTAVO ROBERTO SCHROEDER", | ||
"MICHELE ALINE ALDEBRAND ARTMANN" | ||
], | ||
"nomes_apos_exoneracao": [ | ||
"DOMINGOS TADEU DALLA COSTA", | ||
"MARIA FAGUNDES TOLEDO" | ||
] | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# Código de Conduta do Squad 8 | ||
|
||
## Objetivo e abrangência do Código: | ||
|
||
Este documento tem como objetivo direcionar e guiar os relacionamentos dentro da produção do projeto, abrangendo a colaboração entre os integrantes do squad/grupo, o contato dos nossos desenvolvedores com os outros grupos envolvidos na disciplina, a nossa comunicação com a professora Carla Rocha, que será nossa orientadora durante a realização do projeto, e, por último, a interação entre a criação do produto e seus usuários. | ||
|
||
Dessa forma, a partir deste código serão definidos princípios básicos que deverão nortear todo o seguimento do projeto, seja no dia a dia, seja em situações de conflito ou obstáculos que possam surgir nas relações interpessoais ou mesmo intrapessoais. | ||
|
||
|
||
## Orientações Gerais de Conduta: | ||
|
||
Em primeiro lugar, é necessário priorizar o respeito aos direitos básicos que devem ser concebidos a todo ser humano, sem distinção. É inaceitável qualquer tipo de discriminação ou ameaça por motivo de intentidade de gênero, orientação sexual, condição social, idade, raça, etnia, religião ou condição de saúde, em qualquer instância, física ou verbal. Garantir o bem-estar de todos os envolvidos é uma responsabilidade geral e imprescindível, a fim de cultivar um ambiente proveitoso e saudável, em que todos se sintam confortáveis para conviver entre si e expressar ideias ou pensamentos pertinentes ao trabalho. | ||
|
||
É de suma importância compreender que o Squad 8 não tolera conflito de interesses entre os seus integrantes, e se opõe fortemente a utilizar qualquer tipo de influência ou responsabilidade para benefício unicamente próprio ou a tirar proveito de uma função ou situação para privilegiar a si mesmo ou a terceiros. | ||
|
||
|
||
## Privacidade e segurança da informação: | ||
|
||
O Squad 8 também preza pela privacidade e a segurança dos dados e informações gerados durante o desenvolvimento do projeto. Há a compreensão de que o trabalho que está sendo produzido faz parte do cumprimento de requisitos para uma disciplina acadêmica, porém todos os dados e arquivos publicados publicamente deverão ser revisados e fiscalizados por todos os integrantes da equipe. Além disso, se alguma outra equipe desejar se inspirar ou utilizar algo criado pelo Squad 8, a equipe em questão precisará entrar em contato conosco e fazer uma solicitação. | ||
|
||
|
||
## Práticas essenciais: | ||
|
||
A produtividade e a eficiência da equipe devem ser priorizadas durante todo o processo de produção. O Squad 8 deve elaborar um plano que especifica os objetivos e tarefas que deverão ser completados a cada ciclo de trabalho (sprint), além de designar a cada tarefa um prazo e um ou mais integrantes para realizá-la. Cabe aos próprios integrantes se planejar e organizar para que não haja desperdício de recursos, esforço ou, especialmente, tempo. | ||
|
||
Por último, a ferramenta mais importante para a realização do projeto e a entrega de um bom produto é a **comunicação**. Todas as decisões, problemas, obstáculos, preocupações ou dificuldades devem ser comunicadas devidamente a toda a equipe. Dessa forma, é possível levantar benefícios e desvantagens de uma ideia, debater uma forma de resolver um problema ou levantar alternativas para o seguimento do projeto. Por isso, lembre-se: caso vocẽ encontre algum empecilho em seu caminho, seja falta de tempo ou disponibilidade, seja um problema pessoal, não hesite em **comunicar** para a equipe, pois juntos podemos encontrar uma solução! |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
|
||
Antes de fazer qualquer alteração no repositório, crie uma issue e se responsabilize por essa alteração. Atente-se a [política de branchs](https://github.com/unb-mds/2023-2-Squad08/blob/main/docs/Pol%C3%ADticas%20/Branches.md) | ||
e a [política de commits](https://github.com/unb-mds/2023-2-Squad08/blob/main/docs/Pol%C3%ADticas%20/Commits.md). | ||
|
||
## Histórico de versões | ||
|
||
| Data | Versão | Descrição | Autor | | ||
| :--------: | :----: | :----------: | :---------------: | | ||
| 23/10/2023 | 0.1 | Envio inicial | [Vitor Feijó](https://github.com/vitorfleonardo)| | ||
|
||
## Criação de Issues | ||
|
||
Ao criar issues atente-se as seguintes questões: | ||
|
||
- Já existe issue referente ao assunto que você pretende abordar na sua? Se sim, trabalhe a partir da issue já criada | ||
- Adicione um título que sintetize bem o problema abordado na issue | ||
- Adicione uma descrição adequada, de modo que qualquer membro do repositório consiga compreender qual é o problema | ||
- Adicione ao menos um Assignee | ||
- Adicione as Labels adequadas | ||
- Adicione a milestone referente a sprint em que o problema será trabalhado | ||
|
||
## Criação de Pull Request | ||
|
||
Ao fazer um pull request atente-se para: | ||
|
||
- Linkar o PR a sua Issue correspondente | ||
- Marcar um dos responsáveis para revisão | ||
|
||
## Dúvidas e sugestões | ||
Se você tiver alguma dúvida ou sugestão sobre como contribuir para o Guia UnB, sinta-se à vontade para entrar em contato com a equipe de desenvolvimento. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,92 @@ | ||
# Implementação WebScrapper | ||
|
||
## Introdução | ||
Uma das etapas iniciais para o desenvolvimento desse projeto é a disposição dos Diarios Oficiais, os arquivos PDF's de cada dia são dispostos no site dos Diarios Oficiais dos Municípios do Rio Grande do Sul, no caso desse estado se tem diarios desde 2009 até o atual ano. Obter esses arquivos manualmente é possível, porém é um processo de acessar cada dia, de cada mês em cada ano e verificar a existência de um arquivo para aquele dia e se sim baixá-lo, o que é extremamente desgastante e passível de erro. Por conta disso, o processo de obtenção de cada um dos PDF's será feito por um bot. | ||
|
||
## Metodologia | ||
|
||
Utilizando do Python e algumas bibliotecas, no qual se destaca a biblioteca Selenium, é possível programar um bot que simule os cliques de um usuário no site. Dessa forma mapeando o caminho que o usuário deveria tomar para acessar cada um destes arquivos manualmente é passado como comandos para o computador que os realizará de forma automática. | ||
|
||
## Programação | ||
Primeiramente é necessário realizar alguns imports que serão necessários para o código: | ||
|
||
~~~python | ||
from selenium import webdriver | ||
from selenium.webdriver.common.by import By | ||
from selenium.webdriver.support.ui import Select | ||
import os | ||
import shutil | ||
import time | ||
import re | ||
~~~ | ||
Após os imports é escolhido o navegador que será usado para realizar essas operações e acoplado o link do site. | ||
|
||
~~~python | ||
driver = webdriver.Chrome() | ||
driver.get("https://www.diariomunicipal.com.br/famurs/o-que-e") | ||
~~~ | ||
|
||
Quando analisado o site é perceptivel que é possível clicar no dia para acessar uma página com seu respectivo PDF, mas o mês e o ano devem ser selecionados numa barra acima. Conseguindo o xpath das seletoras de ano e mês é possível simular o acesso a um mês ou ano específico com o Select. | ||
|
||
~~~python | ||
calendar_month = driver.find_element(By.XPATH,"//*[@id='calendar_month']") | ||
calendar_year = driver.find_element(By.XPATH,"//*[@id='calendar_year']") | ||
|
||
month_selector = Select(calendar_month) | ||
year_selector = Select(calendar_year) | ||
~~~ | ||
|
||
Após isso foi realizado 3 loopings para a passagem de todos os anos, meses e dias, por isso há um contador para cada. Em cada uma das iterações de dia é acionado pela xpath de um dia correspondente ao contador e então é dado um .click() no elemento, o que abre um popup que contém o arquivo que então é selecionado e começa o download na máquina que está executando o código. | ||
Em cada trecho é verificado a existência do bloco de download e se ele existe, se é do tipo simples ou simples2, seguindo de acordo com as inspeções feitas no código do site. | ||
WebDriverWait é um comando para melhor experiência com possíveis delays, já que pode-se inserir um tempo que o código vai esperar para alguma tela ou ação acontecer no site e caso ela aconteca ele ignora o tempo e prossegue o código. | ||
~~~python | ||
if driver.find_element(By.XPATH, "//*[@id='materia-aviso']").get_attribute("style") == "display: block;" or driver.find_element(By.LINK_TEXT, str(contador_dia)).find_element(By.XPATH, './ancestor::td').get_attribute("class") == "weekend ": | ||
print(f'Não tem matéria pra esse dia: {contador_dia}/{contador_mes}/{contador_ano}') | ||
else: | ||
if driver.find_element(By.XPATH, "//*[@id='containerDownload']").get_attribute("style") == "display: block;" and driver.find_element(By.LINK_TEXT, str(contador_dia)).find_element(By.XPATH, './ancestor::td').get_attribute("class") == "weekday ": | ||
|
||
element = WebDriverWait(driver, 20).until( | ||
EC.presence_of_element_located((By.XPATH, "//*[@id='btDownloadSimples']")) | ||
) | ||
PDF = driver.find_element(By.XPATH, "//*[@id='btDownloadSimples']") | ||
print(f'Edição: {contador_dia}/{contador_mes}/{contador_ano}') | ||
|
||
PDF.click() | ||
if driver.find_element(By.XPATH, "//*[@id='containerDownloadNova']").get_attribute("style") == "display: block;" and driver.find_element(By.LINK_TEXT, str(contador_dia)).find_element(By.XPATH, './ancestor::td').get_attribute("class") == "weekday " | ||
element = WebDriverWait(driver, 20).until( | ||
EC.presence_of_element_located((By.XPATH, "//*[@id='btDownloadSimples2']")) | ||
) | ||
PDF = driver.find_element(By.XPATH, "//*[@id='btDownloadSimples2']") | ||
print(f'Edição: {contador_dia}/{contador_mes}/{contador_ano}') | ||
PDF.click() | ||
~~~ | ||
|
||
Ao final, o driver fecha e se inicia outro processo importante para essa etapa, que é a padronização desses documentos para que seja melhor sua manipulação, no código abaixo a variavél arquivos recebe uma lista com todos os documentos na pasta de download e então para cada arquivo ali contido ele usa de um processo de busca por regular expression (Regex), procurando o padrão de 4 digitos-2digitos-2digitos, que corresponde no nome do arquivo a sua data. Então é trocado o nome de cada um para sua data e então printado a data. | ||
~~~python | ||
padrao = r"(\d{4})-(\d{2})-(\d{2})" | ||
arquivos = os.listdir("diretório padrão dos downloads do computador que executar") | ||
caminho = "diretório padrão dos downloads do computador que executar" | ||
for arq in arquivos: | ||
correspondencia = re.findall(padrao, os.path.basename(arq)) | ||
for match in correspondencia: | ||
ano, mes, dia = match | ||
caminhoArq = os.path.join(caminho, arq) | ||
os.rename(caminhoArq, f'{ano}-{mes}-{dia}.pdf') | ||
print(os.path.basename(arq)) | ||
~~~ | ||
Como já descrito acima, os documentos estavam na pasta de downloads, quando renomeados eles são trazidos para a pasta geral do projeto, para organizar isso o código abaixo pesquisa para cada arquivo na pasta geral e que terminam em .pdf para então traze-los a uma pasta específica do projeto. | ||
~~~python | ||
for docs in os.listdir("Pasta geral do Projeto"): | ||
if docs.endswith(".pdf"): | ||
caminhoAtual = os.path.join("Pasta geral do Projeto", docs) | ||
caminhoDestino = os.path.join("Pasta específica do projeto", docs) | ||
shutil.move(caminhoAtual, caminhoDestino) | ||
~~~ | ||
|
||
## Referências | ||
> 1. Documentação da biblioteca Selenium (Documentação não oficial): https://selenium-python.readthedocs.io/. | ||
> 2. Documentação Python/OS: https://docs.python.org/pt-br/3/library/os.html | ||
> 3. Documentação Python/re: https://docs.python.org/pt-br/3/library/re.html | ||
> 4. Documentação Python/shutil: https://docs.python.org/pt-br/3/library/shutil.html | ||
Acessos: As documentações citadas acima foram acessadas durante maior parte dos dias da semana que compreende a Sprint 3 (25/09 a 02/10). |
File renamed without changes.
Binary file not shown.
Binary file not shown.
56 changes: 56 additions & 0 deletions
56
Camada_Dados/dados_para_os_Graficos/resumo_do_ano/Rank.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
{ | ||
"municipios_com_mais_nomeacoes": [ | ||
{ | ||
"municipio": "campo bom", | ||
"nomeacoes": 700, | ||
"exoneracoes": 116 | ||
}, | ||
{ | ||
"municipio": "ibirubá", | ||
"nomeacoes": 598, | ||
"exoneracoes": 100 | ||
}, | ||
{ | ||
"municipio": "santo ângelo", | ||
"nomeacoes": 459, | ||
"exoneracoes": 55 | ||
}, | ||
{ | ||
"municipio": "augusto pestana", | ||
"nomeacoes": 398, | ||
"exoneracoes": 107 | ||
}, | ||
{ | ||
"municipio": "independência", | ||
"nomeacoes": 350, | ||
"exoneracoes": 149 | ||
} | ||
], | ||
"municipios_com_mais_exoneracoes": [ | ||
{ | ||
"municipio": "independência", | ||
"nomeacoes": 350, | ||
"exoneracoes": 149 | ||
}, | ||
{ | ||
"municipio": "campo bom", | ||
"nomeacoes": 700, | ||
"exoneracoes": 116 | ||
}, | ||
{ | ||
"municipio": "santana da boa vista", | ||
"nomeacoes": 194, | ||
"exoneracoes": 111 | ||
}, | ||
{ | ||
"municipio": "augusto pestana", | ||
"nomeacoes": 398, | ||
"exoneracoes": 107 | ||
}, | ||
{ | ||
"municipio": "ibirubá", | ||
"nomeacoes": 598, | ||
"exoneracoes": 100 | ||
} | ||
] | ||
} |
27 changes: 27 additions & 0 deletions
27
Camada_Dados/dados_para_os_Graficos/resumo_do_ano/resultado_dados_grafico_2009.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
[ | ||
{ | ||
"municipio": "boa vista do cadeado", | ||
"nomeacoes": 2, | ||
"exoneracoes": 2 | ||
}, | ||
{ | ||
"municipio": "butiá", | ||
"nomeacoes": 3, | ||
"exoneracoes": 0 | ||
}, | ||
{ | ||
"municipio": "caibaté", | ||
"nomeacoes": 6, | ||
"exoneracoes": 0 | ||
}, | ||
{ | ||
"municipio": "ibirubá", | ||
"nomeacoes": 68, | ||
"exoneracoes": 14 | ||
}, | ||
{ | ||
"municipio": "publicado por gabinete ou afins", | ||
"nomeacoes": 2, | ||
"exoneracoes": 0 | ||
} | ||
] |
22 changes: 22 additions & 0 deletions
22
Camada_Dados/dados_para_os_Graficos/resumo_do_ano/resultado_dados_grafico_2013.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
[ | ||
{ | ||
"municipio": "barros cassal", | ||
"nomeacoes": 68, | ||
"exoneracoes": 2 | ||
}, | ||
{ | ||
"municipio": "ibirubá", | ||
"nomeacoes": 140, | ||
"exoneracoes": 32 | ||
}, | ||
{ | ||
"municipio": "publicado por gabinete ou afins", | ||
"nomeacoes": 5, | ||
"exoneracoes": 3 | ||
}, | ||
{ | ||
"municipio": "são leopoldo", | ||
"nomeacoes": 4, | ||
"exoneracoes": 2 | ||
} | ||
] |
Oops, something went wrong.