小孩学习英语,想弄个在线翻译,将功能模块镶嵌到英语单词学习之中,找来找去,算是找到了2个免费的在线翻译(公元2020年8月实测有效,免费多久不好说),自己在百度又注册了个在线翻译应用,算是凑了个“2+1”。
一、代码
import requests
import http.client
import hashlib
import json
import urllib
import random
import time
def baidu_translate(content):
appid='20xxxxx'#本人百度ID
secretKey = 'Bxxxxxxxxxxx'#本人百度IDKEY
httpClient = None
myurl = '/api/trans/vip/translate'
q = content
fromLang = 'en' # 源语言
toLang = 'zh' # 翻译后的语言
salt = random.randint(32768, 65536)
sign = appid + q + str(salt) + secretKey
sign = hashlib.md5(sign.encode()).hexdigest()
myurl = myurl + '?appid=' + appid + '&q=' + urllib.parse.quote(
q) + '&from=' + fromLang + '&to=' + toLang + '&salt=' + str(
salt) + '&sign=' + sign
try:
httpClient = http.client.HTTPConnection('api.fanyi.baidu.com')
httpClient.request('GET', myurl)
# response是HTTPResponse对象
response = httpClient.getresponse()
#print(type(response))
jsonResponse = response.read().decode("utf-8")# 获得返回的结果,结果为json格式
#print(type(jsonResponse))
#print(jsonResponse)
js = json.loads(jsonResponse) # 将json格式的结果转换字典结构
#print(type(js))
#print(js)
dst = str(js["trans_result"][0]["dst"]) # 取得翻译后的文本结果
#print(type(dst))
#print(dst) # 打印结果
return dst
except Exception as e:
print('err:'+e)
finally:
if httpClient:
httpClient.close()
def yd_trans(string):#一个中文解释,可句子
url="http://fanyi.youdao.com/translate"#简化了,抓包是:http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule
header={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36"}
data={}
data['i']=string
data['doctype'] = 'json'#其他项可以通过抓包查看,都可以省去
result=requests.post(url,data=data)#不用头也可以:,headers=header
transl=result.json()
#print(transl)
return transl['translateResult'][0][0]['tgt']
def bd_sug(string):#不能翻译句子
req=requests.post('https://fanyi.baidu.com/sug',data={'kw':string})
aa=req.json()#json可自动识别为中文
st=''
for i in aa['data']:#百度这个sug有多项解释,小棒,逐项提取
st+=i['k']+':'+i['v']+'\n'
return st
eng='post'
chs=yd_trans(eng)
print('有道翻译:',chs)
chs=bd_sug(eng)
print('百度免费翻译:',chs)
chs=baidu_translate(eng)
print('百度注册翻译:',chs)
二、效果比较
post翻译比较如下:
百度sug免费翻译还全面些。
showing regard for others in manners, speech, behavior, etc.句子翻译结果比较如下:
还是注册的翻译比较靠谱。不过呢,批量处理时,百度会限制访问的频率,间隔时间设置2秒可行。