Files
yenai-plugin/model/Interface.js
2023-01-12 19:10:04 +08:00

82 lines
3.2 KiB
JavaScript

import fetch from "node-fetch";
import md5 from "md5";
import lodash from "lodash";
const API_ERROR = "出了点小问题,待会再试试吧";
export default new class Interface {
/**有道翻译 */
async youdao(msg) {
// 翻译结果为空的提示
const RESULT_ERROR = "找不到翻译结果";
// API 请求错误提示
const qs = (obj) => {
let res = "";
for (const [k, v] of Object.entries(obj))
res += `${k}=${encodeURIComponent(v)}&`;
return res.slice(0, res.length - 1);
};
const appVersion = "5.0 (Windows NT 10.0; Win64; x64) Chrome/98.0.4750.0";
const payload = {
from: "AUTO",
to: "AUTO",
bv: md5(appVersion),
client: "fanyideskweb",
doctype: "json",
version: "2.1",
keyfrom: "fanyi.web",
action: "FY_BY_DEFAULT",
smartresult: "dict"
};
const headers = {
Host: "fanyi.youdao.com",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/98.0.4758.102",
Referer: "https://fanyi.youdao.com/",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
Cookie: `OUTFOX_SEARCH_USER_ID_NCOO=133190305.98519628; OUTFOX_SEARCH_USER_ID="2081065877@10.169.0.102";`
};
const api = "https://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule";
const key = "Ygy_4c=r#e#4EX^NUGUc5";
const i = msg; // 翻译的内容
const lts = "" + new Date().getTime();
const salt = lts + parseInt(String(10 * Math.random()), 10);
const sign = md5(payload.client + i + salt + key);
const postData = qs(Object.assign({ i, lts, sign, salt }, payload))
try {
let { errorCode, translateResult } = await fetch(api, {
method: "POST",
body: postData,
headers
}).then(res => res.json()).catch(err => console.error(err));
if (errorCode != 0) return API_ERROR;
translateResult = lodash.flattenDeep(translateResult)?.map(item => item.tgt).join("\n");
if (!translateResult) return RESULT_ERROR
return translateResult
} catch (e) {
console.log(e);
return API_ERROR
}
}
/**随机唱歌/唱鸭 */
async randomSinging() {
try {
const api = `https://m.api.singduck.cn/user-piece/SoQJ9cKu61FJ1Vwc7`
let res = await fetch(api).then(res => res.text());
let JSONdara = JSON.parse(res.match(/<script id="__NEXT_DATA__" type="application\/json" crossorigin="anonymous">(.*?)<\/script>/)[1])
if (!JSONdara) return { error: API_ERROR }
let piece = lodash.sample(JSONdara.props.pageProps.pieces)
let { songName, lyric, audioUrl } = piece
if (!audioUrl) return { error: "找不到歌曲文件" }
return {
lyrics: `${songName}\n${lyric}`,
audioUrl: decodeURIComponent(audioUrl)
}
} catch (error) {
console.log(error);
return { error: API_ERROR }
}
}
}