Articles

kevincianfarini / pyvt

lefedettség állapotaBuild állapotPyPI verzió

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=Trueand 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.