kevincianfarini / pyvt
a Virginia Tech plan zajęć API Python
instalacja
pip install py-vt
wykorzystanie
import planu lekcji
from pyvt import Timetable
API zapewnia dostęp do planu lekcji poprzez harmonogram obiekt.
timetable = Timetable()
obiekt plan lekcji udostępnia kilka przydatnych metod do pobierania danych z planu VT.
timetable.crn_lookup('17583', term_year='201701', open_only=False)
zwraca obiekt class section z planu lekcji o numerze CRN 17583 w roku term201701
, niezależnie od tego, czy klasa jest pełna, czy nie. Alternatywnie, jeśli chcesz znaleźć tylko otwarte sekcje:
timetable.crn_lookup('17583', term_year='201701')
wszystkie metody planu lekcji zapewniają domyślny argumentopen_only=True
Iterm_year=None
podczas składania żądań planu lekcji. Podczas wyszukiwania, jeśli rok semestru nie jest żaden, zostanie on domyślnie przypisany do ostatniego roku semestru. Więcej na ten temat w dziale rok semestralny.
niektóre z innych najczęściej używanych metod wyszukiwania są następujące:
def crn_lookup(self, crn_code, term_year=None, open_only=True): ...
crn_lookup(...)
zwróci pojedynczy obiektSection(...)
lubNone
w zależności od powodzenia zapytania. None jest zwracane, jeśli nie było dostępnych sekcji klas opartych na argumentach.
następujące metody zwracają listę obiektówSection(...)
lubNone
w zależności od powodzenia zapytania.
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): ...
bardziej wyrafinowane Wyszukiwania można wykonać za pomocą refined_lookup(...)
metoda
def refined_lookup(self, crn_code=None, subject_code=None, class_number=None, cle_code=None, term_year=None, open_only=True):
kody użytkowania
niektóre kody, które wymagają być używane z tym API są wyłącznie w celu zaspokojenia potrzeb stanowisk VT rozkładu jazdy. Niektóre pomocne kody są następujące.
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'}
lata semestralne
Plan Lekcji Virginia Tech oferuje wyszukiwanie sekcji klas dla konkretnych lat semestralnych. Jeśli chcesz pracować z bieżącym rokiem semestru, możesz pozostawićterm_year=None
nietknięty w wywołaniach metody plan lekcji. Po złożeniu wniosku, rok semestralny zostanie uznany za ostatni rok semestralny.Lata semestralne odbywają się każdego roku w miesiącach sierpień, styczeń, czerwiec i Lipiec. Domyślne wywołanie roku semestru w marcu spowodowałoby zwrócenie sekcji klas dla ostatniego aktywnego roku semestru, czyli w styczniu. Semestr wiosenny. Ma to na celu uniknięcie połączeń do rozkładu jazdy VT z latami semestralnymi, które nie są jeszcze dostępne.
alternatywnie, jeśli wiesz, że określony rok semestralny jest dostępny, ale nie jest domyślny, możesz przekazać rok semestralny do metod wyszukiwania. Termin lat następuje według prostego wzorca YYYYMM, jak pokazano:
term_years = { 'Spring 2017': '201701', 'Summer I 2017': '201706', 'Summer II 2017': '201707', 'Fall 2017': '201709', ...}
obiekt section
sekcje klasy zwracane z planu lekcji mają postaćSection()
obiektu. Wszystkie obiekty Section mają następujące właściwości:
section_attrs =
Po pomyślnym zapytaniu do planu lekcji VT zostanie zwrócony pojedynczy obiekt section lub lista obiektów section. Możesz uzyskać dostęp do informacji o sekcjach klas z powyższych atrybutów.
The TimetableError
podczas wysyłania błędnego żądania lub wyłączania planu lekcji VT wyświetlany jest błąd planu lekcji. W efekcie, gdy kod statusu żądania nie wynosi 200. Wyrzucony błąd może być użyty do próby i wdzięku nie do pewnego stopnia. TimetableError udostępnia atrybutsleep_time
pozwalający na wstrzymanie działania.
from pyvt import TimetableErrortry: timetable.crn_lookup(...)except TimetableError as e: time.sleep(e.sleep_time)
pomysł polega na tym, że jeśli żądanie było złe, Twój program zostanie uśpiony przez krótki czas. Jeśli jednak rozkład VT jest wyłączony, a wiele kolejnych TimetableErrors
zostanie podniesionych, to sleep_time
rośnie wykładniczo, aby uniknąć przytłoczenia serwera.