LunaTranslator Network Service API 完整指南:内置 HTTP / WebSocket 服务的页面、接口与源码实现 📅 发布时间:2026/9/15 12:29:14 👁 浏览次数: LunaTranslator Network Service API 完整指南内置 HTTP / WebSocket 服务的页面、接口与源码实现【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslatorLunaTranslator 内置一套自研的轻量级网络服务TCP/HTTP/WebSocket无需外部依赖即可在本机提供 Web 页面、翻译 / 查词 / OCR / TTS 接口以及实时文本流。本文以 docs/en/apiservice.md 为主线结合 network/server 模块源码系统讲解该服务的启用方式、全部 Web 页面与 API 端点、返回格式、调用示例及底层实现原理帮助你用浏览器、curl 或自研脚本直接驱动 LunaTranslator 的完整能力。启用与访问方式网络服务默认关闭需要在 LunaTranslator 的**核心设置网络服务**面板中开启。对应实现位于 gui/setting/textinput.py 的getnetgrid开启开关对应全局配置networktcpenable默认false打开后回调触发serviceinit()。端口号对应networktcpport范围 0–65535默认2333修改端口同样会触发serviceinit()重启服务。打开按钮直接调用系统默认浏览器打开http://127.0.0.1:{port}即本服务的导航首页。服务启停与端口绑定的核心逻辑在 LunaTranslator.pythreader def serviceinit(self): gobject.base.portconflict.emit() self.service.stop() if globalconfig.get(networktcpenable, False): try: self.service.init(globalconfig.get(networktcpport, 2333)) except OSError: gobject.base.portconflict.emit(端口冲突)注意TCPService.init实际绑定的是(0.0.0.0, port)见 tcpservice.py即监听所有网卡同一局域网内的其他设备也可访问同时意味着需注意防火墙与局域网信任边界。端口被占用时界面会提示“端口冲突”。另有配置项network_service_disabled_paths见 defaultconfig/config.json可列出被禁用的路径命中路径直接返回 404。Web 页面浏览器界面服务根路径/是一个导航页源码见 htmlcode/service/index.html其中列出以下 7 个子页面均以/page/开头。/page/mainui —— 主窗口文本同步页与 LunaTranslator 主窗口当前显示的游戏/OCR 文本内容实时同步支持点击单词查词、鼠标滚轮浏览历史等交互。页面数据来自TextBrowser.loadex_()servicecollection.py 中PageMainui并通过内部 WebSocket/__internalservice/mainuiws推送文本与接收交互指令webview.py 中的somecommon基类定义了calllunaloadready、calllunaclickedword、callwheelEvent等可被页面 JS 调用的方法。/page/transhist —— 翻译历史同步页与 LunaTranslator 的翻译历史面板内容同步对应Pagetranshist返回wvtranshist.loadex_()由内部 WebSocket/__internalservice/transhistws驱动刷新可查看历史句子、原文与译文对照。/page/dictionary —— 单词查询页即查词页面。当在/page/mainui中点击某个单词查词时会唤出该页面新窗口展示词典查询结果。页面支持通过 URL 查询参数word直接带入待查单词若该词带有原型prototype服务端会自动重定向到以原型查询的地址见PageSearchWord的 302 逻辑。/page/manyinone —— 三合一整合页把上述mainui、transhist、dictionary三个页面整合到一个窗口。在该窗口的 mainui 子区域点击单词查词时不会新开查词窗口而是在当前窗口的 dictionary 子区域直接展示结果对应PageManyInOne返回 htmlcode/service/manyinone.html。/page/translate —— 翻译界面独立的翻译输入/输出界面对应 htmlcode/service/translate.html可在浏览器中手动输入文本调用 LunaTranslator 当前翻译链路。/page/ocr —— OCR 界面提供图片识别入口对应 htmlcode/service/ocr.html识别任务经由服务端ocr_run交给当前配置的 OCR 引擎执行。/page/tts —— TTS 语音合成界面提供文本转语音的网页界面对应 htmlcode/service/tts.html可调用当前配置的 TTS 引擎并播放返回的音频。HTTP API 服务所有 HTTP API 均位于/api/前缀。服务端实现要点tcpservice.py请求解析RequestInfo通过urlsplit分离path与queryquery 以parse_qsl解析为字典POST 请求体按Content-Length读取并可由RequestBody.json解码。响应封装ResponseInfo自动根据 body 类型设置响应头——dict/list输出application/json; charsetutf-8GeneratorType输出text/event-stream; charsetutf-8bytes携带Content-LengthFileResponse按 MIME 类型返回静态文件RedirectResponse产生 302。所有响应统一携带Access-Control-Allow-Origin: *因此也支持浏览器跨域调用。方法校验handler 可声明method如POST不匹配时返回 404。GET /api/translate参数text必填待翻译文本id可选翻译器 ID。行为指定id时强制使用该翻译器翻译waitforresultcallbackengine_forceTrue未指定时由 LunaTranslator 自动选择当前“最快的可用翻译接口”。返回application/json成功时包含翻译器 IDid、名称name、译文result翻译出错时返回含error错误信息与可选id/name的 JSON 对象。curl 示例# 自动选择最快翻译接口 curl http://127.0.0.1:2333/api/translate?text%E4%BD%A0%E5%A5%BD # 指定翻译器 id 强制使用 curl http://127.0.0.1:2333/api/translate?texthelloiddeeplapi-free实现对应APITranslateservicecollection.py通过gobject.base.textgetmethod走完整翻译链路并以threading.Event同步等待结果。GET /api/dictionary参数word必填查询单词id可选词典 ID。行为指定id时只查该词典未指定时并发查询所有当前启用的词典。返回指定idapplication/json对象包含词典 IDid、词典名称name、HTML 内容result查询失败返回空对象{}。未指定id返回text/event-stream每个 event 是一个 JSON 对象同样含id、name、result一个词典一个事件逐条推送。SSE 接收示例未指定 id流式接收各词典结果curl -N http://127.0.0.1:2333/api/dictionary?word%E6%98%A5服务端iterhelper用信号量Semaphore等待所有词典的safesearch并发查询结束再有结果地 yield 事件servicecollection.py响应写入时每个事件按data: {json}\n\n格式输出tcpservice.py。GET /api/mecab参数text必填。返回Mecab 对text的解析结果分词、词性、读音等对应APImecab内部调用gobject.base.parsehira(text)返回结构化列表。GET /api/tts参数text必填。返回音频二进制数据。实现中调用当前 TTS 引擎异步合成gobject.base.reader.ttscallback响应头包含content-type如audio/mpeg与content-length合成失败则返回含error字段的 JSON。保存到文件的示例curl -o out.mp3 http://127.0.0.1:2333/api/tts?texthello%20worldPOST /api/ocr请求POSTJSON 请求体包含image字段值为base64 编码的图像数据。返回OCR 识别结果 JSONresult.json。实现APIocr先用QImage.loadFromData解码 base64 图像再交给ocr_run走当前配置的 OCR 引擎servicecollection.py。调用示例curl -X POST http://127.0.0.1:2333/api/ocr \ -H Content-Type: application/json \ --data {\image\:\$(base64 -w0 screen.png)\}GET /api/list/dictionary列出当前可用的全部词典返回 JSON 数组每个元素含词典 IDid与本地化名称name按cishuvisrank顺序遍历当前已加载词典gobject.base.cishus。GET /api/list/translator列出当前可用的全部翻译器返回 JSON 数组每个元素含翻译器 IDid与本地化名称name按fix_translate_rank_rank顺序遍历当前已加载翻译器gobject.base.translators。这两个接口配合/api/translate的id与/api/dictionary的id参数使用可实现“先枚举、再按 ID 精确调用”。GET /api/textinput参数text必填。行为将text注入 LunaTranslator 的文本处理链路gobject.base.textgetmethod(text, is_auto_runFalse)相当于外部向主程序“投递”一句文本可触发后续的翻译/显示流程适合做外部工具的文本入口。WebSocket 服务WebSocket 端点在握手时通过Sec-WebSocket-Key 固定 GUID258EAFA5-E914-47DA-95CA-C5AB0DC85B11计算Sec-WebSocket-Accept完成升级tcpservice.py并自行实现帧的收发与掩码解码、ping/pong 与关闭帧处理无需任何第三方库。/api/ws/text/origin持续输出推送给所有已连接客户端LunaTranslator提取到的全部原文文本。客户端连接后即被加入wsoutputsave广播列表TextOutputOrigin.parse后续每条原文经WSForEach广播给在线连接。/api/ws/text/trans持续输出全部翻译结果同样基于wsoutputsave列表广播TextOutputTrans。这两个端点适合构建实时字幕、双语对照采集、外挂弹幕等应用。广播机制的实现见 servicecollection_1.pywsoutputsave保存在线 WS 客户端WSForEach在独立线程中遍历并调用send_text遇到OSError自动剔除断开的连接。浏览器端 JavaScript 订阅示例const ws new WebSocket(ws://127.0.0.1:2333/api/ws/text/trans); ws.onmessage (e) { const result JSON.parse(e.data); // 结构同 /api/translate 的返回 console.log(result.result); };源码架构一览整个服务由 network/server/tcpservice.py 与 network/server/servicecollection.py 组成TCPServiceinit(port)绑定0.0.0.0并开始listen每来一个连接由线程处理先解析RequestInfo命中network_service_disabled_paths则直接 404再按“HTTP 请求走 HTTPHandler、含 Upgrade: websocket 走 WSHandler”的规则分派到注册的 handler。HandlerBase / HTTPHandler / WSHandler路由基类HTTPHandler校验方法并写回响应WSHandler完成握手后进入收发循环。registerall(service)在 servicecollection.py 中集中注册本文介绍的全部页面、API 与 WS 端点LunaTranslator.py启动时即调用registerall(self.service)完成挂载。静态页面/page/*各页面对应 htmlcode/service 目录下的index.html、mainui.htmlTextBrowser.loadex_、dictionary.html、manyinone.html、translate.html、ocr.html、tts.html等文件由FileResponse按 MIME 返回。典型应用场景远程查词/翻译脚本先请求/api/list/dictionary与/api/list/translator获取 ID再按需调用/api/dictionary?word...id...与/api/translate?text...id...适合制作浏览器翻译插件、词典联动工具。实时双语采集用/api/ws/text/origin与/api/ws/text/trans订阅原文与译文流可对接 OBS 字幕、弹幕姬、语料采集等下游程序。OCR / TTS 复用通过/api/ocrPOST base64与/api/tts复用 LunaTranslator 已配置好的引擎免去重复搭建识别与合成环境。多端同步浏览在局域网内用浏览器打开/page/mainui、/page/transhist或/page/manyinone即可在手机/平板上同步查看主窗口文本与查词结果实现“电脑玩游戏、手机看译文”。注意事项服务监听0.0.0.0同网段设备均可访问请勿在不可信网络中开放该端口必要时可通过防火墙限制来源。默认端口 2333可在设置中修改端口冲突时程序会提示“端口冲突”而不会静默失败。可通过network_service_disabled_paths配置禁用指定路径进一步缩小暴露面。/api/dictionary不带id时返回text/event-streamSSE注意与普通 JSON 响应在客户端处理方式上的差异。【免费下载链接】LunaTranslator视觉小说翻译器 / Visual Novel Translator项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考