和有道翻译的官网一样的功能,支持多种语言翻译,实现的原理是这样的,首先我们在有道翻译的网页版里,用开发者工具查看翻译的时候post了什么给服务器,然后我们可以看到当点击翻译按钮的时候,会发出请求,将一个json表格 POST到服务器,然后再GET结果到浏览器里。所以我们只需模仿这个步骤就能实现到这个功能了。
主要使用库:requests、json、PyQt4
【EXE打包】链接: http://pan.baidu.com/s/1DP0U6 密码: 36k3
Github://github.com/ZanwingMak/youdao_translation
# -*- coding: utf-8 -*-
__author__ = 'm9Kun'
__blog__ = 'm9kun.com'
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import json
import requests
import sys
QTextCodec.setCodecForTr(QTextCodec.codecForName("utf8"))
reload(sys)
sys.setdefaultencoding('utf-8')
class YouDao(QDialog):
def __init__(self,parent=None):
super(YouDao,self).__init__(parent)
self.setWindowTitle(self.tr("有道词典"))
mainLayout=QGridLayout(self)
hb1 = QHBoxLayout()
self.text1 = QTextEdit(self)
#self.text1.setFontFamily('Microsoft Yahei')
#self.text1.setFontPointSize(16)
hb1.addWidget(self.text1)
hb2 = QHBoxLayout()
self.label1 = QLabel(self)
self.label1.setText(self.tr("请选择语言:"))
self.combobox1 = QComboBox(self)
language_list = [u'自动检测语言', u'中文 >> 英语', u'中文 >> 日语', u'中文 >> 韩语'\
, u'中文 >> 法语', u'中文 >> 俄语', u'中文 >> 西班牙语', u'英语 >> 中文',\
u'日语 >> 中文', u'韩语 >> 中文', u'法语 >> 中文', u'俄语 >> 中文', u'西班牙语 >> 中文']
self.combobox1.addItems(language_list)
self.btn1 = QPushButton(self)
self.btn1.setText(self.tr("翻译"))
self.btn1.clicked.connect(self.btn1_Clicked)
hb2.addWidget(self.label1)
hb2.addWidget(self.combobox1)
hb2.addWidget(self.btn1)
hb3 = QHBoxLayout()
self.text2 = QTextEdit(self)
self.text2.setFontFamily('Microsoft Yahei')
self.text2.setFontPointSize(18)
hb3.addWidget(self.text2)
mainLayout.addLayout(hb1,0,0)
mainLayout.addLayout(hb2,1,0)
mainLayout.addLayout(hb3,2,0)
def translate(self,language_code,sentence):
url = 'http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc'
#print language_code,sentence
data = {
'type':language_code,
'i':sentence,
'doctype':'json',
'xmlVersion':'1.8',
'keyfrom':'fanyi.web',
'ue':'UTF-8',
'action':'FY_BY_CLICKBUTTON',
'typoResult':'true'
}
content = requests.post(url,data).content
#print content
mydict = json.loads(content)
#print mydict
return mydict.get('translateResult')[0][0].get('tgt')
def btn1_Clicked(self):
language_code_list = ['AUTO',\
'ZH_CN2EN','ZH_CN2JA','ZH_CN2KR','ZH_CN2FR','ZH_CN2RU','ZH_CN2SP',\
'CN2EN_ZH','CN2JA_ZH','CN2KR_ZH','CN2FR_ZH','CN2RU_ZH','CN2SP_ZH']
#返回Item数目
#count = self.combobox1.count()
#返回当前选择索引,从0开始
pos = self.combobox1.currentIndex()
#返回当前选择内容
#text = self.combobox1.currentText()
#print count,pos,text
language_code = language_code_list[pos]
#文本框内容
sentence = str(self.text1.toPlainText())#要str强制类型转换才行,不然后只传第一个字符...
translate_return = self.translate(language_code,sentence)
self.text2.setText(translate_return)
app=QApplication(sys.argv)
yuancheng=YouDao()
yuancheng.show()
app.exec_()
Comments | NOTHING