js_测_试_音_源_代_码
发表于 : 2026年 7月 7日 16:04 星期二
js_测_试_音_源_代_码
代码已更新和lx通用了
代码已更新和lx通用了
代码: 全选
const axios_1 = require("axios");
/**
--复制中间的代码出来使用就行--
const musicItem = {'id':'193290598','title':'如愿','artist':'王菲'}; //kw
const musicItem = {'id':'ec1a18bbd6b61cb203e656b91f5cf2d1','title':'如愿','artist':'王菲'}; //kg
const musicItem = {'id':'1888381008','title':'如愿','artist':'王菲'}; //wy
const musicItem = {'songmid':'001ufyHx10iWpg','title':'如愿','artist':'王菲'}; //qq
const quality = '128k';
const quality = '320k';
const quality = 'flac';
console.log("res : ",res);
const title = musicItem.title
${encodeURIComponent(title)}
*/
const musicItem = {'id':'193290598','title':'如愿','artist':'王菲'}; //kw
const quality = '320k';
const kw_apis = [test_api];
//-------------------------------------------------------------------------------------------------------------------------------------------------------
//api 代码部分 -测试完成后改api名复制到各源就行
async function test_api(musicItem, quality) {
const qlist = {'128k':'standard', '320k':'exhigh', 'flac':'lossless', 'flac24bit':'hires', 'def':'exhigh',}
const q = qlist[quality] ?? qlist.def
const res = (await httpFetch(`https://kw-api.cenguigui.cn/?id=${musicItem.id}&type=song&format=json&level=${q}`));
console.log("res : ",res);
return res?.data?.data?.url || "";
}
/*
需要添加heards的test代码
async function test_api(musicItem, quality) {
//音质
const qlist = {"128k": "128k","320k": "320k","flac": "flac",'def':'320k',}
const q = qlist[quality] ?? qlist.def
//api获取时使用的参数
const CARD_KEY = 'charity'
const SCRIPT_VERSION = 'HYW×Koneko-API-Charity_v0.0.2'
//if (CARD_KEY) headers['X-Card-Key'] = CARD_KEY
const res = (await httpFetch(
`http://171.80.3.149:3003/api/music/url?source=kg&songId=${musicItem.id}&quality=${q}`,
{headers: {
'X-Script-Version': SCRIPT_VERSION,
'X-Card-Key': CARD_KEY,
},
})).data;
console.log("res: ",res);
//return res?.data?.url || "";
}
*/
//-------------------------------------------------------------------------------------------------------------------------------------------------------
//
//
/**--------------------------------------------------------*/
//下面是固定代码,放到订阅固定不动处,只复制音源就行了
//
//
//有了httpFetch代码就和lx通用了,不用再修改了
const httpFetch = axios_1
/** 通用执行器 **/
async function getMediaSource(musicItem, quality) {
console.log("========== 开始获取音源 ==========");
//自动选择自己定义的apis不用一个一个修改了
let apiList = typeof wy_apis !== "undefined" ? wy_apis : typeof kw_apis !== "undefined" ? kw_apis : typeof kg_apis !== "undefined" ? kg_apis : typeof qq_apis !== "undefined" ? qq_apis : [];
if (typeof qq_apis !== "undefined" && apiList === qq_apis) musicItem = { ...musicItem, id: musicItem.songmid };
for (const api of apiList) {
const apiName = api.name;
try {
logApi(apiName, "开始:");
// ⏱️ 记录开始时间
const startTime = Date.now();
const musicUrl = await api(musicItem, quality);
// ⏱️ 结束时间 + 耗时
const costTime = Date.now() - startTime;
logApi(apiName, `耗时: ${costTime}ms`);
if (musicUrl && musicUrl !== "None") {
logApi(apiName, `成功: ${musicUrl}`);
//自己测试所有api的话,注释掉下面这行
return {url: musicUrl,source: apiName,};
} else {
logApi(apiName, `获取失败!`);
}
} catch (err) {
logApi(apiName, `执行异常:`, err);
}
}
console.log("========== 所有API获取完成 ==========");
return {url: "",source: "",};
}
/** 统一日志 **/
function logApi(apiName, msg, err = null) {
if (err) {
console.error(`[${apiName}] ${msg}`, err.message || err);
} else {
console.log(`[${apiName}] ${msg}`);
}
}
//
//
/**--------------------------------------------------------*/
//上面是固定代码,放到订阅固定不动处,只复制音源就行了
//
//
//
/**--------------------------------------------------------*/
// 示例调用
(async () => {
const redirectUrl = await getMediaSource(musicItem, quality);
console.log("最终的重定向 URL:", redirectUrl);
})();