Closed wisentini closed 1 year ago
Claro, qualquer abordagem que retorne os dados necessários é muito bem vinda, facilitará pra mim implementar em um container docker o sistema e deixar disponível para acesso geral.
O endpoint GET /api/campi/{campus}/cursos/{curso}/horarios
já está quase implementado, eu só preciso saber se o retorno dele é o suficiente. Segue abaixo um exemplo do schema que é retornado.
{
"ano": 2023,
"campus": "Santa Maria",
"carga_horaria_disciplina": 120,
"codigo_curso": "307",
"codigo_disciplina": "ELC1074",
"creditos_disciplina": 5,
"curso": "Ciência da Computação - Bacharelado",
"dia_semana": "Terça-feira",
"disciplina": "PROJETO DE SOFTWARE II",
"docentes": [
"ANDREA SCHWERTNER CHARAO",
"JOAO VICENTE FERREIRA LIMA"
],
"horario_fim": "15:30:00",
"horario_inicio": "13:30:00",
"periodo": "2. Semestre",
"periodo_disciplina": 99,
"tipo_disciplina": "Teórica",
"vagas_aumentadas": 0,
"vagas_ocupadas": 0,
"vagas_oferecidas": 15
}
Perfeito, vou ver de implementar algum banco nosql depois pra auxiliar.
Massa!
Quando a página de horários do curso é acessada, são realizadas duas requisições interessantes:
POST
curso=701
POST
curso=701&ano=2023&periodo=102
Essas duas requisições retornam arquivos JSON com todos os dados necessários para montar a página de horários do curso, o que seria ótimo, pois eliminaria a necessidade de fazer scraping. Além disso, os dados seriam os mesmos utilizados pela UFSM, sem correr o risco de capturar dados incorretos do HTML.
No entanto, o
host
(portal.ufsm.br) aceita apenas requisições efetuadas pelaorigin
ufsm.br. Para contornar esse problema, eu utilizei a biblioteca selenium-wire, que permite inspecionar as requisições feitas pelo site no momento em que ele é carregado. A partir dela, é possível recuperar os arquivos JSON e mapeá-los para objetos Python, o que facilita o acesso às informações necessárias.A minha pergunta é: no contexto desse projeto, seria interessante usar essa abordagem ao invés de scraping? Se sim, eu poderia ficar responsável por isso, já que o código está praticamente pronto.