mirror of
https://github.com/Jerryplusy/rc-plugin.git
synced 2025-10-14 08:09:19 +00:00
154 lines
5.7 KiB
JavaScript
154 lines
5.7 KiB
JavaScript
// 获取MV信息的函数
|
||
export async function getKugouMv(msg, page_limit, count_limit, n) {
|
||
const url = `https://mobiles.kugou.com/api/v3/search/mv?format=json&keyword=${encodeURIComponent(
|
||
msg
|
||
)}&page=${page_limit}&pagesize=${count_limit}&showtype=1`;
|
||
try {
|
||
const response = await fetch(url);
|
||
const json = await response.json();
|
||
const info_list = json.data.info;
|
||
let data_list = [];
|
||
|
||
if (n !== "") {
|
||
const info = info_list[n];
|
||
const json_data2 = await getMvData(info.hash);
|
||
const mvdata_list = json_data2.mvdata;
|
||
|
||
let mvdata = null;
|
||
if ("sq" in mvdata_list) {
|
||
mvdata = mvdata_list["sq"];
|
||
} else if ("le" in mvdata_list) {
|
||
mvdata = mvdata_list["le"];
|
||
} else if ("rq" in mvdata_list) {
|
||
mvdata = mvdata_list["rq"];
|
||
}
|
||
|
||
data_list = [
|
||
{
|
||
name: info["filename"],
|
||
singername: info["singername"],
|
||
duration: new Date(info["duration"] * 1000)
|
||
.toISOString()
|
||
.substr(14, 5),
|
||
file_size: `${(mvdata["filesize"] / (1024 * 1024)).toFixed(2)} MB`,
|
||
mv_url: mvdata["downurl"],
|
||
cover_url: info["imgurl"].replace("/{size}", ""),
|
||
// 下面这些字段可能需要你从其他地方获取,因为它们不是直接从这个API返回的
|
||
// "play_count": json.play_count,
|
||
// "like_count": json.like_count,
|
||
// "comment_count": json.comment_count,
|
||
// "collect_count": json.collect_count,
|
||
// "publish_date": json.publish_date
|
||
},
|
||
];
|
||
} else {
|
||
data_list = info_list.map((info) => ({
|
||
name: info["filename"],
|
||
singername: info["singername"],
|
||
duration: new Date(info["duration"] * 1000).toISOString().substr(14, 5),
|
||
cover_url: info["imgurl"].replace("/{size}", ""),
|
||
}));
|
||
}
|
||
|
||
return data_list;
|
||
} catch (error) {
|
||
console.error("Error fetching MV data:", error);
|
||
return [];
|
||
}
|
||
}
|
||
|
||
// 获取歌曲信息的函数
|
||
export async function getKugouSong(msg, page_limit, count_limit, n) {
|
||
const url = `https://mobiles.kugou.com/api/v3/search/song?format=json&keyword=${encodeURIComponent(
|
||
msg
|
||
)}&page=${page_limit}&pagesize=${count_limit}&showtype=1`;
|
||
try {
|
||
const response = await fetch(url);
|
||
const json = await response.json();
|
||
const info_list = json.data.info;
|
||
// console.log(info_list)
|
||
let data_list = [];
|
||
|
||
if (n !== "") {
|
||
const info = info_list[n];
|
||
const song_hash = info.hash;
|
||
let song_url = "付费歌曲暂时无法获取歌曲下载链接";
|
||
let json_data2 = {};
|
||
if (song_hash !== "") {
|
||
json_data2 = await getMp3Data(song_hash);
|
||
song_url = json_data2.error ? song_url : json_data2.url;
|
||
}
|
||
|
||
data_list = [
|
||
{
|
||
name: info.filename,
|
||
singername: info.singername,
|
||
duration: new Date(info.duration * 1000).toISOString().substr(14, 5),
|
||
file_size: `${(json_data2.fileSize / (1024 * 1024)).toFixed(2)} MB`,
|
||
song_url: song_url,
|
||
album_img: json_data2.album_img?.replace("/{size}", ""),
|
||
// "mv_url": await get_kugou_mv(msg, page_limit, count_limit, n) 这可能会导致递归调用,视具体情况而定
|
||
},
|
||
];
|
||
} else {
|
||
data_list = info_list.map((info) => ({
|
||
name: info.filename,
|
||
singername: info.singername,
|
||
duration: new Date(info.duration * 1000).toISOString().substr(14, 5),
|
||
hash: info.hash,
|
||
mvhash: info.mvhash ? info.mvhash : null,
|
||
}));
|
||
}
|
||
|
||
// 发送响应
|
||
return {
|
||
code: 200,
|
||
text: "解析成功",
|
||
type: "歌曲解析",
|
||
now: new Date().toISOString(),
|
||
data: data_list,
|
||
};
|
||
} catch (error) {
|
||
console.error("Error fetching song data:", error);
|
||
return { code: 500, text: "服务器内部错误" };
|
||
}
|
||
}
|
||
|
||
// 获取MP3数据的函数
|
||
async function getMp3Data(song_hash) {
|
||
const url = `https://m.kugou.com/app/i/getSongInfo.php?hash=${song_hash}&cmd=playInfo`;
|
||
try {
|
||
const response = await fetch(url, {
|
||
headers: {
|
||
"User-Agent": "Mozilla/6.0 (Linux; Android 11; SAMSUNG SM-G973U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/14.2 Chrome/87.0.4280.141 Mobile Safari/537.36"
|
||
},
|
||
redirect: 'follow',
|
||
method: 'GET',
|
||
});
|
||
const json = await response.json();
|
||
return json;
|
||
} catch (error) {
|
||
console.error("Error fetching MP3 data:", error);
|
||
return {};
|
||
}
|
||
}
|
||
|
||
// 获取MV数据的函数
|
||
async function getMvData(mv_hash) {
|
||
const url = `http://m.kugou.com/app/i/mv.php?cmd=100&hash=${mv_hash}&ismp3=1&ext=mp4`;
|
||
try {
|
||
const response = await fetch(url, {
|
||
headers: {
|
||
"User-Agent": "Mozilla/6.0 (Linux; Android 11; SAMSUNG SM-G973U) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/14.2 Chrome/87.0.4280.141 Mobile Safari/537.36"
|
||
},
|
||
redirect: 'follow',
|
||
method: 'GET',
|
||
});
|
||
const json = await response.json();
|
||
return json;
|
||
} catch (error) {
|
||
console.error("Error fetching MV data:", error);
|
||
return {};
|
||
}
|
||
}
|