kevincianfarini / pyvt
a Virginia Tech órarend osztályok Python API
telepítés
pip install py-vt
használat
importálja a menetrendet
from pyvt import Timetable
Az API hozzáférést biztosít a menetrend keresztül menetrend objektumot.
timetable = Timetable()
az órarend objektum néhány hasznos módszert kínál az adatok lekérésére a VT menetrendből.
timetable.crn_lookup('17583', term_year='201701', open_only=False)
visszaadja az osztályrészobjektumot a menetrendből a CRN 17583 kifejezéssel év201701
, függetlenül attól, hogy az osztály megtelt-e vagy sem. Alternatív megoldásként, ha csak nyitott szakaszokat szeretne találni:
timetable.crn_lookup('17583', term_year='201701')
az ütemterv minden metódusa alapértelmezett argumentumot ad a open_only=True
and term_year=None
ütemezési kérések készítésekor. A keresés után, ha a ciklus éve nincs, akkor a legutóbbi ciklusévre nem fog teljesíteni. Erről bővebben a Term Year szakaszban olvashat.
A leggyakrabban használt keresési módszerek közül néhány a következő:
def crn_lookup(self, crn_code, term_year=None, open_only=True): ...
crn_lookup(...)
egyetlen Section(...)
objektumot vagy None
a lekérdezés sikerétől függően. Egyik sem kerül visszaadásra, ha az argumentumok alapján nem voltak elérhető osztályszakaszok.
a következő módszerek vagy a Section(...)
objektumok listáját adják vissza, vagy a None
a lekérdezés sikerétől függően.
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): ...
a kifinomultabb kereséseket a refined_lookup(...)
módszerrel lehet elvégezni
def refined_lookup(self, crn_code=None, subject_code=None, class_number=None, cle_code=None, term_year=None, open_only=True):
Használati kódok
néhány olyan kód, amelyet meg kell ezzel az API-val kizárólag a VT menetrendbejegyzések igényeinek kielégítésére használható. Néhány hasznos kód a következő.
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'}
az évek kifejezés
a Virginia Tech menetrend osztályszakasz-kereséseket kínál az adott évekre. Ha az aktuális tanévvel szeretne dolgozni, a term_year=None
érintetlenül hagyhatja a menetrend metódushívásokat. A kérelem benyújtásakor, a futamév nem lesz a legutóbbi futamév.A Term years minden évben augusztus, január, június és július hónapokban történik. A márciusi alapértelmezett ciklusév-hívás az utolsó aktív ciklusév osztályrészeinek visszatérését eredményezné, amely januárban van. A tavaszi félév. Ennek célja, hogy elkerülje a VT menetrend hívását olyan évekkel, amelyek még nem állnak rendelkezésre.
Alternatív megoldásként, ha tudja, hogy egy adott ciklusév elérhető, de nem az alapértelmezett, akkor egy ciklusévben átadhatja a keresési módszereket. A kifejezés évvel követi egy egyszerű YYYYMM minta látható:
term_years = { 'Spring 2017': '201701', 'Summer I 2017': '201706', 'Summer II 2017': '201707', 'Fall 2017': '201709', ...}
A Section Object
Class szakaszok tért vissza a menetrend formájában egy Section()
objektum. Minden Szakaszobjektum a következő tulajdonságokkal rendelkezik:
section_attrs =
vagy egyetlen szakaszobjektum, vagy a szakaszobjektumok listája kerül visszaadásra a VT menetrend sikeres lekérdezése után. Az osztályszakaszokra vonatkozó információkat a fenti attribútumokból érheti el.
A TimetableError
a menetrend hiba dob, ha vagy egy rossz kérés történik, vagy a VT menetrend le. Valójában, ha a kérelem állapotkódja nem 200. A dobott hiba lehet használni, hogy megpróbálja kecsesen nem olyan mértékben. A TimetableError egy sleep_time
attribútumot biztosít a futásidejű szünet engedélyezéséhez.
from pyvt import TimetableErrortry: timetable.crn_lookup(...)except TimetableError as e: time.sleep(e.sleep_time)
ennek az az ötlete, hogy ha a kérés rossz volt, a program rövid ideig alszik. Ha azonban a VT ütemezése lecsökken, és több egymást követő TimetableErrors
felemelkedik, akkor a sleep_time
exponenciálisan növekszik, hogy elkerülje a szerver túlterhelését.