Comments (8)
糊了个deeplx代理,如果能实现这种效果最好,不然一个API经常会遇到查询太快没有响应的情况
https://linux.do/t/topic/61505/3
from kiss-translator.
https://linux.do/t/topic/60749 如帖子中提到的,沉浸式翻译支持在api处填入以逗号分隔的多个api 但是沉浸式翻译的实现可能有点问题
http://59.110.34.163:85/translate,https://101.132.242.99/translate,https://89.208.240.50/translate,http://67.61.193.42:51004/translate,https://154.18.161.26/translate,https://152.67.197.197/translate
翻译的时候轮询这些api,如果第一次翻译失败会自动用下一个api再尝试一次
可以做个对url轮寻,问题不大。失败重试也可以,不过可能需要接口在失败时返回非200状态码,这样比较好处理。
from kiss-translator.
糊了个deeplx代理,如果能实现这种效果最好,不然一个API经常会遇到查询太快没有响应的情况 https://linux.do/t/topic/61505/3
没有linux.do的帐号,看不到你发的链接内容。
from kiss-translator.
糊了个deeplx代理,如果能实现这种效果最好,不然一个API经常会遇到查询太快没有响应的情况 https://linux.do/t/topic/61505/3
没有linux.do的帐号,看不到你发的链接内容。
用法如下
1 把收集到的urls放在`urls.txt`,一行一个,比如下面这样
https://api.deeplx.org/
https://deeplx.papercar.top/
https://deepl.dlwlrma.xyz/
2 运行代理
python xx.py
依赖
pip install gevent flask requests
3 设置沉浸式翻译里面的接口为
http://127.0.0.1:5000/translate
代码原理如下
1 启动时判断API有效性
2 每次翻译查询,由代理随机选择api进行查询,不行就切换,直到获得查询结果(尝试10次)
import random
import gevent
from gevent.pool import Pool
from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()
import requests
requests.packages.urllib3.disable_warnings(
requests.packages.urllib3.exceptions.InsecureRequestWarning
)
from flask import Flask, request
import json
app = Flask(__name__)
valid_urls = []
def check_url_availability(url):
global valid_urls
try:
headers = {"Content-Type": "application/json"}
payload = {
"text": "Hello, world!",
"source_lang": "EN",
"target_lang": "ZH"
}
response = requests.post(url, verify=False, timeout=5, headers=headers,
data=json.dumps(payload))
if "你好,世界" in response.text:
valid_urls.append(url)
except Exception as e:
print('%s: %s' % (url, type(e).__name__))
def get_valid_urls():
with open("urls.txt", "r") as f:
urls = f.read().splitlines()
for i in range(len(urls)):
urls[i] += "translate"
urls = list(set(urls))
p = Pool(50)
jobs = [p.spawn(check_url_availability, _url) for _url in urls]
gevent.joinall(jobs)
get_valid_urls()
print("available urls count: {}".format(len(valid_urls)))
def get_translate_data(text, source_lang, target_lang):
count = 0
while True:
urls = random.choice(valid_urls)
count += 1
if count == 10:
break
try:
headers = {"Content-Type": "application/json"}
payload = {
"text": text,
"source_lang": source_lang,
"target_lang": target_lang
}
response = requests.post(urls, verify=False, timeout=5, headers=headers,
data=json.dumps(payload))
data = response.json()
if data["code"] == 200:
return response.text
except Exception as e:
print('%s' % (type(e).__name__))
@app.route('/translate', methods=['POST'])
def translate(): # put application's code here
data = json.loads(request.get_data())
text = data['text']
source_lang = data['source_lang']
target_lang = data['target_lang']
return get_translate_data(text, source_lang, target_lang)
if __name__ == '__main__':
http_server = WSGIServer(("127.0.0.1", 5000), app)
http_server.serve_forever()
from kiss-translator.
更新了下代码,之前是查询十次,直到获得翻译结果。现在是开3个任务并发查询,有一个返回就拿到翻译结果了
这样翻译速度快很多
import random
import gevent
from gevent.pool import Pool
from gevent import monkey
from gevent.pywsgi import WSGIServer
monkey.patch_all()
import requests
requests.packages.urllib3.disable_warnings(
requests.packages.urllib3.exceptions.InsecureRequestWarning
)
from flask import Flask, request
import json
app = Flask(__name__)
valid_urls = []
def check_url_availability(url):
global valid_urls
try:
headers = {"Content-Type": "application/json"}
payload = {
"text": "Hello, world!",
"source_lang": "EN",
"target_lang": "ZH"
}
response = requests.post(url, verify=False, timeout=5, headers=headers,
data=json.dumps(payload))
if "你好,世界" in response.text:
valid_urls.append(url)
except Exception as e:
print('%s: %s' % (url, type(e).__name__))
def get_valid_urls():
with open(R"urls.txt", "r") as f:
urls = f.read().splitlines()
for i in range(len(urls)):
urls[i] += "translate"
urls = list(set(urls))
p = Pool(200)
jobs = [p.spawn(check_url_availability, _url) for _url in urls]
gevent.joinall(jobs)
get_valid_urls()
print("available urls count: {}".format(len(valid_urls)))
def single_translate(text, source_lang, target_lang):
for i in range(10):
urls = random.choice(valid_urls)
try:
headers = {"Content-Type": "application/json"}
payload = {
"text": text,
"source_lang": source_lang,
"target_lang": target_lang
}
response = requests.post(urls, verify=False, timeout=5, headers=headers,
data=json.dumps(payload))
data = response.json()
if data["code"] == 200:
return response.text
except Exception as e:
print('%s' % (type(e).__name__))
def get_translate_data(text, source_lang, target_lang):
tasks = [gevent.spawn(single_translate, text, source_lang, target_lang) for _ in range(3)]
done = gevent.wait(tasks, count=1)
for t in tasks:
t.kill()
return done.pop().value
@app.route('/translate', methods=['POST'])
def translate(): # put application's code here
data = json.loads(request.get_data())
text = data['text']
source_lang = data['source_lang']
target_lang = data['target_lang']
return get_translate_data(text, source_lang, target_lang)
if __name__ == '__main__':
http_server = WSGIServer(("127.0.0.1", 5000), app)
http_server.serve_forever()
from kiss-translator.
更新了下代码,之前是查询十次,直到获得翻译结果。现在是开3个任务并发查询,有一个返回就拿到翻译结果了 这样翻译速度快很多
并发的缺点是,会使得翻译接口更容易达到频次限制。
from kiss-translator.
v1.8.8 将支持deeplx的多url轮寻,不过写死了3次重试,如果连续3个url都返回错误将翻译失败。
from kiss-translator.
更新了下代码,之前是查询十次,直到获得翻译结果。现在是开3个任务并发查询,有一个返回就拿到翻译结果了 这样翻译速度快很多
并发的缺点是,会使得翻译接口更容易达到频次限制。
deeplx的好处就在这点,可用公开节点很多,我随便收集了下,有269个能用的
量大管饱(:,沉浸式翻译里面我设置的,每秒请求数20,3个段落。配合我上面的代理,用起来翻译速度也快
from kiss-translator.
Related Issues (20)
- 无法翻译shadow DOM节点 HOT 2
- [help]使用js脚本的情况下,找不到设置选项 HOT 1
- 功能建议:选中目标语言时不弹翻译框 HOT 1
- BUG:划词翻译弹框问题 HOT 1
- 使用freegpt35的项目的openai的api无法翻译 HOT 5
- [Feature request] 导出设置 HOT 2
- 划词翻译增加读音 HOT 8
- 在YouTube直播信息栏中无法呼出翻译按钮 HOT 2
- 为什么新版本没有“鼠标悬停翻译”的功能了? HOT 1
- 手机端kiwi浏览器使用油猴及插件版都无法翻译推特 HOT 9
- "展開/隱藏"的內文,無法全面翻譯 HOT 26
- OpenAI的默认max_tokens是256是否过低? HOT 1
- 可以设置默认不开启吗?需要快捷键后才开启 HOT 2
- 彩云小译 HOT 9
- chrome浏览器下载时出错:Image decode failed HOT 2
- 隐藏悬浮按钮不生效 HOT 1
- 每次使用都要重新设置翻译源 HOT 6
- Feature Request: 上架 Firefox Android 版扩展商店 HOT 1
- 操作超时 HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kiss-translator.