mirror of
https://github.com/imsyy/SPlayer.git
synced 2025-11-25 19:37:35 +08:00
144 lines
3.9 KiB
JavaScript
144 lines
3.9 KiB
JavaScript
import { getSongTime } from "@/utils/timeTools";
|
|
|
|
/**
|
|
* 格式化原始数据
|
|
* @param {Array} data - 必选参数,输入的原始数据
|
|
* @param {String} type - 必选参数,格式化的类型
|
|
* @return {string} 返回根据 type 参数生成的列表数据
|
|
*/
|
|
const formatData = (data, type = "playlist", noTracks = false) => {
|
|
if (!data) return null;
|
|
// 若传入的是单个数据对象,转为数组
|
|
const dataArray = Array.isArray(data) ? data : [data];
|
|
// 遍历
|
|
return dataArray.map((v) => {
|
|
// 特殊处理
|
|
if (type === "song") v?.songInfo ? (v = v.songInfo) : v?.simpleSong ? (v = v.simpleSong) : v;
|
|
// 封面处理
|
|
const imgUrl =
|
|
v &&
|
|
(v.picUrl ||
|
|
v.coverImgUrl ||
|
|
v.cover ||
|
|
(v.album && v.album.picUrl) ||
|
|
(v.al && (v.al.picUrl || v.al.xInfo?.picUrl)));
|
|
const cover = getCoverUrl(imgUrl);
|
|
const coverSize = {
|
|
s: getCoverUrl(imgUrl, 100),
|
|
m: getCoverUrl(imgUrl, 300),
|
|
l: getCoverUrl(imgUrl, 1024),
|
|
xl: getCoverUrl(imgUrl, 1920),
|
|
};
|
|
// 类型判断
|
|
switch (type) {
|
|
// 歌单
|
|
case "playlist":
|
|
return {
|
|
id: v.id,
|
|
name: v.name,
|
|
cover,
|
|
coverSize,
|
|
count: v.trackCount,
|
|
creator: v.creator || v.updateFrequency,
|
|
tracks: noTracks ? null : v.tracks,
|
|
playCount: v.playCount,
|
|
createTime: v.createTime,
|
|
updateTime: v.updateTime || v.trackNumberUpdateTime,
|
|
description: v.description,
|
|
tags: v.tags || v.algTags,
|
|
};
|
|
// 歌曲
|
|
case "song":
|
|
return {
|
|
id: v.id,
|
|
name: v.name,
|
|
artists: v.artists || v.ar,
|
|
album: v.album || v.al,
|
|
cover,
|
|
coverSize,
|
|
mv: v.mv,
|
|
alia: v.alias?.[0] || v.transNames?.[0],
|
|
fee: v.fee,
|
|
pc: v.pc,
|
|
size: v.size,
|
|
duration: getSongTime(v.duration || v.dt),
|
|
};
|
|
// 歌手
|
|
case "artist":
|
|
return {
|
|
id: v.id,
|
|
name: v.name,
|
|
cover,
|
|
coverSize,
|
|
alias: v.alias,
|
|
size: {
|
|
music: v.musicSize,
|
|
album: v.albumSize,
|
|
mv: v.mvSize,
|
|
fans: v.fansCount,
|
|
},
|
|
};
|
|
// 专辑
|
|
case "album":
|
|
return {
|
|
id: v.id,
|
|
name: v.name,
|
|
alia: v.alias?.[0],
|
|
cover,
|
|
coverSize,
|
|
artists: v.artists,
|
|
description: v.description,
|
|
publishTime: v.publishTime,
|
|
tags: v.tags || v.algTags,
|
|
count: v.size,
|
|
share: v.info?.shareCount,
|
|
};
|
|
// mv
|
|
case "mv":
|
|
return {
|
|
id: v.id,
|
|
name: v.name,
|
|
artists: v.artists,
|
|
desc: v.copywriter,
|
|
cover,
|
|
coverSize: getCoverUrl(v.picUrl || v.cover, "464y260"),
|
|
duration: v.duration,
|
|
playCount: v.playCount,
|
|
};
|
|
default:
|
|
return null;
|
|
}
|
|
});
|
|
};
|
|
|
|
/**
|
|
* 获取图片的 url
|
|
* @param {string} url - 必选参数,输入的原始图片 url
|
|
* @param {number} size - 可选参数,需要生成的图片尺寸,默认为 null
|
|
* @return {string} 返回根据 url 和 size 参数生成的图片 url
|
|
*/
|
|
const getCoverUrl = (url, size = null) => {
|
|
try {
|
|
if (!url) return "/images/pic/song.jpg?assest";
|
|
const sizeUrl = size
|
|
? typeof size === "number"
|
|
? `?param=${size}y${size}`
|
|
: `?param=${size}`
|
|
: "";
|
|
const imageUrl = url?.replace(/^http:/, "https:");
|
|
if (imageUrl.endsWith(".jpg")) {
|
|
return imageUrl + sizeUrl;
|
|
}
|
|
if (imageUrl.endsWith("&")) {
|
|
const url = imageUrl + "cl";
|
|
return url.replace(/(thumbnail=[0-9]+y[0-9]+&cl)/, `thumbnail=${size}y${size}&`);
|
|
}
|
|
return imageUrl;
|
|
} catch (error) {
|
|
console.error("图片链接处理出错:", error);
|
|
return "/images/pic/song.jpg?assest";
|
|
}
|
|
};
|
|
|
|
export default formatData;
|