这里的翻译接口是基于百度翻译的API
这里的方案是利用百度翻译开放平台实现的
会稍微麻烦点,但是更加方便个性化翻译
也可以通过爬虫的形式,直接操作百度翻译网页来实现
前期准备,需要注册百度开发者账户,然后开通通用文本翻译功能
到达这个界面找到appid以及密钥
这里就不说明注册开通过程了
python代码部分
import random
import requests
from hashlib import md5
def fanyi(q, from_lang="auto", to_lang="en"):
if q.strip() == "":
return "未输入"
url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
appid = "XXXXXX" #换成自己的appid
salt = random.randint(32768, 65536)
key = "XXXXXXX" #换成自己的密钥
def make_sign(s):
return md5(bytes(s, "utf-8")).hexdigest()
sign = make_sign(appid + q + str(salt) + key)
params = {
"q": q.encode("utf-8"),
"from": from_lang,
"to": to_lang,
"appid": appid,
"salt": salt,
"sign": sign
}
with requests.post(url=url, headers={"Content-Type": "application/x-www-form-urlencoded"}, params=params) as res:
if res.status_code != 200:
raise ("翻译出错!")
return res.json()
# appid+q+salt+密钥
lang = """名称 代码
自动检测 auto
中文 zh
英语 en
粤语 yue
文言文 wyw
繁体中文 cht
日语 jp
韩语 kor
法语 fra
西班牙语 spa
泰语 th
阿拉伯语 ara
俄语 ru"""
map_lang = {
"zh": "中文",
"en": "英语",
"yue": "粤语",
"wyw": "文言文",
"cht": "繁体中文",
"jp": "日语",
"kor": "韩语",
"fra": "法语",
"spa": "西班牙语",
"th": "泰语",
"ara": "阿拉伯语",
"ru": "俄语",
"pt": "葡萄牙语",
"de": "德语",
"it": "意大利语",
"el": "希腊语",
"nl": "荷兰语",
"pl": "波兰语",
"bul": "保加利亚语",
"est": "爱沙尼亚语",
"dan": "丹麦语",
"fin": "芬兰语",
"cs": "捷克语",
"rom": "罗马尼亚语",
"slo": "斯洛文尼亚语",
"swe": "瑞典语",
"hu": "匈牙利语",
"vie": "越南语"
}
def run():
while True:
en = input("翻译为何种语言(默认英文,h查看帮助,q退出): ").strip()
if en == "q":
break
elif en == "h":
print(lang)
continue
else:
if en !=""and map_lang.get(en) is None:
print("输入有误")
continue
else:
from_lang = 'auto'
to_lang = 'en'
if en != "":
to_lang = en
while True:
s = input("请输入待翻译文本(lang选择语言,q退出): ").strip()
if s == "lang":
break
elif s == "q":
exit()
elif s == "":
continue
else:
res = fanyi(q=s, from_lang=from_lang, to_lang=to_lang)
print("{}=====>{}".format(map_lang.get(res.get("from"),"未能自动解析"), map_lang.get(res.get("to"))))
print("翻译结果为:",res.get("trans_result")[0].get("dst"))
if __name__ == '__main__':
run()
注意事项
- 待翻译文本(q)需为 UTF-8 编码;
- 在生成签名后,发送 HTTP 请求时,如果将 query 拼接在URL上,需要对 query 做 URL encode。
- 请求方式: 可使用 GET 或 POST 方式,如使用 POST 方式,Content-Type 请指定为:application/x-www-form-urlencoded
- 字符编码:统一采用 UTF-8 编码格式
- query 长度:为保证翻译质量,请将单次请求长度控制在 6000 bytes以内(汉字约为输入参数 2000 个)
其他语言的demo
返回数据的样式
query=apple,语言方向为英到中
未接入资源时,返回结果为:
{
"from": "en",
"to": "zh",
"trans_result": [
{
"src": "apple",
"dst": "苹果"
}
]
}
接入词典、语音合成资源后,返回结果为:
{
"from": "en",
"to": "zh",
"trans_result": [
{
"src": "apple",
"dst": "苹果",
"src_tts": "https:\/\/fanyiapp.cdn.bcebos.com\/api\/tts\/95e906875b87d342d7325a36a4e1ab42.mp3",
"dst_tts": "https:\/\/fanyiapp.cdn.bcebos.com\/api\/tts\/62f4ff87617655bc1f65e24cf4ed4963.mp3",
"dict": "{\"lang\":\"1\",\"word_result\":{\"simple_means\":{\"word_name\":\"apple\",\"from\":\"original\",\"word_means\":[\"苹果\"],\"exchange\":{\"word_pl\":[\"apples\"]},\"tags\":{\"core\":[\"高考\",\"考研\"],\"other\":[\"\"]},\"symbols\":[{\"ph_en\":\"ˈæpl\",\"ph_am\":\"ˈæpl\",\"parts\":[{\"part\":\"n.\",\"means\":[\"苹果\"]}],\"ph_other\":\"\"}]}}}"
}
]
}
标签:lang,翻译,en,get,python,res,基于,appid
From: https://www.cnblogs.com/guangdelw/p/17089678.html