contente
3. Obtenha o código-fonte do python
1. Demonstração do efeito
Usei a biblioteca tkinter do python para desenvolver um tradutor agregado para obter os resultados de 5 ferramentas de tradução ao mesmo tempo com um clique, incluindo:
Tradução Youdao, tradução Baidu, tradução Bing, tradução 360, tradução Google.
Primeiro, dê uma olhada na demonstração:
Eu usei a biblioteca tkinter do python para desenvolver um artefato de tradução agregado!
O código principal dessa ferramenta de tradução agregada é a tradução implementada pelo rastreador da web python e pela API do site de tradução.
2. Decomposição do código
Primeiro, importe as bibliotecas necessárias:
import tkinter as tk
import requests
import http.client
import hashlib
import urllib
import random
import json
from translate import Translator # 谷歌翻译库
Como quero que essa ferramenta suporte a tradução bidirecional entre chinês e inglês, defino uma função para determinar se a entrada é chinesa ou inglesa:
def is_all_chinese(strs):
"""检验是否是中文字符"""
for _char in strs[0]: # 判断第一个字符是否中文
if not '\u4e00' <= _char <= '\u9fa5':
return False
return True
Essa função não é muito rigorosa e determina apenas se o primeiro caractere do conteúdo de entrada é chinês ou inglês, o que resultará em uma falha de julgamento se a entrada for chinesa e inglesa. Melhorias subsequentes são necessárias para julgar todo o conteúdo de entrada.
Então, o seguinte é o rastreador da web e o rastreamento da API para cada site de tradução, por sua vez, para realizar a função de tradução, e o código-fonte do Python não será postado aqui.
Em seguida, concentre-se em explicar a interface de front-end da GUI implementada com o tkinter.
class TransTool():
"""聚合翻译tkinter界面工具"""
def __init__(self):
self.window = tk.Tk()
self.window.title("聚合翻译器 | 马哥python说")
self.window.geometry("600x300+350+300") # width x height + x + y
self.l1 = tk.Label(self.window, text="输入内容:", font="微软雅黑 14", height=2)
self.l1.grid()
self.l2 = tk.Label(self.window, text="有道翻译:", font="微软雅黑 16", height=2)
self.l2.grid()
self.l3 = tk.Label(self.window, text="百度翻译:", font="微软雅黑 16", height=2)
self.l3.grid()
self.l3 = tk.Label(self.window, text="必应翻译:", font="微软雅黑 16", height=2)
self.l3.grid()
self.l3 = tk.Label(self.window, text="360翻译:", font="微软雅黑 16", height=2)
self.l3.grid()
self.l3 = tk.Label(self.window, text="谷歌翻译:", font="微软雅黑 16", height=2)
self.l3.grid()
self.var_input = tk.StringVar(value='请输入一段文本') # 输入框默认值
self.var_youdao = tk.StringVar()
self.var_baidu = tk.StringVar()
self.var_bing = tk.StringVar()
self.var_360 = tk.StringVar()
self.var_google = tk.StringVar()
self.e1 = tk.Entry(self.window, textvariable=self.var_input, width=50, bg='#FCFCFC')
self.e1.grid(row=0, column=1)
self.e2 = tk.Entry(self.window, textvariable=self.var_youdao, width=50, bg='#FFD2D2')
self.e2.grid(row=1, column=1)
self.e3 = tk.Entry(self.window, textvariable=self.var_baidu, width=50, bg='#FFECF5')
self.e3.grid(row=2, column=1)
self.e3 = tk.Entry(self.window, textvariable=self.var_bing, width=50, bg='#FFE6FF')
self.e3.grid(row=3, column=1)
self.e3 = tk.Entry(self.window, textvariable=self.var_360, width=50, bg='#F1E1FF')
self.e3.grid(row=4, column=1)
self.e4 = tk.Entry(self.window, textvariable=self.var_google, width=50, bg='#DFFFDF')
self.e4.grid(row=5, column=1)
self.b1 = tk.Button(self.window, text="翻译", command=self.trans_all, width=10, font="微软雅黑 18",
activebackground="red", )
self.b1.place(x=100, y=260)
self.b2 = tk.Button(self.window, text="退出", command=self.window.quit, width=10, font="微软雅黑 18")
self.b2.place(x=280, y=260)
self.window.mainloop()
def trans_youdao(self):
"""有道翻译"""
content = self.e1.get()
data = {
"i": content,
"from": "AUTO",
"to": "AUTO",
"smartresult": "dict",
"client": "fanyideskweb",
"doctype": "json",
"version": "2.1",
"keyfrom": "fanyi.web",
"action": "FY_BY_REALTIME",
"typoResult": "false"
}
response = requests.post("http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule",
data=data).json()
resp = response["translateResult"][0][0]["tgt"]
print('有道翻译结果:{}'.format(resp))
self.var_youdao.set(resp)
def trans_baidu(self):
"""百度翻译"""
content = self.e1.get()
bt = BaiduTranslator(toLang="en", text=content)
resp = bt.translate()
print('百度翻译结果:{}'.format(resp))
self.var_baidu.set(resp)
def trans_360(self):
"""360翻译"""
content = self.e1.get()
if is_all_chinese(content):
eng = 0
else:
eng = 1
url = 'https://fanyi.so.com/index/search?eng={}&validate=&ignore_trans=0&query={}'.format(eng, content)
headers = {
# "cookie": "Q=u=fbybzfx&n=&le=p29fo19gp2fyAQNkAwZhL29g&m=ZGt2WGWOWGWOWGWOWGWOWGWOZGZl&qid=51678245&im=1_t01e65713e964f6c934&src=pcw_eyun&t=1; T=s=e3f53835f17dd55e4b4511508d05615e&t=1639266571&lm=0-1&lf=2&sk=cde45ff5905f7ba4b29924c0a5f8a52b&mt=1639266571&rc=&v=2.0&a=1; QiHooGUID=9A41C06C1F80E4EE010234B5D14B467C.1640573892775; Q_UDID=8802ce11-020e-5abb-061c-aaa9f20e1824; __guid=144965027.3838809587334749700.1640573886481.818; count=1; gtHuid=1; __huid=115iqIZOUAuXoKvm2qpzgyRlTD7qxJF6wMu50nS1pErmg=",
"origin": "https://fanyi.so.com",
"pro": "fanyi",
# "referer": " https://fanyi.so.com/",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-origin",
"user-agent": "Mozilla/5.0 (iPad; CPU OS 11_0 like Mac OS X) AppleWebKit/604.1.34 (KHTML, like Gecko) Version/11.0 Mobile/15A5341f Safari/604.1"
}
r = requests.post(url=url, headers=headers)
# print(r.status_code)
result = r.json()['data']['fanyi']
print('360翻译结果:{}'.format(result))
self.var_360.set(result)
def trans_google(self):
"""谷歌翻译"""
gg = GoogleTranslator()
text = self.e1.get()
if is_all_chinese(text):
result = gg.translate_content_en(text=text)
else:
result = gg.translate_content_ch(text=text)
print('谷歌翻译结果:{}'.format(result))
self.var_google.set(result)
def trans_bing(self):
content = self.e1.get()
if is_all_chinese(content):
source = 'zh'
target = 'en'
else:
source = 'en'
target = 'zh'
bing = Bing()
result = bing.translate(source, target, content)
print('必应翻译结果:{}'.format(result))
self.var_bing.set(result)
def trans_all(self):
self.trans_youdao()
self.trans_baidu()
self.trans_bing()
self.trans_360()
self.trans_google()
Uma classe TransTool é definida.A função desta classe é usar tkinter para desenvolver a interface front-end e chamar cada objeto crawler para implementar a função de tradução.
dentro:
O construtor __init__ implementa a interface tkinter e o processamento de lógica de primeiro plano.
A função trans_youdao() implementa a lógica da tradução Youdao.
A função trans_baidu() implementa a lógica da tradução do Baidu.
A função trans_360() implementa a lógica da tradução 360.
A função trans_google() implementa a lógica do Google Translate.
A função trans_bing() implementa a lógica da tradução do Bing.
A função trans_all() chama todas as funções acima para implementar todas as traduções. Se você tiver requisitos individuais, feche uma das ferramentas de tradução e comente a linha de código correspondente, por exemplo:
def trans_all(self):
self.trans_youdao()
# self.trans_baidu() # 关闭百度翻译
self.trans_bing()
# self.trans_360() # 关闭360翻译
self.trans_google()
Dessa forma, apenas três tipos de tradução do Youdao, tradução do Bing e tradução do Google são mantidos.
Ao mesmo tempo, não se esqueça, esta ferramenta também suporta tradução chinês-inglês, inglês-chinês e bidirecional!
3. Vídeo explicativo sincronizado
Para uma explicação detalhada do vídeo, acesse:
Explicação de código de 4 minutos, use Python para desenvolver um artefato de tradução agregado!
Quarto, obtenha o código-fonte do python
Amigos que gostam de aprender, querem obter o arquivo de código python completo, mova para a conta pública do vx WeChat " Old Boy's Ordinary Road ", responda " tradução agregada " em segundo plano, você pode obter o arquivo de código fonte python completo!
Eu sou Ma Ge e tenho dezenas de milhares de fãs em toda a rede. Bem-vindo a trocar a tecnologia python juntos.
Pesquise " Ma Ge python disse " em várias plataformas: Zhihu, Bilibili, Xiaohongshu, Sina Weibo.