精易论坛

标题: 易语言调用Deepl翻译 [打印本页]

作者: 梦汐    时间: 2023-9-8 01:19
标题: 易语言调用Deepl翻译
  
窗口程序集名保 留  保 留备 注
Deepl   
子程序名返回值类型公开备 注
_初始化 当基于本类的对象被创建后,此方法会被自动调用

子程序名返回值类型公开备 注
_销毁 当基于本类的对象被销毁前,此方法会被自动调用

子程序名返回值类型公开备 注
初始化逻辑型 
变量名类 型静态数组备 注
计次整数型 
端口整数型 
端口状态逻辑型 
端口 = 17813
如果真 (端口检测 (端口, “127.0.0.1”))
执行 (4, 取运行目录 ()“/build/deepl.exe”, , , 1)
计次循环首 (15, 计次)
端口状态 = 端口检测 (端口, “127.0.0.1”)
如果真 (端口状态 = )
跳出循环 ()
程序_延时 (1000, )
计次循环尾 ()
如果真 (端口状态 = )
信息框 (“Deepl初始化失败”, 0, , )
返回 ()

返回 ()
子程序名返回值类型公开备 注
翻译字节集 
参数名类 型参考可空数组备 注
query字节集
from文本型auto
to文本型ja
变量名类 型静态数组备 注
zyjszyJsonDocument 
url文本型 
响应数据字节集 
zyjs.创建 (, , , )
zyjs.置文本W (编码_Ansi到Unicode (“query”, ), query)
zyjs.置文本 (“from_lang”, from)
zyjs.置文本 (“to_lang”, to)
url = “http://127.0.0.1:17813/”
网页_访问S (url, 1, zyjs.到文本UTF8 (, , , ), , , , , , , , , , , , , , 响应数据, , , , )
zyjs.解析W (编码_Utf8到Unicode (响应数据), , , )
如果真 (zyjs.取逻辑 (“error”))
返回 (zyjs.到文本W (, , , ))
返回 (zyjs.取文本W (编码_Ansi到Unicode (“response.result.texts[0].text”, )))


i支持库列表   支持库注释   
eAPI应用接口支持库
shell操作系统界面功能支持库

[Python] 纯文本查看 复制代码
from http.server import BaseHTTPRequestHandler, HTTPServer
from requests.exceptions import HTTPError
import requests
import random
import socket
import json
import time

def initData(source_lang, target_lang):
    return {
        "jsonrpc": "2.0",
        "method": "LMT_handle_texts",
        "params": {
            "splitting": "newlines",
            "lang": {
                "source_lang_user_selected": source_lang,
                "target_lang": target_lang
            }
        }
    }

def getICount(translate_text):
    return translate_text.count('i')

def getRandomNumber():
    rand = random.randint(100000, 999999)
    return rand * 1000

def getTimeStamp(iCount):
    ts = int(time.time() * 1000)
    if iCount != 0:
        iCount += 1
        return ts - (ts % iCount) + iCount
    else:
        return ts

def PostData(url, data):
    headers = {"Content-Type": "application/json"}
    try:
        response = requests.post(url, headers=headers, data=data)
        response.raise_for_status()
        return response.json()
    except HTTPError as e:
        if response.status_code == 429:
            return {"ErrorInfo": "Deepl拒绝请求码(429):你已达到请求上限,请稍后再试."}
        else:
            return {"ErrorInfo":  str(e)}
    except Exception as e:
        return {"ErrorInfo": str(e)}

def translate(query, from_lang, to_lang):
    targetLanguage = to_lang.upper()
    sourceLanguage = from_lang.upper()
    if not targetLanguage:
        raise ValueError("不支持该语种")
    source_lang = sourceLanguage or 'ZH'
    target_lang = targetLanguage or 'EN'
    translate_text = query or ''
    if translate_text != '':
        url = 'https://www2.deepl.com/jsonrpc'
        id = getRandomNumber()
        post_data = initData(source_lang, target_lang)
        text = {
            "text": translate_text,
            "requestAlternatives": 3
        }
        post_data["id"] = id
        post_data["params"]["texts"] = [text]
        post_data["params"]["timestamp"] = getTimeStamp(
            getICount(translate_text))
        post_str = json.dumps(post_data)
        if (id + 5) % 29 == 0 or (id + 3) % 13 == 0:
            post_str = post_str.replace('"method":"', '"method" : "')
        else:
            post_str = post_str.replace('"method":"', '"method": "')
        try:
            response = PostData(url, post_str)
            print("response",response)
            if "error" in response:
                return {"error": True,"response": response}
            else:
                return {"error": False,"response": response}

        except Exception as e:
            raise ValueError("请求错误 - " + str(e))

class MyRequestHandler(BaseHTTPRequestHandler):
    def _set_response(self):
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        # 将接收到的POST内容解析为JSON
        json_data = json.loads(post_data)
        # 将JSON中的所有值转换为大写
        for key in json_data:
            print("read",key,json_data[key])
        
        response = json.dumps(translate(json_data['query'], json_data['from_lang'], json_data['to_lang']))

        self._set_response()
        self.wfile.write(response.encode('utf-8'))

port = 17813

def run(server_class=HTTPServer, handler_class=MyRequestHandler):
    server_address = ('127.0.0.1', port)
    httpd = server_class(server_address, handler_class)
    print(f'server port {port}...')
    httpd.serve_forever()

if __name__ == '__main__':
    def is_port_in_use(port):
        with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
            try:
                s.bind(("localhost", port))
                return False
            except OSError:
                return True
    if is_port_in_use(port):
        print(f"端口 {port} 已被占用,取消运行。")
    else:
        run() # python38 -m nuitka --standalone --remove-output --mingw64 --onefile deepl.py



作者: 查过    时间: 2023-9-8 07:42
全都是大佬~
作者: 豆豆灰常开心    时间: 2023-9-8 07:46
全都是大佬~
作者: 君九    时间: 2023-9-8 07:59

感谢分享
作者: 一指温柔    时间: 2023-9-8 08:38
感谢分享
作者: gdhong    时间: 2023-9-8 08:46
谢谢分享
作者: 非常猥锁    时间: 2023-9-8 09:54
访问超过10次,会不会返回空?抓包封装就会出现这个情况
作者: 13012145633    时间: 2023-9-8 12:35
#在这里快速回复# 支持一下 nice
作者: q1512960733    时间: 2023-9-8 12:56
支持一下
作者: x1ao沫    时间: 2023-9-8 13:28
支持一下
作者: heiioxiaojian    时间: 2023-9-8 20:50
支持一下
作者: 一一一2    时间: 2023-9-8 21:59
deepl是干什么用的
作者: bianyuan456    时间: 2023-9-9 00:34
已经顶贴,感谢您对论坛的支持!
作者: 一指温柔    时间: 2023-9-9 08:38
支持开源,感谢分享!
作者: 396384183    时间: 2023-9-9 09:54
感谢分享
作者: ttggnn    时间: 2023-9-10 21:15
感谢分享
作者: w1398113241    时间: 2023-9-12 10:55
感谢大佬
作者: pipicool    时间: 2023-9-13 13:57
学习一下
作者: 糖糖啊    时间: 2023-9-15 03:57
用到精易模块
作者: caskywz    时间: 2023-9-15 23:26
        感谢分享,很给力!~
作者: antoni    时间: 2023-9-29 02:05

谢谢分享

作者: gdj528    时间: 2023-10-20 22:36
请问这个是要下载桌面版的DeepL程序才可以用?
作者: ferrisy    时间: 2023-10-21 11:21
DrawLine才可以用




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4