基于 ChatGPT API 的划词翻译浏览器脚本实现
积累知识,胜过积蓄金银!毕竟在##column_title##开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《基于 ChatGPT API 的划词翻译浏览器脚本实现》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~
前言
最近 GitHub 上有个基于 ChatGPT API 的浏览器脚本,openai-translator, 短时间内 star 冲到了 12k, 功能上除了支持翻译外,还支持润色和总结功能,除了浏览器插件外,还使用了 tauri 打包了一个桌面客户端,那抛开 tauri 是使用 rust 部分,那浏览器部分实现还是比较简单的,今天我们就来手动实现一下。
openAI 提供的接口
比如我们可以复制以下代码,在浏览器控制台中发起请求,就可以完成翻译
//示例 const OPENAI_API_KEY = "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"; const prompt = `Translate this into Chinese: hello world`; const res = await fetch("https://api.openai.com/v1/completions", { method: "POST", headers: { "Content-Type": "application/json", authorization: `Bearer ${OPENAI_API_KEY}`, }, body: JSON.stringify({ model: "text-davinci-003", prompt, max_tokens: 1000, temperature: 0, }), }); const response = await res.json(); const result = response.choices[0].text;
上述代码中 OPONAI_API_KEY 需要替换成你自己的。
实现划词翻译
划词翻译是一种常见的网页功能,用户选择一个单词或一段文本时,自动弹出一个小窗口,显示该单词或文本的翻译。
- 首先,在 HTML 页面中添加一个空的 DIV 元素和一个触发翻译的按钮
let keyword; const translation = document.createElement("div"); translation.id ="translation"; const icon = document.createElement("img"); icon.style.width ="30px"; icon.style.height = "30px"; icon.src ="http://example.com/icon.png"; translation.appendChild(icon)
- 为页面添加一个鼠标抬起事件监听器,当用户选择一段文本时,设置搜索关键词。
document.addEventListener("mouseup", (event) => { const selection = window.getSelection().toString().trim(); if (selection) { keyword=selection; } });
- 鼠标点击执行翻译逻辑。可以使用 AJAX 请求从后台获取翻译结果并将其显示在 DIV 元素中。
function translate(){ if(keyword){ // 执行翻译逻辑 } } icon.addEventListener("mouseover", translate);
- 在 CSS 样式表中为 DIV 元素添加样式,使其浮动在页面上显示。
#translation { position: fixed; top: 10px; right: 10px; max-width: 300px; padding: 5px; background-color: #f7f7f7; border: 1px solid #ccc; box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.1); z-index: 9999; }
以上这些步骤就能实现划词翻译的基本功能,一起来看下效果。
react + antd 实现
上面的代码只是实现了一个最简单的版本,样式也不够美观,因此我们可以使用 webpack + react + antd 来实现一个现代化的插件, 这里我使用一个之前创建的模版tampermonkey-starter。
使用 antd 的 Popover 组件来显示,使用 react 重构下js代码,我们就可以实现如下效果。
划词翻译
点击翻译按钮,就会通过接口请求,将翻译结果显示在下方。但是翻译结果需要等 api 完全返回,才会显示出来,这样会等待较慢,我们可以使用 Stream,OpenAI 的接口支持流渲染吗,这样结果就会一个字一个字蹦出来。
import { createParser } from "eventsource-parser"; const translate = async (text: string) => { const resp = await fetch("https://api.openai.com/v1/completions", { method: "POST", headers: { "Content-Type": "application/json", authorization: `Bearer ${OPENAI_API_KEY}`, }, body: JSON.stringify({ model: "text-davinci-003", prompt: `Translate this into Chinese: ${text}`, max_tokens: 1000, temperature: 0, frequency_penalty: 0, stream: true, }), }); if (resp.status !== 200) { const res = await resp.json(); setLoading(false); console.error(res); return; } const parser = createParser((event) => { if (event.type === "event") { const data = event.data; if (data === "[DONE]") { setLoading(false); } try { let json = JSON.parse(event.data); setResult((prev) => { return prev + json.choices[0].text; }); } catch (error) { console.log(error); } } }); const data = resp.body; if (!data) { console.log("Error: No data received from API"); return; } const reader = resp.body.getReader(); try { while (true) { const { done, value } = await reader.read(); if (done) { setLoading(false); break; } const str = new TextDecoder().decode(value); parser.feed(str); } } finally { reader.releaseLock(); } };
在上面代码中,我们使用 fetch API 发送了一个 HTTP 请求,并在响应中获取了一个可读流。我们可以使用 getReader 方法获取一个读取器对象,并使用它来处理流数据,使用了 eventsource-parser这个包来解析服务器推送(Server-sent events)的数据。
这样响应的内容就会根据Server-sent events(服务器发送的事件)逐个显示了。
文本转语音
一般翻译插件都有语音播放的功能,我们可以利用 可以使用Web Speech API。此API提供了两个语音合成接口:SpeechSynthesis和SpeechSynthesisUtterance
function speak(text) { if ('speechSynthesis' in window) { const utterance = new SpeechSynthesisUtterance(text); utterance.voice = speechSynthesis.getVoices()[0]; utterance.pitch = 1; utterance.rate = 1; speechSynthesis.speak(utterance); } }
然后直接调用这个函数,传入需要朗读的文本,就可以实现语音播放
speak('Hello, world!');
小结
本文介绍了如何实现划词翻译的基本功能,包括使用 OpenAI 提供的接口进行翻译、在 HTML 页面中添加触发翻译的按钮和鼠标抬起事件监听事件、使用 AJAX 请求从接口获取翻译结果并将其显示在 DIV 元素中等。同时还介绍了如何使用 webpack + react + antd 实现一个现代化的插件,并利用 Web Speech API 实现语音播放功能。
今天带大家了解了的相关知识,希望对你有所帮助;关于科技周边的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

- 上一篇
- 如何在 Safari、Chrome 和 Firefox 中清除 Mac 上的缓存

- 下一篇
- AI 新算法检测到八个神秘无线电信号,分析显示来自外星球
-
- 科技周边 · 人工智能 | 7小时前 |
- Linux服务器时间校对命令详解及应用
- 420浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 | 量子计算 营收 skywater 第一季度 ThermaView
- SkyWaterQ1营收6130万,强势新平台吸睛
- 293浏览 收藏
-
- 科技周边 · 人工智能 | 8小时前 |
- 问界新M7牧野青发布颜值爆表24.98万起
- 416浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 |
- 2024财年车企净利润榜:丰田居首,小米排15
- 426浏览 收藏
-
- 科技周边 · 人工智能 | 9小时前 | 开源 国产品牌 5G手机 电子信息制造业 软件及信息技术服务业
- 工信部数据:1-2月5G手机出货4161.9万,国产占85%
- 289浏览 收藏
-
- 科技周边 · 人工智能 | 14小时前 | 面板 lge
- LG东南亚工厂暂停,北美成新重心
- 487浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 508次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 484次学习
-
- 毕业宝AIGC检测
- 毕业宝AIGC检测是“毕业宝”平台的AI生成内容检测工具,专为学术场景设计,帮助用户初步判断文本的原创性和AI参与度。通过与知网、维普数据库联动,提供全面检测结果,适用于学生、研究者、教育工作者及内容创作者。
- 23次使用
-
- AI Make Song
- AI Make Song是一款革命性的AI音乐生成平台,提供文本和歌词转音乐的双模式输入,支持多语言及商业友好版权体系。无论你是音乐爱好者、内容创作者还是广告从业者,都能在这里实现“用文字创造音乐”的梦想。平台已生成超百万首原创音乐,覆盖全球20个国家,用户满意度高达95%。
- 33次使用
-
- SongGenerator
- 探索SongGenerator.io,零门槛、全免费的AI音乐生成器。无需注册,通过简单文本输入即可生成多风格音乐,适用于内容创作者、音乐爱好者和教育工作者。日均生成量超10万次,全球50国家用户信赖。
- 30次使用
-
- BeArt AI换脸
- 探索BeArt AI换脸工具,免费在线使用,无需下载软件,即可对照片、视频和GIF进行高质量换脸。体验快速、流畅、无水印的换脸效果,适用于娱乐创作、影视制作、广告营销等多种场景。
- 34次使用
-
- 协启动
- SEO摘要协启动(XieQiDong Chatbot)是由深圳协启动传媒有限公司运营的AI智能服务平台,提供多模型支持的对话服务、文档处理和图像生成工具,旨在提升用户内容创作与信息处理效率。平台支持订阅制付费,适合个人及企业用户,满足日常聊天、文案生成、学习辅助等需求。
- 36次使用
-
- GPT-4王者加冕!读图做题性能炸天,凭自己就能考上斯坦福
- 2023-04-25 501浏览
-
- 单块V100训练模型提速72倍!尤洋团队新成果获AAAI 2023杰出论文奖
- 2023-04-24 501浏览
-
- ChatGPT 真的会接管世界吗?
- 2023-04-13 501浏览
-
- VR的终极形态是「假眼」?Neuralink前联合创始人掏出新产品:科学之眼!
- 2023-04-30 501浏览
-
- 实现实时制造可视性优势有哪些?
- 2023-04-15 501浏览