分页: 1 / 1

js_测_试_音_源_代_码

发表于 : 2026年 7月 7日 16:04 星期二
rxxx
js_测_试_音_源_代_码
代码已更新和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);
})();