114 lines
3.8 KiB
Python
114 lines
3.8 KiB
Python
|
import aiohttp
|
|||
|
from ..config import config
|
|||
|
from nonebot.log import logger
|
|||
|
|
|||
|
|
|||
|
async def translate(text: str, to: str):
|
|||
|
# en,jp,zh
|
|||
|
result = await translate_deepl(text, to) or await translate_bing(text, to) or await translate_google_proxy(text, to) or await translate_youdao(text, to)
|
|||
|
if result:
|
|||
|
return result
|
|||
|
else:
|
|||
|
logger.error(f"未找到可用的翻译引擎!")
|
|||
|
return text
|
|||
|
|
|||
|
|
|||
|
async def translate_bing(text: str, to: str):
|
|||
|
"""
|
|||
|
en,jp,zh_Hans
|
|||
|
"""
|
|||
|
if to == "zh":
|
|||
|
to = "zh-Hans"
|
|||
|
key = config.bing_key
|
|||
|
if not key:
|
|||
|
return None
|
|||
|
header = {
|
|||
|
"Ocp-Apim-Subscription-Key": key,
|
|||
|
"Content-Type": "application/json",
|
|||
|
}
|
|||
|
async with aiohttp.ClientSession() as session:
|
|||
|
body = [{'text': text}]
|
|||
|
params = {
|
|||
|
"api-version": "3.0",
|
|||
|
"to": to,
|
|||
|
"profanityAction": "Deleted",
|
|||
|
}
|
|||
|
async with session.post('https://api.cognitive.microsofttranslator.com/translate', json=body, params=params, headers=header) as resp:
|
|||
|
if resp.status != 200:
|
|||
|
logger.error(f"Bing翻译接口调用失败,错误代码{resp.status},{await resp.text()}")
|
|||
|
return None
|
|||
|
jsonresult = await resp.json()
|
|||
|
result=jsonresult[0]["translations"][0]["text"]
|
|||
|
logger.debug(f"Bing翻译启动,获取到{text},翻译后{result}")
|
|||
|
return result
|
|||
|
|
|||
|
|
|||
|
async def translate_deepl(text: str, to: str):
|
|||
|
"""
|
|||
|
EN,JA,ZH
|
|||
|
"""
|
|||
|
to = to.upper()
|
|||
|
key = config.deepl_key
|
|||
|
if not key:
|
|||
|
return None
|
|||
|
async with aiohttp.ClientSession() as session:
|
|||
|
params = {
|
|||
|
"auth_key":key,
|
|||
|
"text": text,
|
|||
|
"target_lang": to,
|
|||
|
}
|
|||
|
async with session.get('https://api-free.deepl.com/v2/translate', params=params) as resp:
|
|||
|
if resp.status != 200:
|
|||
|
logger.error(f"DeepL翻译接口调用失败,错误代码{resp.status},{await resp.text()}")
|
|||
|
return None
|
|||
|
jsonresult = await resp.json()
|
|||
|
result=jsonresult["translations"][0]["text"]
|
|||
|
logger.debug(f"DeepL翻译启动,获取到{text},翻译后{result}")
|
|||
|
return result
|
|||
|
|
|||
|
|
|||
|
async def translate_youdao(input: str, type: str):
|
|||
|
"""
|
|||
|
默认auto
|
|||
|
ZH_CH2EN 中译英
|
|||
|
EN2ZH_CN 英译汉
|
|||
|
"""
|
|||
|
if type == "zh":
|
|||
|
type = "EN2ZH_CN"
|
|||
|
elif type == "en":
|
|||
|
type = "ZH_CH2EN"
|
|||
|
async with aiohttp.ClientSession() as session:
|
|||
|
data = {
|
|||
|
'doctype': 'json',
|
|||
|
'type': type,
|
|||
|
'i': input
|
|||
|
}
|
|||
|
async with session.post("http://fanyi.youdao.com/translate", data=data) as resp:
|
|||
|
if resp.status != 200:
|
|||
|
logger.error(f"有道翻译接口调用失败,错误代码{resp.status},{await resp.text()}")
|
|||
|
return None
|
|||
|
result = await resp.json()
|
|||
|
result=result["translateResult"][0][0]["tgt"]
|
|||
|
logger.debug(f"有道翻译启动,获取到{input},翻译后{result}")
|
|||
|
return result
|
|||
|
|
|||
|
|
|||
|
async def translate_google_proxy(input: str, to: str):
|
|||
|
"""
|
|||
|
en,jp,zh 需要来源语言
|
|||
|
"""
|
|||
|
if to == "zh":
|
|||
|
from_ = "en"
|
|||
|
else:
|
|||
|
from_="zh"
|
|||
|
async with aiohttp.ClientSession()as session:
|
|||
|
data = {"data": [input, from_, to]}
|
|||
|
async with session.post("https://hf.space/embed/mikeee/gradio-gtr/+/api/predict", json=data)as resp:
|
|||
|
if resp.status != 200:
|
|||
|
logger.error(f"谷歌代理翻译接口调用失败,错误代码{resp.status},{await resp.text()}")
|
|||
|
return None
|
|||
|
result = await resp.json()
|
|||
|
result=result["data"][0]
|
|||
|
logger.debug(f"谷歌代理翻译启动,获取到{input},翻译后{result}")
|
|||
|
return result
|