|
先上效果图(划词翻译):
代码:
1 #!/usr/bin/env python
2 #coding:utf-8
3
4 import json
5 from urllib import urlopen
6 import sys
7 reload(sys) #要reload一次sys才能使用setdefaultencoding函数
8
9 sys.setdefaultencoding('utf-8') #要将系统默认字符编码设置为utf-8,在Goldendict才能正常输出
10
11 html = """
12
13
14 function playSound(){var ky = document.getElementById("key");var word = ky.childNodes[0].nodeValue;var api = "http://dict.youdao.com/dictvoice?audio=" + encodeURIComponent(word);var ado = document.getElementById("media");try{ado.ended = true;ado.setAttribute("src",api);ado.load();ado.play();return false;}catch(err){alert(err.description);return false;}}
15
16
17
18 div.block {
19 border:1px solid #BEBEBE;
20 background:#F0F0F0;
21 margin-left:20px;
22 border-radius: 5px;
23 }
24 div.name {
25 margin-top:10px;
26 margin-bottom:5px;
27 margin-left:20px;
28 font-size:13px;
29 font-weight:bold;
30 }
31 div.item {
32 padding:5px;
33 font-size:12px;
34 margin: 0px 10px 0px 10px;
35 }
36 #web {
37 border-style: none none solid none;
38 border-color: #BEBEBE;
39 border-bottom-width: 1px;
40 }
41
42
43 查询:
44
45 %s
46
47 有道翻译:
48
49 %s
50
51 有道词典-基本词典:
52
53 %s
54
55 有道词典-网络释义:
56
57 %s
58
59 更多结果:
60
61 %s
62
63
64
65
66 """
67
68 errorHtml = """
69
70
71 %
72
73
74 """
75
76 errorResult = {'0':'', '20':'要翻译的文本过长', '30':'无法进行有效的翻译',
77 '40':'不支持的语言类型', '50':'无效的key'}
78
79 def printHtml(errorCode, query, translation, basic, web):
80 """打印html"""
81 if errorCode != 0:
82 print errorHtml % errorResult[errorCode]
83 return
84 item = '%s'
85 #有道翻译
86 q = item % ('"%s"' % query)
87 trans = ''
88 for i in translation:
89 trans += item % ('"%s"' % i)
90
91 #有道词典
92 key = ''
93 if basic:
94 key += '%s' % (query + ' ')
95 if 'phonetic' in basic.keys():
96 key += '[%s]' % basic['phonetic']
97 key += 'sound'
98 key = item % key
99 if 'explains' in basic.keys():
100 #判断查询的词是不是中文
101 isChinese = False
102 for c in query:
103 if ord(c) >= 0x4e00 and ord(c) 1:
119 for i in range(len(web)-1):
120 webdict += webitem % ('id="web"', web['key'], ', '.join(web['value']))
121 webdict += webitem % ('', web[-1]['key'], ', '.join(web[-1]['value']))
122
123 if not key:
124 key = item % '对不起,没有结果'
125 if not webdict:
126 webdict = item % '对不起,没有结果'
127 #更多搜索
128 moreSearch = '通过Bing词典搜索'
130 moreSearch += '通过iciba词典搜索'
132 moreSearch += '通过百度搜索'
134 moreSearch += '通过Google搜索'
136
137 print html % (q, trans, key, webdict, moreSearch)
138
139 def getData(string):
140 data = json.loads(string)
141 errorCode = data['errorCode']
142 query = data['query']
143 translation = data['translation']
144 basic = {}
145 if 'basic' in data.keys():
146 basic = data['basic']
147 web = []
148 if 'web' in data.keys():
149 web = data['web']
150
151 printHtml(errorCode, query, translation, basic, web)
152
153 def searchWord(word):
154 url = r'http://fanyi.youdao.com/openapi.do?keyfrom=&key=&type=data&doctype=json&version=1.1&q=' + word
155 f = urlopen(url)
156 jsonStr = f.read()
157 getData(jsonStr)
158
159 if __name__ == '__main__':
160 searchWord(sys.argv[1])
后记:
- 一开始我是申请返回有道翻译的xml文件的,然后发现json文件体积比xml文件小多了,而且python更方便读取解析json文件。
- 最痛苦就是设计web的显示界面,花了一晚时间上w3cschool学习html和css。
- 发声部分是学javascript的朋友帮我写的。
- 这是我第三个版本的代码,写多了,领悟也多了,主要是终于意识到字符串格式化的好处。一开始用+来连接两个字符串使得可读性低~~,有时使得html代码错乱。
- 其实html代码可以写成一个独立的文件,由pyfanyi.py读入,这样更加好,编辑html文件也更容易。
- 在ubuntu下用自己写的翻译软件看英文好有感觉,呵呵。
使用:
安装Goldendict,ubuntu可以在软件中心安装。
把pyfanyi.py复制到/usr/bin文件夹里
在编辑->Dictionaries->Pragrams里添加一个程序,名字填 pyfanyi,Type选Html,命令填pyfanyi.py %GDWORD% |
|
|