kevincianfarini / pyvt
en Virginia Tech tidtabell klasser Python API
installation
pip install py-vt
användning
importera tidtabellen
from pyvt import Timetable
API ger tillgång till tidtabellen genom en tidtabell objekt.
timetable = Timetable()
tidtabellsobjektet ger några användbara metoder för att dra data från VT-tidtabellen.
timetable.crn_lookup('17583', term_year='201701', open_only=False)
returnerar klassavsnittsobjektet från tidtabellen med CRN 17583 i termen år201701
, oavsett om klassen är full till kapacitet eller inte. Alternativt om du bara vill hitta avsnitt som är öppna:
timetable.crn_lookup('17583', term_year='201701')
alla metoder i tidtabellen ger ett standardargument av open_only=True
och term_year=None
när du gör tidtabellsförfrågningar. Vid en sökning, om terminsåret är inget kommer det att vara standard till det senaste terminsåret. Det finns mer om detta i avsnittet Term Year.
några av de andra vanligaste uppslagsmetoderna är följande:
def crn_lookup(self, crn_code, term_year=None, open_only=True): ...
crn_lookup(...)
returnerar antingen ett enda Section(...)
objekt eller None
beroende på framgången för frågan. Ingen returneras om det inte fanns några tillgängliga klassavsnitt baserat på argumenten.
följande metoder returnerar antingen en lista medSection(...)
objekt ellerNone
beroende på framgången för frågan.
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): ...
mer förfinade sökningar kan utföras med hjälp av refined_lookup(...)
metod
def refined_lookup(self, crn_code=None, subject_code=None, class_number=None, cle_code=None, term_year=None, open_only=True):
Användningskoder
några av de koder som behöver användas med detta API är enbart för att tillgodose behoven hos VT tidtabell inlägg. Några användbara koder är följande.
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'}
termen år
Virginia Tech tidtabell erbjuder klassavsnitt uppslag för specifika terminsår. Om du vill arbeta med det aktuella terminsåret kan du lämna term_year=None
orörd i tidtabellsmetoden. Vid begäran kommer terminsåret att vara det senaste terminsåret.Terminsår händer varje år under månaderna augusti, januari, juni och juli. Ett standardårsanrop i mars skulle resultera i att klassavsnitt returneras för det sista aktiva terminsåret, vilket är i Januari. vårtermin. Detta för att undvika att ringa till VT-tidtabellen med terminsår som ännu inte är tillgängliga.
alternativt, om du vet att ett visst terminsår är tillgängligt men inte standard, kan du skicka ett terminsår till uppslagsmetoderna. Termår följer ett enkelt yyyymm-mönster som visas:
term_years = { 'Spring 2017': '201701', 'Summer I 2017': '201706', 'Summer II 2017': '201707', 'Fall 2017': '201709', ...}
Sektionsobjektet
klassavsnitt som returneras från tidtabellen kommer i form av ett Section()
objekt. Alla Sektionsobjekt har följande egenskaper:
section_attrs =
antingen ett enda sektionsobjekt eller en lista med sektionsobjekt kommer att returneras till dig vid en lyckad fråga till VT-tidtabellen. Du kan komma åt information om klassavsnitt från ovanstående attribut.
TimetableError
ett Tidtabellsfel kastas när antingen en dålig begäran görs eller VT-tidtabellen är nere. I själva verket, när statuskoden för begäran inte är 200. Det kastade felet kan användas för att försöka och graciöst misslyckas i en utsträckning. Den TimetableError ger ensleep_time
attribut för att möjliggöra en runtime paus.
from pyvt import TimetableErrortry: timetable.crn_lookup(...)except TimetableError as e: time.sleep(e.sleep_time)
tanken bakom detta är att om begäran var dålig kommer ditt program att sova under en kort tid. Men om VT-tidtabellen är nere och flera på varandra följande TimetableErrors
höjs, växer sleep_time
exponentiellt för att undvika överväldigande servern.