Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Informações da matérias não estão sendo recuperados #12

Closed
M3nin0 opened this issue Jan 26, 2018 · 17 comments
Closed

Informações da matérias não estão sendo recuperados #12

M3nin0 opened this issue Jan 26, 2018 · 17 comments

Comments

@M3nin0
Copy link

M3nin0 commented Jan 26, 2018

Ao realizar testes com a API no momento de recuperar algumas informações das matérias, elas não são recuperadas. Tentei usar métodos diferentes que recuperar informações de matéria, no caso testei o getSchedules() e getAcademicCalendar(), e nestes dois casos o nome das matérias não retorna, talvez haja alguma mudança no site, porque os métodos recuperam a sigla normal.

Mesmo que eu tenha feito o teste apenas para recuperar o nome segue um print do retorno do getSchedules()

https://prntscr.com/i657kd

@filipemeneses
Copy link
Owner

Use o getEnrolledDisciplines() para resgatar a maioria dos dados da disciplina. getSchedules() não retorna todo o conteúdo porque extrai de uma página que só contém o código e a turma, se fosse para retornar com todas as informações, seria necessário fazer outra requisição. E no getAcademicCalendar() não tem disciplina mesmo, é uma lista de eventos/feriados.

Hmm, poderia adicionar esses dados com um request a mais, só iria custar uns ms

@M3nin0
Copy link
Author

M3nin0 commented Jan 26, 2018

Beleza! Acho que seria bacana descrever isso na documentação. Existem outros métodos que fazem a busca de todos os dados ? Porque eu registrando eles insiro na documentação.

@filipemeneses
Copy link
Owner

Para disciplina, só o getEnrolledDisciplines() mesmo. É a tela do SIGA com mais dados. Pensando em adicionar um método para preencher a disciplina caso não encontre todos os dados na página

@M3nin0
Copy link
Author

M3nin0 commented Jan 26, 2018

Boa, acho que ai evita exibições sem dado algum mas para os demais dados existe algum método que faça algo parecido com o getEnrolledDisciplines() ?

@filipemeneses
Copy link
Owner

Mapeei os métodos para ver o que retornam nas Discipline:

  approved absenses classHours classroomCode classroomId code courseId frequency grade name periodId presences period quitDate state teacherId teacherName
getSchoolGrade                    
getHistory                  
getSchedules                              
getPartialGrades              
getEnrolledDisciplines              

Retornar uma disciplina completa pelo Account custaria 4 requests a mais. Hm, outro detalhe é que as instâncias não compartilham os dados. Se você chamar o getSchedules() e getHistory() eles podem retornar as mesmas disciplinas, porém como instâncias diferentes.

@M3nin0
Copy link
Author

M3nin0 commented Jan 27, 2018

Caraca, legal, bom saber que eles não compartilham informações, ai já fica claro o que armazenar. Vou fazer os testes nestes métodos, valeu =D

@M3nin0 M3nin0 closed this as completed Jan 27, 2018
@filipemeneses
Copy link
Owner

Vou alterar a API para eles compartilharem informações, depois aproveitar e criar um método para carregar o perfil completo para depois usar qualquer método do Student para pegar os dados. Algo assim:

// loadProfile() faz todas as requisições possíveis, demora mais, mas retorna tudo:
Account.loadProfile().then(() => {
  // depois os dados estarão salvos na instância Account.student:
  Account.student.getEnrolledDisciplines()
  // <- [Discipline, Discipline]
})

@M3nin0
Copy link
Author

M3nin0 commented Jan 27, 2018

A sim, fica mais fácil, inclusive, quando estava testando a API, tem um exemplo na documentação:

const fatecApi = require('fatec-api')
const minhaConta = new fatecApi.Account('LOGIN', 'PASSWORD')

minhaConta.getName().then(nome => {
  console.log(nome)
  // <- 'SEU NOME COM CAPSLOCK'
})

Os dados raspados estão disponíveis em Account.student, continuando o exemplo::

minhaConta.student.getName()

Nesse exemplo ao tentar utilizar o student não consegui recuperar as informações, talvez seja por eles não compartilharem, tentei usando o login e alguns outros e mesmo assim esse e os outros métodos do student não retornaram nada

@M3nin0
Copy link
Author

M3nin0 commented Jan 27, 2018

Na parta da documentação acho bacana escrever um descritivo simples sobre cada classe, porque ai a documentação fica mais coesa, e no caso dos métodos o nome já explica eles.

Ainda sobre as classes, todas elas com exceção do Student e do Account são apenas estruturas para armazenar dados ?

Outra dúvida também é sobre os set, usando ele faço algum POST para o SIGA ? Ou é só para informação local ?

@filipemeneses
Copy link
Owner

Hmm, que estranho, não devia acontecer isso. Fiz um teste com este código com [email protected]:

const minhaConta = new fatecApi.Account('LOGIN', 'SENHA')

minhaConta.getName().then(nome => {
  console.log(minhaConta.student.getName())
  // <- 'SEU NOME COM CAPSLOCK'
})

e consegui resgatar usando o método do student

@M3nin0
Copy link
Author

M3nin0 commented Jan 27, 2018

Este código retorna, porém o minhaConta.student.getName() não, digo isso porque na documentação tem um exemplo com este método do Student.

@filipemeneses
Copy link
Owner

Todas as classes com exceção do Student e da Account são só para armazenar mesmo, setters e getters.

A Account não tem setters e todos os métodos get dela são requisições.
A Student não requisita nada e tem setters e getters.


No exemplo que dei, eu uso o minhaConta.student.getName(). Veja só: https://cl.ly/1I1Q2M2W3h3z

@M3nin0
Copy link
Author

M3nin0 commented Jan 27, 2018

Beleza, pelo que entendi então para usar o student, vou ter que estar na promise ? Correto ? Porque fiz os testes na seguinte ordem:

minhaConta.getName().then(nome => {
 console.log(nome);
})

minhaConta.student.getName();

Ai da forma que fiz então não funciona mesmo ?

@filipemeneses
Copy link
Owner

Aah, entendi a confusão. haha. Na documentação está em um bloco de código, como fosse em outra parte do código em outro momento depois da Promise completar.

O correto é usar:

minhaConta.getName().then(nome => {
  minhaConta.student.getName();
  console.log(nome);
})

Se usar minhaConta.student.getName(); logo depois de minhaConta.getName(), vai receber undefined, a Promise minhaConta.getName() não resolve instantaneamente.

Lembrando que todos os métodos da Account são requisições no SIGA, portanto Promises.

@M3nin0
Copy link
Author

M3nin0 commented Jan 27, 2018

A então beleza, é que estava pensando que o minhaConta armazenava as informações no Student, e que eu pudesse requisitar sempre.

@filipemeneses
Copy link
Owner

minhaConta armazena as informações no Student, depois de ter requisitado no SIGA e tratado os dados.

@M3nin0
Copy link
Author

M3nin0 commented Jan 27, 2018

oks, agora ficou mais claro haha

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants