rc-plugin/utils/kugou.js
zhiyu1998 2dbfe925e6 feat: 增加 dy 压缩格式的自由选择
1. 增加 dy 压缩格式选择
2. 优化使用 http 不使用安全格式 https(出问题再修正)
2024-06-29 14:59:19 +08:00

154 lines
5.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 获取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 {};
}
}