13544870125 发表于 2015-4-23 07:04:33

用python实现有道翻译,配合Goldendict显示

  先上效果图(划词翻译):

  代码:



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.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
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)
  后记:


[*]一开始我是申请返回有道翻译的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%
页: [1]
查看完整版本: 用python实现有道翻译,配合Goldendict显示