【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)

时间:2021-03-01 17:49:15

全系列目录:

承接上文。

我们采用自顶而下的方式开发,因此,今天就解决程序的主要架构:main.py的开发。

自顶而下的方式,意味着我们需要假设已经开发好了两个模块:一个是LocalDB,一个是WebDict。LocalDB存储已经在网上查过的单词,而WebDict则在新词出现时,从网上获取回相应的资料。

比如我要查process这个单词的意思,第一次是由WebDict模块返回的意思,但第二次查process就是由LocalDB完成了。

然后定义输入输出。鉴于模块和main架构之间已经解偶了,因此,就不着急进行gui的开发,第一个版本先采用CLI的方式。输入单词直接查询,输入-1退出,输入#号就显示所有难词。所谓难词,如上文所说,由LocalDB定义,目前是重复查过4次的单词。

在数据库中,有一个word table,列名分别是:word、explain、net_explain、sentence、times。分别是单词、释义、网络释义、例句和查询次数。

LocalDB开放的接口如下:

0、get_hard_word:返回所有难词的列表。

1、get_eng_word_from_db:返回在本地数据库中保存的单词

2、insert_word_to_db:将单词插入本地数据库中。

3、update_word_times:更新某个单词的查询次数

4、turn_off_db:关闭本地数据库

WebDict开放的接口如下:

0、get_dict_data:从网络获取相应单词的所需信息。(释义、网络释义、例句)

下面是全部代码:

# -*- coding:utf-8 -*-
__author__ = 'wmydx' from LocalDB import LocalDIct
from WebDict import getResponse def show_result(ans):
names = ['word', 'explain', 'net_explain', 'sentence', 'times']
for item in ans:
for key in names:
print key + ': \n' + str(item[key])
if item['times'] > 1:
print 'CAREFUL!! this is a hard word!!' def show_hard_word(ans):
for item in ans:
print item['word'] + '\n' def main():
db = LocalDIct.LocalDict()
response = getResponse.GetResponse()
input_word = ''
try:
while True:
input_word = raw_input("plz input words: ")
if input_word == str(-1):
break
if input_word == '#':
ans = db.get_hard_word()
show_hard_word(ans)
else:
ans = db.get_eng_word_from_db(input_word)
if not ans:
print 'here'
ans = response.get_dict_data(input_word)
for item in ans:
db.insert_word_to_db(item, 'words')
else:
for item in ans:
item['times'] += 1
db.update_word_times(item)
if db.is_a_hard_word(item):
db.insert_word_to_db(item, 'hard')
show_result(ans)
db.turn_off_db()
print 'END.'
except:
db.turn_off_db() main()