选中英文文字,点击浮标,调用 openAI 的 text-davinci-003 将其翻译为中文,需输入自己的 APIkey
// ==UserScript==
// @namespace 英文翻译
// @version 1.2
// @description 选中英文文字,点击浮标,调用 openAI 的 text-davinci-003 将其翻译为中文,需输入自己的 APIkey
// @match *://*/*
// @license MIT
// @name 英文翻译 - 调用 openAI 接口
// ==/UserScript==
(function() {
// 监听鼠标选中事件
document.addEventListener("mouseup", function(event) {
const selectedText = window.getSelection().toString();
const audio = new Audio(`https://tsn.baidu.com/text2audio?tex=${selectedText}&lan=zh&cuid=abcdefg1234567&ctp=1&per=5003&tok=你自己的 tok`);
if (selectedText && event.target.innerText !== '👻') {
//生成一个浮标
const ghost = document.createElement('button');
ghost.innerText = '👻';
ghost.style.position = 'absolute';
ghost.style.top = event.pageY + 'px';
ghost.style.left = event.pageX + 'px';
ghost.style.fontSize = '2rem';
ghost.style.backgroundColor = 'transparent';
ghost.style.border = 'none';
//ghost.style.boxShadow = '2px 2px 5px rgba(0, 0, 0, 0.5)';
document.body.appendChild(ghost);
setTimeout(() => {
ghost.remove();
}, 1500);
ghost.addEventListener('click', function(){
// 调用 OpenAI GPT 模型进行翻译
const apiKey = "你自己的 api";
const url = "https://api.openai.com/v1/engines/text-davinci-003/completions";
const headers = {
"Content-Type": "application/json",
"Authorization": `Bearer ${apiKey}`
};
const data = {
"prompt": `Translate the following English text into Chinese:\n\n${selectedText}`,
"temperature": 0.7,
"max_tokens": 1000,
"top_p": 1,
"frequency_penalty": 0,
"presence_penalty": 0
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(data)
})
.then(response => response.json())
.then(result => {
// 创建翻译结果和原文的 DOM 元素
const translationElement = document.createElement("span");
translationElement.style.backgroundColor = "#ffff00";
translationElement.style.color = "#000000";
translationElement.style.fontWeight = "bold";
translationElement.style.borderRadius = "3px";
translationElement.style.padding = "2px";
translationElement.style.marginLeft = "2px";
translationElement.appendChild(document.createTextNode(result.choices[0].text));
const originalElement = document.createElement("span");
originalElement.style.backgroundColor = "#ffffff";
originalElement.style.color = "#000000";
originalElement.style.borderRadius = "3px";
originalElement.style.padding = "2px";
originalElement.appendChild(document.createTextNode(selectedText));
// 替换选中的文字为翻译结果和原文
const range = window.getSelection().getRangeAt(0);
range.deleteContents();
range.insertNode(translationElement);
range.insertNode(originalElement);
audio.play();
})
.catch(error => {
console.error(error);
});
})
}
});
})();