Sync all projects
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
/*
|
||||
@header({
|
||||
searchable: 1,
|
||||
filterable: 1,
|
||||
quickSearch: 1,
|
||||
title: '听了么[听]',
|
||||
lang: 'cat'
|
||||
})
|
||||
*/
|
||||
|
||||
function home() {
|
||||
return JSON.stringify({
|
||||
'class': [
|
||||
{'type_id': 'hot', 'type_name': '热门歌单'},
|
||||
{'type_id': 'new', 'type_name': '新歌推荐'}
|
||||
]
|
||||
});
|
||||
}
|
||||
|
||||
async function homeVod() {
|
||||
let url = 'http://wapi.kuwo.cn/api/pc/classify/playlist/getRcmPlayList?loginUid=0&loginSid=0&appUid=76039576&rn=30&order=hot&pn=1';
|
||||
let res = JSON.parse((await req(url)).content);
|
||||
let data = res.data?.data || res.data || [];
|
||||
let d = data.map(it => ({
|
||||
vod_name: it.name || it.title || '未命名歌单',
|
||||
vod_id: (it.id || it.pid || '').toString(),
|
||||
vod_pic: it.img || it.pic || it.cover || 'https://p1.music.126.net/SUeqMM8HOIpHv9Nhl9qt9w==/109951165647004069.jpg',
|
||||
vod_remarks: it.info || it.uname || it.userName || '',
|
||||
type_name: 'hot'
|
||||
}));
|
||||
return JSON.stringify({list: d});
|
||||
}
|
||||
|
||||
async function category(tid, pg) {
|
||||
let api = `http://wapi.kuwo.cn/api/pc/classify/playlist/getRcmPlayList?loginUid=0&loginSid=0&appUid=76039576&rn=30&order=${tid}&pn=${pg}&_=${Date.now()}`;
|
||||
let res = JSON.parse((await req(api)).content);
|
||||
let data = res.data?.data || res.data || [];
|
||||
let arr = data.map(it => ({
|
||||
vod_name: it.name || it.title || '未命名歌单',
|
||||
vod_id: (it.id || it.pid || '').toString(),
|
||||
vod_pic: it.img || it.pic || it.cover || 'https://p1.music.126.net/SUeqMM8HOIpHv9Nhl9qt9w==/109951165647004069.jpg',
|
||||
vod_remarks: it.info || it.uname || it.userName || '',
|
||||
type_name: tid
|
||||
}));
|
||||
return JSON.stringify({list: arr, page: +pg, pagecount: 999, limit: 30, total: 999});
|
||||
}
|
||||
|
||||
async function detail(vod_url) {
|
||||
let api = `http://nplserver.kuwo.cn/pl.svc?op=getlistinfo&pid=${vod_url.trim()}&pn=0&rn=200&encode=utf8&keyset=pl2012&identity=kuwo&pcmp4=1&vipver=MUSIC_9.1.1.2_BCS2&newver=1`;
|
||||
console.log(`✅[api]: ${api}`);
|
||||
let d = JSON.parse((await req(api)).content);
|
||||
console.log(`✅[d的结果: ]${JSON.stringify(d, null, 4)}`);
|
||||
let list = d.musiclist || [];
|
||||
|
||||
let playArr = [];
|
||||
let artistPicArr = [];
|
||||
|
||||
list.forEach(it => {
|
||||
let rid = (it.id || '').toString();
|
||||
let song = (it.name || it.SONGNAME || it.displaysongname || '').toString();
|
||||
let artist = (it.artist || it.ARTIST || it.FARTIST || it.displayartistname || '').toString();
|
||||
let albumpic = it.albumpic || '';
|
||||
let artistPic = it.artistPic || '';
|
||||
let displayName = artist ? `${song} [${artist}]` : song;
|
||||
|
||||
if (rid) {
|
||||
playArr.push(`${displayName}$${rid}&&${albumpic}&&${artistPic}`);
|
||||
artistPicArr.push(artistPic);
|
||||
}
|
||||
});
|
||||
|
||||
return JSON.stringify({
|
||||
list: [{
|
||||
vod_id: vod_url,
|
||||
vod_name: d.name || d.title || '酷我歌单',
|
||||
vod_pic: d.pic || d.img,
|
||||
vod_content: d.info || d.desc || '',
|
||||
vod_play_from: '酷我歌单',
|
||||
vod_play_pic: artistPicArr.join('#'),
|
||||
vod_play_pic_ratio: 1.5,
|
||||
vod_play_url: playArr.join('#')
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
async function play(flag, id) {
|
||||
// 解析格式:显示名称$歌曲ID&&专辑图片&&歌手图片
|
||||
let parts = id.split('&&');
|
||||
|
||||
// 第一部分可能包含显示名称$歌曲ID
|
||||
let firstPart = parts[0] || '';
|
||||
let firstParts = firstPart.split('$');
|
||||
let songId = firstParts.length > 1 ? firstParts[1] : firstParts[0];
|
||||
|
||||
let albumPic = parts[1] || '';
|
||||
let artistPic = parts[2] || '';
|
||||
|
||||
// 优先使用专辑图片,没有则使用歌手图片
|
||||
let picUrl = albumPic || artistPic;
|
||||
|
||||
if (/\.(m3u8|mp4|m4a|mp3|aac)(\?|$)/i.test(songId)) {
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
jx: 0,
|
||||
url: songId,
|
||||
pic: picUrl
|
||||
});
|
||||
}
|
||||
|
||||
async function getUrl(rid, br) {
|
||||
let api = `http://nmobi.kuwo.cn/mobi.s?f=web&user=0&source=kwplayerhd_ar_4.3.0.8_tianbao_T1A_qirui.apk&type=convert_url_with_sign&rid=${rid}&br=${br}`;
|
||||
let j = JSON.parse((await req(api)).content);
|
||||
return j?.data?.url?.trim() || '';
|
||||
}
|
||||
|
||||
let url = await getUrl(songId, '320kmp3') || await getUrl(songId, '128kmp3');
|
||||
let lrc = await getLyric(songId);
|
||||
|
||||
return JSON.stringify({
|
||||
parse: 0,
|
||||
jx: 0,
|
||||
url: url,
|
||||
pic: picUrl,
|
||||
cover: albumPic,
|
||||
lrc: lrc
|
||||
});
|
||||
}
|
||||
|
||||
async function getLyric(rid) {
|
||||
let url = `http://m.kuwo.cn/newh5/singles/songinfoandlrc?musicId=${rid}`;
|
||||
let res = (await req(url)).content;
|
||||
let json = JSON.parse(res);
|
||||
let lrclist = json?.data?.lrclist;
|
||||
if (!lrclist) return '';
|
||||
|
||||
return lrclist.map(item => {
|
||||
let time = +item.time;
|
||||
let min = Math.floor(time / 60).toString().padStart(2, '0');
|
||||
let sec = Math.floor(time % 60).toString().padStart(2, '0');
|
||||
let ms = Math.floor((time % 1) * 100).toString().padStart(2, '0');
|
||||
return `[${min}:${sec}.${ms}]${item.lineLyric}`;
|
||||
}).join('\n');
|
||||
}
|
||||
|
||||
async function search(wd, quick) {
|
||||
let searchUrl = `https://search.kuwo.cn/r.s?client=kt&all=${encodeURIComponent(wd)}&pn=0&rn=20&vipver=1&ft=music&encoding=utf8&rformat=json&mobi=1`;
|
||||
|
||||
let res = (await req(searchUrl)).content;
|
||||
let json = JSON.parse(res);
|
||||
let d = [];
|
||||
|
||||
if (json.abslist) {
|
||||
json.abslist.forEach(it => {
|
||||
if (it.MUSICRID) {
|
||||
let musicId = it.MUSICRID.replace('MUSIC_', '');
|
||||
let picUrl = it.hts_MVPIC || '';
|
||||
|
||||
d.push({
|
||||
vod_name: (it.NAME || '未知歌曲') + (it.ARTIST ? ' - ' + it.ARTIST : ''),
|
||||
vod_id: musicId,
|
||||
vod_pic: picUrl,
|
||||
vod_remarks: '酷我音乐',
|
||||
type_name: 'search'
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return JSON.stringify({list: d});
|
||||
}
|
||||
|
||||
export function __jsEvalReturn() {
|
||||
return {home, homeVod, category, detail, play, search};
|
||||
}
|
||||
Reference in New Issue
Block a user