असल में, मैंने पायथन में www.thetvdb.com पर एक एपीआई लिखा है। वर्तमान कोड here पाया जा सकता है।अमूर्त मौसम/शो/एपिसोड डेटा का सर्वोत्तम तरीका
यह एपीआई से डेटा पकड़ लेता है के रूप में अनुरोध किया है, और ऐसा करने से किसी भी तरह डाटा स्टोर, और यह उपलब्ध बनाने के लिए है:
print tvdbinstance[1][23]['episodename'] # get the name of episode 23 of season 1
क्या है "सर्वश्रेष्ठ" Tvdb()
वर्ग के भीतर सार इस डेटा के लिए रास्ता ?
मैं मूल रूप से एक विस्तारित Dict()
कि स्वचालित रूप से उप dicts बनाई इस्तेमाल किया
तब मैं सिर्फ self.data[show_id][season_number][episode_number][attribute_name] = "something"
कर यह काम किया द्वारा डाटा संग्रहित (ताकि आप x[1][2][3][4] = "something"
कर सकता है if x[1].has_key(2): x[1][2] = []
करने के लिए और इतने पर बिना) ठीक है, लेकिन जांचने का कोई आसान तरीका नहीं था कि x[3][24]
मौजूद होना चाहिए या नहीं (इसलिए मैं season_not_found अपवाद नहीं बढ़ा सकता)। ShowContainer
, Show
, Season
और Episode
:
वर्तमान में यह चार वर्गों उपयोग कर रहा है। प्रत्येक एक बहुत ही बुनियादी नियम है, जिसे मैं आसानी से अतिरिक्त कार्यक्षमता जोड़ सकता हूं (उदाहरण के लिए Show()
पर search()
फ़ंक्शन)। प्रत्येक में __setitem__
, __getitem_
और has_key
है।
यह अधिकतर ठीक काम करता है, यदि यह उस मौसम में self.data
dict में है, तो raise season_not_found
में यह मौसम दिखा सकता है। मैं Season()
में भी देख सकता हूं यदि उसके पास यह एपिसोड है और इसी तरह।
समस्या अब यह एक dict रूप में खुद को प्रस्तुत करने वाला है, लेकिन सभी सुविधा उपलब्ध नहीं है, और क्योंकि मैं __getitem__
और __setitem__
कार्यों अधिभावी कर रहा हूँ, यह गलती से रिकर्सिवली कॉल करने के लिए __getitem__
(तो मैं यकीन नहीं है आसान है यदि Dict
कक्षा का विस्तार करने से समस्याएं पैदा होंगी)।
अन्य मामूली समस्या dict में डेटा जोड़ रहा है वर्ष Dict
विधि (जो self.data[seas_no][ep_no]['attribute'] = 'something'
था) की तुलना में बहुत अधिक काम है। _setItem
और _setData
देखें। यह बहुत बुरा नहीं है, क्योंकि वर्तमान में यह केवल पढ़ने-योग्य एपीआई इंटरफ़ेस है (इसलिए एपीआई के उपयोगकर्ताओं को केवल डेटा पुनर्प्राप्त करना चाहिए, अधिक नहीं जोड़ना चाहिए), लेकिन यह शायद ही कभी ... सुरुचिपूर्ण है।
मुझे लगता है कि सीरीज़-ऑफ-क्लास सिस्टम शायद सबसे अच्छा तरीका है, लेकिन क्या किसी के पास डेटा संग्रह करने के लिए बेहतर विचार है? और Dict
के साथ ShowContainer
/आदि कक्षाओं का विस्तार करेगा?