GeovaneSchmitz / sigaa-api

Unofficial high performance API for SIGAA (Sistema Integrado de Gestão de Atividades Acadêmicas) using web scraping.
MIT License
43 stars 12 forks source link

Proposta de adição - Listar turmas disponibilizadas #39

Open Raphides opened 1 year ago

Raphides commented 1 year ago

Descrição

Na página /sigaa/public/turmas/listar.jsf dos SIGAAs, vemos uma página que lista cada disciplina oferencida de um determinado campus e período letivo. Esta página mostra dados interessantes de cada disciplina que podem ser interessantes de serem analisadas em diversas atividades de análise de dados, como:

* Muitas salas estão como "A definir", o que atrapalha análises dessas informações. ** Pelo jeito, nem todos os SIGAAs e períodos letivos mostram as vagas que foram disponibilizadas.

Exemplo

Penso que a API possa gerar uma lista em JSON, do mesmo padrão da feita em em search.teacher().getCampusList(). Como uma espécie de search.getSubjectList(campus) ou algo parecido.

[
  {
    ID: "FCI0001",
    name: "TÓPICOS ESPECIAIS EM BIBLIOTECONOMIA E CIÊNCIA DA INFORMAÇÃO",
    turmas: [
                   {
                     ID: 1,
                     professor: "AILTON LUIZ GONCALVES FEITOSA",
                     local: "FCI - LEV",
                     horário: "6M1234"
                   },
                 ]
  },
]

Fonte do exemplo: https://sigaa.unb.br/sigaa/public/turmas/listar.jsf no dept de Faculdade de Ciência de Dados - 2023.1

Dificuldade Prevista

(To estudando ainda, então posso estar bem errado)

Dei uma olhada no código que há na API e acredito que não seja algo complicado de fazer. Não precisa de autenticação nenhuma, a parte provavelmente mais difícil deve ser o método http.POST que deve ser feito para que os resultados da pesquisa apareçam na página web. Esse método pelo que eu tinha visto precisa de um cookie do http.GET da página para não gerar erros, mas como vocês parecem já ter uma interface para a extração dos Cookies da página, deve ser simples.

Observações

Essa funcionalidade era algo que eu estava tentando fazer antes de conhecer o repositório. Assim que conheci, percebi que vocês têm muita mais estrutura que eu para de fato implementá-la, além de combinar muito com o intuito da API.

Espero que tenham gostado da proposta.

dduartee commented 1 year ago

Gostei da ideia, inclusive poderiamos aproveitar e listar todos os câmpus da instituição, o método dos câmpus já existe no SigaaSearchTeacher mas não há o método na classe SigaaSearch.

Raphides commented 1 year ago

Por enquanto abri uma Fork para ver se consigo implementar esta funcionalidade. Qualquer ajuda é bem vinda, já que não sou muito experiente em Typescript e requisições HTTP.

dduartee commented 1 year ago

Umas semanas atrás, tiveram duas issues #36 e #31, que não estavam conseguindo usar a biblioteca, por causa da build do npm. Veja se não dará nenhum erro...

Inclusive, sobre a issue #36, fiz uma branch que já está começando a se adequar ao UNB, mas ainda não completamente funcional. Por enquanto desenvolva essa feature no seu fork e depois organizamos na hora do merge.

Raphides commented 1 year ago

Gerou alguns erros durante os testes e umas mensagens de erros esquisitos durante a execução, mas o json foi formado sem problemas pelo que me parece. Só o erro dos testes que está me irritando, falei mais disso na nova issue #41

dduartee commented 1 year ago

quais são as mensagens dos erros?

sobre o erro do decorator, um tempo atrás rodei os testes e vi que o target.kind no teste estava retornando undefined. Resolvi tirar essa linha de verificação, pois não estava conseguindo resolver, mas vou estudar mais um pouco.

Raphides commented 1 year ago

Foi mal, mas confesso que fui instalar novamente pelo npm e as mensagens de erro sumiram ;-; Ainda bem que anotei as do decorador.