Practic, am scris un API la www.thetvdb.com în Python. Codul curent poate fi găsit aici .
Câștigă date de la API după cum este cerut și trebuie să stocheze datele într-un fel și să le pună la dispoziție făcând:
print tvdbinstance[1][23]['episodename'] # get the name of episode 23 of season 1
Care este modalitatea "cea mai bună" de a rezuma aceste date în cadrul clasei Tvdb()
?
Am folosit inițial un cod extins Dict()
care a creat automat subdocte (pentru a putea face x [1] [2] [3] fără a fi nevoie să faceți dacă x [1] .has_key (2): x [1] [2] = []
Then I just stored the data by doing self.data[show_id][season_number][episode_number][attribute_name] = "something"
Acest lucru a funcționat bine, dar nu a existat o metodă ușoară de verificare dacă x [3] [24]
ar fi trebuit să existe sau nu (deci nu am putut ridica excepția season_not_found).
În prezent, utilizează patru clase: ShowContainer
, Show
, Sezonul
și Episode
. Fiecare dintre ele este un dict foarte simplu, pe care îl pot adăuga cu ușurință în funcția suplimentară (de exemplu, search()
pe Show()
). Fiecare are un __ setitem __
, __ getitem _
și has_key
.
Acest lucru funcționează în cea mai mare parte bine, pot verifica în Expoziții dacă are acel sezon în dict self.data , dacă nu, ridica season_not_found
. De asemenea, pot verifica Season()
dacă are episodul respectiv și așa mai departe.
Problema este acum că ea se prezintă ca dict, dar nu are toată funcționalitatea și pentru că depășesc funcțiile __ getitem __
și __ setitem __
este ușor de accidentat recursiv apelați __ getitem __
(deci nu sunt sigur dacă extinderea clasei Dict
va cauza probleme).
Cealaltă problemă ușoară este adăugarea datelor în dict este mult mai mult decât metoda veche Dict
(care a fost self.data [seas_no] [ep_no] ['attribute'] = „
). Vedeți _setItem
și _setData . Nu este prea rău, deoarece în prezent este doar o interfață API numai pentru citire (deci utilizatorii API ar trebui să recupereze numai date, nu să mai adauge mai mult), dar este greu ... Elegant.
Cred că sistemul de serii de clasă este probabil cel mai bun mod, dar are cineva o idee mai bună pentru stocarea datelor? Și ar extinde clasele ShowContainer
/ etc cu Dict
provoca probleme?