Merge pull request #407 from PikachuLiker/master
添加基于azure 和 百度 翻译api的机器翻译
This commit is contained in:
@@ -1,4 +1,9 @@
|
|||||||
import requests
|
import requests
|
||||||
|
import hashlib
|
||||||
|
import random
|
||||||
|
import uuid
|
||||||
|
import json
|
||||||
|
import time
|
||||||
from lxml import etree
|
from lxml import etree
|
||||||
import re
|
import re
|
||||||
import config
|
import config
|
||||||
@@ -71,16 +76,20 @@ def get_html(url, cookies: dict = None, ua: str = None, return_type: str = None)
|
|||||||
print('[-]Connect Failed! Please check your Proxy or Network!')
|
print('[-]Connect Failed! Please check your Proxy or Network!')
|
||||||
|
|
||||||
|
|
||||||
def post_html(url: str, query: dict) -> requests.Response:
|
def post_html(url: str, query: dict, headers: dict = None) -> requests.Response:
|
||||||
switch, proxy, timeout, retry_count, proxytype = config.Config().proxy()
|
switch, proxy, timeout, retry_count, proxytype = config.Config().proxy()
|
||||||
proxies = get_proxy(proxy, proxytype)
|
proxies = get_proxy(proxy, proxytype)
|
||||||
headers = {
|
headers_ua = {
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36"}
|
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36"}
|
||||||
|
if headers is None:
|
||||||
|
headers = headers_ua
|
||||||
|
else:
|
||||||
|
headers.update(headers_ua)
|
||||||
|
|
||||||
for i in range(retry_count):
|
for i in range(retry_count):
|
||||||
try:
|
try:
|
||||||
if switch == 1 or switch == '1':
|
if switch == 1 or switch == '1':
|
||||||
result = requests.post(url, data=query, proxies=proxies,headers=headers, timeout=timeout)
|
result = requests.post(url, data=query, proxies=proxies, headers=headers, timeout=timeout)
|
||||||
else:
|
else:
|
||||||
result = requests.post(url, data=query, headers=headers, timeout=timeout)
|
result = requests.post(url, data=query, headers=headers, timeout=timeout)
|
||||||
return result
|
return result
|
||||||
@@ -459,13 +468,65 @@ def translateTag_to_sc(tag):
|
|||||||
else:
|
else:
|
||||||
return tag
|
return tag
|
||||||
|
|
||||||
def translate(src:str,target_language:str="zh_cn"):
|
def translate(
|
||||||
url = "https://translate.google.cn/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&sl=auto&tl=" + target_language + "&q=" + src
|
src: str,
|
||||||
result = get_html(url=url,return_type="object")
|
target_language: str = "zh_cn",
|
||||||
|
engine: str = "google-free",
|
||||||
|
app_id: str = "",
|
||||||
|
key: str = "",
|
||||||
|
delay: int = 0,
|
||||||
|
):
|
||||||
|
trans_result = ""
|
||||||
|
if engine == "google-free":
|
||||||
|
url = (
|
||||||
|
"https://translate.google.cn/translate_a/single?client=gtx&dt=t&dj=1&ie=UTF-8&sl=auto&tl="
|
||||||
|
+ target_language
|
||||||
|
+ "&q="
|
||||||
|
+ src
|
||||||
|
)
|
||||||
|
result = get_html(url=url, return_type="object")
|
||||||
|
|
||||||
translate_list = [i["trans"] for i in result.json()["sentences"]]
|
translate_list = [i["trans"] for i in result.json()["sentences"]]
|
||||||
|
trans_result = trans_result.join(translate_list)
|
||||||
|
elif engine == "baidu":
|
||||||
|
url = "https://fanyi-api.baidu.com/api/trans/vip/translate"
|
||||||
|
salt = random.randint(1, 1435660288)
|
||||||
|
sign = app_id + src + str(salt) + key
|
||||||
|
sign = hashlib.md5(sign.encode()).hexdigest()
|
||||||
|
url += (
|
||||||
|
"?appid="
|
||||||
|
+ app_id
|
||||||
|
+ "&q="
|
||||||
|
+ src
|
||||||
|
+ "&from=auto&to="
|
||||||
|
+ target_language
|
||||||
|
+ "&salt="
|
||||||
|
+ str(salt)
|
||||||
|
+ "&sign="
|
||||||
|
+ sign
|
||||||
|
)
|
||||||
|
result = get_html(url=url, return_type="object")
|
||||||
|
|
||||||
return "".join(translate_list)
|
translate_list = [i["dst"] for i in result.json()["trans_result"]]
|
||||||
|
trans_result = trans_result.join(translate_list)
|
||||||
|
elif engine == "azure":
|
||||||
|
url = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&to=" + target_language
|
||||||
|
headers = {
|
||||||
|
'Ocp-Apim-Subscription-Key': key,
|
||||||
|
'Ocp-Apim-Subscription-Region': "global",
|
||||||
|
'Content-type': 'application/json',
|
||||||
|
'X-ClientTraceId': str(uuid.uuid4())
|
||||||
|
}
|
||||||
|
body = json.dumps([{'text': src}])
|
||||||
|
result = post_html(url=url,query=body,headers=headers)
|
||||||
|
translate_list = [i["text"] for i in result.json()[0]["translations"]]
|
||||||
|
trans_result = trans_result.join(translate_list)
|
||||||
|
|
||||||
|
else:
|
||||||
|
raise ValueError("Non-existent translation engine")
|
||||||
|
|
||||||
|
time.sleep(delay)
|
||||||
|
return trans_result
|
||||||
|
|
||||||
# ========================================================================是否为无码
|
# ========================================================================是否为无码
|
||||||
def is_uncensored(number):
|
def is_uncensored(number):
|
||||||
|
|||||||
@@ -34,8 +34,17 @@ folders=failed,JAV_output
|
|||||||
[debug_mode]
|
[debug_mode]
|
||||||
switch=0
|
switch=0
|
||||||
|
|
||||||
|
; 机器翻译
|
||||||
[transalte]
|
[transalte]
|
||||||
switch=0
|
switch=0
|
||||||
|
;可选项 google-free,baidu,azure
|
||||||
|
engine=google-free
|
||||||
|
; 百度翻译app id
|
||||||
|
appid=
|
||||||
|
; 百度翻译或azure翻译密钥
|
||||||
|
key=
|
||||||
|
; 翻译延迟,用于满足百度不同定价api的QPS要求,单位秒,http://api.fanyi.baidu.com/product/112
|
||||||
|
delay=1
|
||||||
values=title,outline
|
values=title,outline
|
||||||
|
|
||||||
; 预告片
|
; 预告片
|
||||||
|
|||||||
19
config.py
19
config.py
@@ -73,8 +73,15 @@ class Config:
|
|||||||
return extrafanart_download
|
return extrafanart_download
|
||||||
except ValueError:
|
except ValueError:
|
||||||
self._exit("extrafanart_folder")
|
self._exit("extrafanart_folder")
|
||||||
|
def get_transalte_engine(self) -> str:
|
||||||
def transalte_values(self) -> bool:
|
return self.conf.get("transalte","engine")
|
||||||
|
def get_transalte_appId(self) ->str:
|
||||||
|
return self.conf.get("transalte","appid")
|
||||||
|
def get_transalte_key(self) -> str:
|
||||||
|
return self.conf.get("transalte","key")
|
||||||
|
def get_transalte_delay(self) -> int:
|
||||||
|
return self.conf.getint("transalte","delay")
|
||||||
|
def transalte_values(self) -> str:
|
||||||
return self.conf.get("transalte", "values")
|
return self.conf.get("transalte", "values")
|
||||||
def proxy(self) -> [str, int, int, str]:
|
def proxy(self) -> [str, int, int, str]:
|
||||||
try:
|
try:
|
||||||
@@ -185,6 +192,10 @@ class Config:
|
|||||||
sec8 = "transalte"
|
sec8 = "transalte"
|
||||||
conf.add_section(sec8)
|
conf.add_section(sec8)
|
||||||
conf.set(sec8, "switch", "0")
|
conf.set(sec8, "switch", "0")
|
||||||
|
conf.set(sec8, "engine", "google-free")
|
||||||
|
conf.set(sec8, "appid", "")
|
||||||
|
conf.set(sec8, "key", "")
|
||||||
|
conf.set(sec8, "delay", "1")
|
||||||
conf.set(sec8, "values", "title,outline")
|
conf.set(sec8, "values", "title,outline")
|
||||||
|
|
||||||
sec9 = "trailer"
|
sec9 = "trailer"
|
||||||
@@ -230,4 +241,8 @@ if __name__ == "__main__":
|
|||||||
print(config.escape_folder())
|
print(config.escape_folder())
|
||||||
print(config.debug())
|
print(config.debug())
|
||||||
print(config.is_transalte())
|
print(config.is_transalte())
|
||||||
|
print(config.get_transalte_engine())
|
||||||
|
print(config.get_transalte_appId())
|
||||||
|
print(config.get_transalte_key())
|
||||||
|
print(config.get_transalte_delay())
|
||||||
print(config.transalte_values())
|
print(config.transalte_values())
|
||||||
|
|||||||
23
core.py
23
core.py
@@ -229,8 +229,27 @@ def get_data_from_json(file_number, filepath, conf: config.Config): # 从JSON
|
|||||||
if conf.is_transalte():
|
if conf.is_transalte():
|
||||||
translate_values = conf.transalte_values().split(",")
|
translate_values = conf.transalte_values().split(",")
|
||||||
for translate_value in translate_values:
|
for translate_value in translate_values:
|
||||||
json_data[translate_value] = translate(json_data[translate_value])
|
if json_data[translate_value] == "":
|
||||||
|
continue
|
||||||
|
if conf.get_transalte_engine() == "baidu":
|
||||||
|
json_data[translate_value] = translate(
|
||||||
|
json_data[translate_value],
|
||||||
|
target_language="zh",
|
||||||
|
engine=conf.get_transalte_engine(),
|
||||||
|
app_id=conf.get_transalte_appId(),
|
||||||
|
key=conf.get_transalte_key(),
|
||||||
|
delay=conf.get_transalte_delay(),
|
||||||
|
)
|
||||||
|
elif conf.get_transalte_engine() == "azure":
|
||||||
|
json_data[translate_value] = translate(
|
||||||
|
json_data[translate_value],
|
||||||
|
target_language="zh-Hans",
|
||||||
|
engine=conf.get_transalte_engine(),
|
||||||
|
key=conf.get_transalte_key(),
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
json_data[translate_value] = translate(json_data[translate_value])
|
||||||
|
|
||||||
if conf.is_trailer():
|
if conf.is_trailer():
|
||||||
if trailer:
|
if trailer:
|
||||||
json_data['trailer'] = trailer
|
json_data['trailer'] = trailer
|
||||||
|
|||||||
Reference in New Issue
Block a user