असल में, मैंने पायथन में www.thetvdb.com पर एक एपीआई लिखा है। वर्तमान कोड यहां पाया जा सकता है।
यह अनुरोध के अनुसार एपीआई से डेटा पकड़ता है, और किसी भी तरह से डेटा स्टोर करना है, और इसे करने के द्वारा इसे उपलब्ध कराया गया है:
print tvdbinstance[1][23]['episodename'] # get the name of episode 23 of season 1
Tvdb()
कक्षा के भीतर इस डेटा को अमूर्त करने का "सर्वोत्तम" तरीका क्या है?
मैंने मूल रूप से एक विस्तारित <कोड> डिक्ट() का उपयोग किया जो स्वचालित रूप से उप-डिस्केट बनाया गया था (ताकि आप x [1] [2] [3] [4] = "कुछ"
कर सकें बिना <कोड> करने के लिए 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"
यह ठीक काम करता है, लेकिन जांचने का कोई आसान तरीका नहीं था कि x [3] [24]
मौजूद होना चाहिए या नहीं (इसलिए मैं season_not_found अपवाद नहीं बढ़ा सकता)।
वर्तमान में यह चार वर्गों का उपयोग कर रहा है: ShowContainer
, दिखाएँ
, सीजन
और एपिसोड
। प्रत्येक एक बहुत ही बुनियादी नियम है, जिसे मैं आसानी से खोज()
फ़ंक्शन में खोज()
फ़ंक्शन में अतिरिक्त कार्यक्षमता जोड़ सकता हूं)। प्रत्येक में __ setitem __
, __ getitem _
और has_key
है।
यह अधिकतर ठीक काम करता है, अगर मैं उस सत्र में self.data dict में हूं, तो नहीं, season_not_found
बढ़ाएं। मैं सीजन()
में भी देख सकता हूं यदि उसके पास यह एपिसोड है और इसी तरह।
समस्या यह है कि यह खुद को एक ताना के रूप में पेश कर रहा है, लेकिन इसमें सभी कार्यक्षमताएं नहीं हैं, और क्योंकि मैं __ getitem __
और __ setitem __
फ़ंक्शंस को ओवरराइड कर रहा हूं, गलती से करना आसान है दोबारा कॉल करें __ getitem __
(इसलिए मुझे यकीन नहीं है कि डिक्ट
कक्षा को विस्तारित करने से समस्याएं उत्पन्न होंगी)।
दूसरी मामूली समस्या है कि डेटा में डेटा जोड़ना पुराना <कोड> डिक्ट विधि (जो self.data [seas_no] [ep_no] ['विशेषता'] = 'कुछ था '
)। _setItem
और _setData देखें। यह बहुत बुरा नहीं है, क्योंकि वर्तमान में यह केवल पढ़ने-योग्य एपीआई इंटरफ़ेस है (इसलिए एपीआई के उपयोगकर्ताओं को केवल डेटा पुनर्प्राप्त करना चाहिए, अधिक नहीं जोड़ना चाहिए), लेकिन यह शायद ही कभी ... सुरुचिपूर्ण है।
मुझे लगता है कि सीरीज-ऑफ-क्लास सिस्टम शायद सबसे अच्छा तरीका है, लेकिन क्या डेटा को स्टोर करने के लिए किसी के पास बेहतर विचार है? और डिक्ट
समस्याओं के कारण ShowContainer
/ etc कक्षाओं को विस्तारित करेगा?