开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 2157|回复: 22
收起左侧

[易源码分享] 易语言调用Deepl翻译

[复制链接]
结帖率:100% (7/7)
发表于 2023-9-8 01:19:52 | 显示全部楼层 |阅读模式   广东省茂名市
分享源码
界面截图: -
是否带模块: -
备注说明: -
  
窗口程序集名保 留  保 留备 注
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



结帖率:0% (0/1)
发表于 2023-10-21 11:21:56 | 显示全部楼层   上海市上海市
DrawLine才可以用
回复 支持 反对

使用道具 举报

结帖率:92% (12/13)

签到天数: 3 天

发表于 2023-10-20 22:36:56 | 显示全部楼层   江苏省*
请问这个是要下载桌面版的DeepL程序才可以用?
回复 支持 反对

使用道具 举报

发表于 2023-9-29 02:05:21 | 显示全部楼层   江苏省扬州市

谢谢分享
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
发表于 2023-9-15 23:26:44 | 显示全部楼层   广东省东莞市
        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

发表于 2023-9-15 03:57:12 | 显示全部楼层   广东省东莞市
用到精易模块
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)

签到天数: 17 天

发表于 2023-9-13 13:57:18 | 显示全部楼层   广东省深圳市
学习一下
回复 支持 反对

使用道具 举报

签到天数: 12 天

发表于 2023-9-12 10:55:27 | 显示全部楼层   山西省晋中市
感谢大佬
回复 支持 反对

使用道具 举报

发表于 2023-9-10 21:15:39 | 显示全部楼层   江苏省连云港市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:73% (8/11)

签到天数: 20 天

发表于 2023-9-9 09:54:58 | 显示全部楼层   河南省焦作市
感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表