kevincianfarini / pyvt
Virginia Tech Calendario delle Lezioni API Python
Installazione
pip install py-vt
Utilizzo
Importare il Calendario
from pyvt import Timetable
L’API fornisce l’accesso al Calendario attraverso un Calendario di oggetti.
timetable = Timetable()
L’oggetto Timetable fornisce alcuni metodi utili per estrarre i dati dall’Orario VT.
timetable.crn_lookup('17583', term_year='201701', open_only=False)
restituisce l’oggetto sezione classe dall’orario con il CRN 17583 nell’anno di scadenza 201701
, indipendentemente dal fatto che la classe sia piena o meno. In alternativa se si desidera trovare solo le sezioni aperte:
timetable.crn_lookup('17583', term_year='201701')
Tutti i metodi dell’orario forniscono un argomento predefinito diopen_only=True
eterm_year=None
quando si effettuano richieste di orario. Dopo una ricerca, se l’anno di scadenza è None, verrà impostato l’anno di scadenza più recente. C’è di più su questo nella sezione Anno termine.
Alcuni degli altri metodi di ricerca più comunemente utilizzati sono i seguenti:
def crn_lookup(self, crn_code, term_year=None, open_only=True): ...
crn_lookup(...)
restituirà un singolo oggettoSection(...)
oNone
a seconda del successo della query. None viene restituito se non ci sono sezioni di classe disponibili in base agli argomenti.
I seguenti metodi restituiscono un elenco di Section(...)
oggetti o None
a seconda del successo della query.
def class_lookup(self, subject_code, class_number, term_year=None, open_only=True): ...def cle_lookup(self, cle_code, term_year=None, open_only=True): ...def subject_lookup(self, subject_code, term_year=None, open_only=True): ...
Più raffinato, le ricerche possono essere eseguite utilizzando il refined_lookup(...)
metodo
def refined_lookup(self, crn_code=None, subject_code=None, class_number=None, cle_code=None, term_year=None, open_only=True):
Utilizzo di Codici
Alcuni dei codici che devono essere utilizzati con questa API sono esclusivamente per soddisfare le esigenze del VT Calendario posti. Alcuni codici utili sono i seguenti.
len(crn_code) >= 3subj_codes = len(class_number) == 4cle_codes = { 'AR%': 'All Curriculums', 'AR01': 'Area 1 Classes', 'AR02': 'Area 2 Classes', ... 'AR07': 'Area 7 Classes'}
Gli anni di durata
L’orario Virginia Tech offre ricerche di sezione di classe per anni di durata specifici. Se desideri lavorare con l’anno corrente, puoi lasciare intattoterm_year=None
nelle chiamate al metodo dell’orario. Al momento della richiesta, l’anno di scadenza sarà predefinito per essere l’anno di scadenza più recente.Gli anni di termine accadono ogni anno nei mesi di agosto, gennaio, giugno e luglio. Una chiamata per l’anno di scadenza predefinita a marzo comporterebbe il ritorno di sezioni di classe per l’ultimo anno di durata attivo, che è a gennaio. Il semestre primaverile. Questo per evitare di effettuare chiamate al calendario VT con anni di durata che non sono ancora disponibili.
In alternativa, se si sa che un determinato anno di termine è disponibile ma non quello predefinito, è possibile passare in un anno di termine ai metodi di ricerca. Gli anni Term seguono un semplice schema AAAA come mostrato:
term_years = { 'Spring 2017': '201701', 'Summer I 2017': '201706', 'Summer II 2017': '201707', 'Fall 2017': '201709', ...}
L’Oggetto Section
Le sezioni di classe restituite dall’orario si presentano sotto forma di un oggetto Section()
. Tutti gli oggetti Section hanno le seguenti proprietà:
section_attrs =
Un singolo oggetto section o un elenco di oggetti section verranno restituiti dopo una query riuscita all’orario VT. È possibile accedere alle informazioni sulle sezioni di classe dagli attributi di cui sopra.
TimetableError
Viene generato un errore di orario quando viene effettuata una richiesta errata o l’orario VT è inattivo. In effetti, quando il codice di stato della richiesta non è 200. L’errore generato può essere utilizzato per cercare di fallire con grazia in una certa misura. TimetableError fornisce un attributosleep_time
per consentire una pausa di runtime.
from pyvt import TimetableErrortry: timetable.crn_lookup(...)except TimetableError as e: time.sleep(e.sleep_time)
L’idea alla base di questo è che se la richiesta era cattiva, il tuo programma dormirà per un breve periodo di tempo. Tuttavia, se l’orario VT è inattivo e vengono generati più TimetableErrors
successivi, sleep_time
cresce esponenzialmente per evitare di travolgere il server.