python中translator怎么设置英文 translate在python_python的界面文字翻译

为啥投专栏呢?因为我懒得做视频了。

python中translator怎么设置英文 translate在python_python_02

对程序具体如何实现没兴趣的可以跳过这一节

用python加上googletrans模块自动翻译的专栏已经有人写过了,但是这个模块还是有一些问题的,同时间请求翻译次数太多就会被Google翻译的服务器屏蔽。

当然了,googletrans模块的原理我们可以来看一下下面的代码:

python中translator怎么设置英文 translate在python_python_03

在Translator类初始化时,生成了一个requests.session类用于和服务器交互所以说这个模块我感觉就是把正常的python的requests和json还有几个模块打包了一下,加上了Google翻译的url的参数。

python中translator怎么设置英文 translate在python_json_04

在Translator.translate()函数中,调用了Translator._translate()函数

python中translator怎么设置英文 translate在python_json_05

所以说最后还是一句get请求啊

如果程序抛出了json的异常的话,那就是请求被服务器拒绝了。

把代码贴这边吧:

import time

from googletrans import Translator

def google_trans(source):

trans=Translator(service_urls=["translate.google.cn"])

for i in range(100):

if i%2==0:

src,dest="zh-cn","en"

else:

src,dest="en","zh-cn"

try:

source=trans.translate(source,src=src,dest=dest).text

except Exception as e:

print("{}".format(e))

return "error"

time.sleep(2) #防止同时请求太多

return source

print(google_trans("呐呐呐,此生无悔入东方,来世愿生幻想乡。"))

python中translator怎么设置英文 translate在python_API_06

没错,很草。

python中translator怎么设置英文 translate在python_python_02

然后差不多就是上面的那段代码,加进了群里的QQ机器人插件里,然后在广大群友的调教下,即刻被橄榄了……

所以说这个方法行不通,于是还是决定用腾讯的翻译API(当然谷歌的API也可以,不过我注册不了账号)

就这个网址,然后注册申请app_key

https://ai.qq.com/

python中translator怎么设置英文 translate在python_API_08

就要马赛克遮住的俩东西

接下来就是写代码了,python环境安装我觉得应该没必要讲了吧,看到这边的应该都会(?)

算了,讲一下吧。

上python官网装一个Python3(https://www.python.org)或者装一个anaconda也可以(https://www.anaconda.com/),然后安装一下必要的组件……我看一下我用了啥组件。

打开cmd输入"pip install requests",如果你安装了anaconda,可以输入"conda install requests",两个效果基本上一样。(hmmm,我建议后者啊,有时候python自己是不带pip的你可能还要自己安装一下pip……网页链接 https://pypi.org/project/pip/,自己看文档学怎么安装吧)

安装环境这种事情啊,总是最头疼的嘛。

然后接下来就是敲代码了,首先应该先敲一下黑板,重点了。

考虑到前面既然在教怎么安装环境,那就顺便教到底吧。

打开一个文件夹(或者在桌面上也可以),右键-新建文本文档,重命名为translation.py,确定,右键编辑,输入下面的代码:

import hashlib

import time

import random

import string

from urllib.parse import quote

import json

import requests

def get_md5(src):

m = hashlib.md5(src.encode())

return m.hexdigest().upper()

def get_params(plus_item):

t=time.time()

time_stamp=str(int(t))

nonce_str = ''.join(random.sample(string.ascii_letters + string.digits, 10))

app_id="**********"     #把这边的内容替换成你的app_id

app_key="**********"      #把这边的内容替换成你的app_key

params = { 'app_id':app_id,

'time_stamp':time_stamp,

'nonce_str':nonce_str,

}

for i in plus_item:

params[i]=plus_item[i]

sign_before=""

for key in sorted(params):

sign_before += '{}={}&'.format(key,quote(params[key], safe=' ').replace(" ","+"))

sign_before += 'app_key={}'.format(app_key)

sign = get_md5(sign_before)

params['sign'] = sign

return params

def UrlGet(url,data={}):

try:

count=0

req=""

while count<5:

try:

req=requests.post(url,data=data,timeout=3)

return req.text

except:

count+=1

continue

assert count<5,"超时"

except:

return "Error"

def trans(source):

for i in range(20): #你要翻译多少次,就把括号里面的数字改成多少,翻译50次就改成50,翻译100次就改成100

try:

if i%2==0:

dest="en"

else:

dest="zh"

data=UrlGet("https://api.ai.qq.com/fcgi-bin/nlp/nlp_texttranslate",get_params({"source":"auto","target":dest,"text":source}))

json_dict = json.loads(data)

#time.sleep(1)

if json_dict["ret"]!=0:

source="error"+str(json_dict["ret"])

break

source=json_dict["data"]["target_text"]

except:

print("遭遇了不可名状的错误!")

return

return source

print(trans(input("请输入你要翻译的话:")))

其实效果还是可以的,虽然程序长了一点(

说实话这个翻译其实还是可以的,许多时候还因为过于正确而无法生草……

python中translator怎么设置英文 translate在python_python_09

呐,这也是很有哲理的说如果你对于程序如何实现没兴趣的话,这篇文章到此就结束了。

python中translator怎么设置英文 translate在python_python的界面文字翻译_10

API的参考文档:https://ai.qq.com/doc/nlptrans.shtml

程序中间的UrlGet()函数就是进行request请求的(其实是我从自己的另外一个程序里面抄来的,百用不厌),遇到超时会进行重试,防止因为网络问题卡住。

get_params函数就是处理请求的参数的,具体的参数列表和解释参见参考文档。

python中translator怎么设置英文 translate在python_python的界面文字翻译_11

就是这个

麻烦的还是那个接口鉴权,就是要把所有的请求参数按照参数名称排好序拼接起来,最后加上你的app_key,通过md5计算获得hash值。如果请求参数的hash值和服务器那边计算的值不一样的话,你的请求就会被拒绝。

返回的参数相对来说就是比较简单的了:

python中translator怎么设置英文 translate在python_json_12

返回的格式是json

在很久很久之前,我还不知道python有json这个模块,然后手打正则匹配网页返回数据,那个酸爽啊。

这边有一个很大的坑,特别容易踩进去。输入的数据需要经过url编码, 但是正常的quote()编码会把空格编码成%20,鉴权时就会报错,要把空格替换成“+”。

如果调用Google的翻译API的话也是类似的,主要是请求方式和鉴权方式要稍微修改一下。