基本上,我已经用Python编写了一个API到www.thetvdb.com。当前代码可以在这里找到。
它根据请求从API抓取数据,并且必须以某种方式存储数据,并通过执行以下操作使其可用:
print tvdbinstance[1][23]['episodename'] # get the name of episode 23 of season 1
在Tvdb()
类中抽象此数据的“最佳”方法是什么?
我最初使用的Dict()
是自动创建子命令的扩展程序(因此您x[1][2][3][4] = "something"
无需这样做就可以执行操作if x[1].has_key(2): x[1][2] = []
,依此类推)
然后我只是通过执行以下操作存储了数据 self.data[show_id][season_number][episode_number][attribute_name] = "something"
这项工作还可以,但是没有简单的方法可以检查是否x[3][24]
应该存在(因此我无法提出season_not_found异常)。
目前,它的使用四个类:ShowContainer
,Show
,Season
和Episode
。每个命令都是非常基本的命令,我可以轻松地在其中添加额外的功能(例如,该search()
功能在上Show()
)。每个人都有一个__setitem__
,__getitem_
和has_key
。
这通常效果很好,我可以在Shows中检查它是否有那个季节self.data
,如果没有,raise season_not_found
。我还可以检查Season()
是否有该情节等等。
现在的问题是它以字典形式呈现,但没有所有功能,而且由于我覆盖了__getitem__
and__setitem__
函数,因此很容易意外地递归调用__getitem__
(因此,我不确定扩展Dict
类是否会导致问题)。
另一个轻微的问题是,向dict中添加数据比旧Dict
方法(原为self.data[seas_no][ep_no]['attribute'] = 'something'
)要花更多的工作。请参阅_setItem
和_setData
。还算不错,因为它目前只是一个只读的API接口(因此该API的用户应该只检索数据,而不能添加更多数据),但是几乎没有。
我认为“类序列”系统可能是最好的方法,但是是否有人对存储数据有更好的主意?扩展ShowContainer
/ etc类是否Dict
会引起问题?
弑天下
慕桂英3389331
哈士奇WWW
相关分类