(说明: 这是我2007年写在cublog(China Unix)上的博客,现在把它转到这里来.)
阅读英文文献,经常遇到要使用电子词典的问题,但是金山词霸的过于膨大令人生畏,急需一个简单小巧的辞典,一开始我用的是dict.cn,打开IE并输入网址,再输入要查的单词.
偶然一次在dict.cn的帮助文档上发现了它提供的XML接口,碰巧我正好学到xml解析这一块了,顺便就写了一个简单但是词汇还算丰富的在线词典,至少可以不用打开IE,然后输入网址了吧.呵呵.
这个辞典主要流程很简单.
1,提交一个POST请求,http://dict.cn/ws.php?q=XXX, 服务器将会返回一个xml格式的文本,比如提交一个http://dict.cn/ws.php?q=circuit,服务器返回的xml为:
<dict> <audio>http://dict.cn/mp3.php?q=Wqpzt</audio> <pron>'sə:kit</pron> <def>n. 电路,一圈,巡回</def> <sent><orig>The rocket did one circuit of the earth and returned to base. </orig><trans>火箭绕地球运行一周后返回基地。</trans>< /sent> <sent><orig>There are two breakers in this circuit.</orig><trans>这个电路里面使用了两个断路器。</trans>< /sent> <sent><orig>The switches close the contacts and complete the circuit.</orig> <trans>这些开关可使接触器接通电流形成回路。</trans>< /sent> </dict>
# -*- coding: cp936 -* #!/usr/bin/python import sys,os,time,string import sgmllib import urllib,httplib from xml.dom.minidom import * logo = """ ######################################################### # 在线英汉词典(TinyDict v1.0) # # by yuanshl from CSLab of Lzu # # E-mail: [email protected]# ######################################################### """ def post(website,path,value): #POST params=urllib.urlencode(value) headers={"Accept":"text/html","User-Agent":"IE",\ "Content-Type":"application/x-www-form-urlencoded"} conn=httplib.HTTPConnection(website) conn.request("POST",path,params,headers) #print params r=conn.getresponse() #print r.status,r.reason data=r.read() #print data conn.close() return data def getTagText(root, tag): #xml Parse try: node = root.getElementsByTagName(tag)[0] except: return "no" rc = "" for node in node.childNodes: if node.nodeType in ( node.TEXT_NODE, \ node.CDATA_SECTION_NODE): rc = rc + node.data return rc def get_key(): d = ["0","1"] word = parse("temp.xml") d[0] = getTagText(word,"def") #单词含义 d[1] = getTagText(word,"rel") #单词的相关词条 return d value = {"q":"good"} print logo while 1: value["q"] = raw_input("\n请输入要查找的单词 (使用UP/DOWN键选择历史查询):") if value["q"].strip() == "": continue d = post("dict.cn","/ws.php",value) dat = unicode(d,"gbk").encode("utf-8")[38:] f = open('temp.xml',"w+") f.write("") f.writelines(dat) f.close() result = get_key() print "\n%s :\n %s \n" %(value["q"],result[0]) if result[1] == "no": continue print "相关词条: %s \n" %result[1]最后,需要值得一提的是,python的raw_input()函数非常方便,可以像linux下面的bash那样,利用上,下键查询历史命令,这样需要查询前一个单词的时候,只要用下键就可以了.