From ea515fdd856b1e89fec270b9471a83d98994fd16 Mon Sep 17 00:00:00 2001 From: Folltoshe Date: Wed, 15 Mar 2023 17:42:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0kg=E6=8E=92=E8=A1=8C=E6=A6=9C?= =?UTF-8?q?flac24bit=E6=98=BE=E7=A4=BA=20(#1238)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 增加kg排行榜flac24bit显示 --------- Co-authored-by: lyswhut --- publish/changeLog.md | 2 +- src/renderer/utils/musicSdk/kg/leaderboard.js | 87 ++++++++++--------- 2 files changed, 48 insertions(+), 41 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index 7645c3f4..9b68f321 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -14,7 +14,7 @@ - 支持wy源flac hires歌曲类型的显示 - 快捷键调整音量时每次加减2%音量改为4%(#1220) - 音量、播放模式等设置弹出式按钮在鼠标移到按钮上时将自动弹出设置内容,保留点击切换显示/隐藏 -- 支持kg源搜索列表flac hires歌曲类型的显示(@helloplhm-qwq) +- 支持kg源搜索列表、排行榜flac hires歌曲类型的显示(@helloplhm-qwq) ### 修复 diff --git a/src/renderer/utils/musicSdk/kg/leaderboard.js b/src/renderer/utils/musicSdk/kg/leaderboard.js index 527d582d..6f4f851c 100644 --- a/src/renderer/utils/musicSdk/kg/leaderboard.js +++ b/src/renderer/utils/musicSdk/kg/leaderboard.js @@ -4,6 +4,7 @@ import { decodeName, formatPlayTime, sizeFormate } from '../../index' let boardList = [{ id: 'kg__8888', name: '酷狗TOP500', bangid: '8888' }, { id: 'kg__6666', name: '酷狗飙升榜', bangid: '6666' }, { id: 'kg__37361', name: '酷狗雷达榜', bangid: '37361' }, { id: 'kg__23784', name: '网络红歌榜', bangid: '23784' }, { id: 'kg__24971', name: 'DJ热歌榜', bangid: '24971' }, { id: 'kg__35811', name: '会员专享热歌榜', bangid: '35811' }, { id: 'kg__31308', name: '华语新歌榜', bangid: '31308' }, { id: 'kg__31310', name: '欧美新歌榜', bangid: '31310' }, { id: 'kg__31311', name: '韩国新歌榜', bangid: '31311' }, { id: 'kg__31312', name: '日本新歌榜', bangid: '31312' }, { id: 'kg__31313', name: '粤语新歌榜', bangid: '31313' }, { id: 'kg__33162', name: 'ACG新歌榜', bangid: '33162' }, { id: 'kg__21101', name: '酷狗分享榜', bangid: '21101' }, { id: 'kg__30972', name: '腾讯音乐人原创榜', bangid: '30972' }, { id: 'kg__22603', name: '5sing音乐榜', bangid: '22603' }, { id: 'kg__33160', name: '电音热歌榜', bangid: '33160' }, { id: 'kg__21335', name: '繁星音乐榜', bangid: '21335' }, { id: 'kg__33161', name: '古风新歌榜', bangid: '33161' }, { id: 'kg__33163', name: '影视金曲榜', bangid: '33163' }, { id: 'kg__33166', name: '欧美金曲榜', bangid: '33166' }, { id: 'kg__33165', name: '粤语金曲榜', bangid: '33165' }, { id: 'kg__36107', name: '小语种热歌榜', bangid: '36107' }, { id: 'kg__4681', name: '美国BillBoard榜', bangid: '4681' }, { id: 'kg__4680', name: '英国单曲榜', bangid: '4680' }, { id: 'kg__4673', name: '日本公信榜', bangid: '4673' }, { id: 'kg__38623', name: '韩国Melon音乐榜', bangid: '38623' }, { id: 'kg__42807', name: 'joox本地热歌榜', bangid: '42807' }, { id: 'kg__42808', name: '台湾KKBOX风云榜', bangid: '42808' }] export default { + listDetailLimit: 100, list: [ { id: 'kgtop500', @@ -61,8 +62,8 @@ export default { bangid: '31308', }, ], - getUrl(p, id) { - return `http://www2.kugou.kugou.com/yueku/v9/rank/home/${p}-${id}.html` + getUrl(p, id, limit) { + return `http://mobilecdnbj.kugou.com/api/v3/rank/song?version=9108&ranktype=1&plat=0&pagesize=${limit}&area_code=1&page=${p}&rankid=${id}&with_res_tag=0&show_portrait_mv=1` }, regExps: { total: /total: '(\d+)',/, @@ -80,6 +81,13 @@ export default { const requestDataObj = httpFetch(url) return requestDataObj.promise }, + getSinger(singers) { + let arr = [] + singers.forEach(singer => { + arr.push(singer.author_name) + }) + return arr.join('、') + }, filterData(rawList) { // console.log(rawList) return rawList.map(item => { @@ -93,41 +101,41 @@ export default { hash: item.hash, } } - if (item.filesize_320 !== 0) { - let size = sizeFormate(item.filesize_320) - types.push({ type: '320k', size, hash: item.hash_320 }) + if (item['320filesize'] !== 0) { + let size = sizeFormate(item['320filesize']) + types.push({ type: '320k', size, hash: item['320hash'] }) _types['320k'] = { size, - hash: item.hash_320, + hash: item['320hash'], } } - if (item.filesize_ape !== 0) { - let size = sizeFormate(item.filesize_ape) - types.push({ type: 'ape', size, hash: item.hash_ape }) - _types.ape = { - size, - hash: item.hash_ape, - } - } - if (item.filesize_flac !== 0) { - let size = sizeFormate(item.filesize_flac) - types.push({ type: 'flac', size, hash: item.hash_flac }) + if (item.sqfilesize !== 0) { + let size = sizeFormate(item.sqfilesize) + types.push({ type: 'flac', size, hash: item.sqhash }) _types.flac = { size, - hash: item.hash_flac, + hash: item.sqhash, + } + } + if (item.filesize_high !== 0) { + let size = sizeFormate(item.filesize_high) + types.push({ type: 'flac24bit', size, hash: item.hash_high }) + _types.flac = { + size, + hash: item.hash_high, } } return { - singer: decodeName(item.singername), + singer: decodeName(this.getSinger(item.authors)), name: decodeName(item.songname), - albumName: decodeName(item.album_name), + albumName: decodeName(item.remark), albumId: item.album_id, songmid: item.audio_id, source: 'kg', - interval: formatPlayTime(item.duration / 1000), + interval: formatPlayTime(item.duration), img: null, lrc: null, - hash: item.HASH, + hash: item.hash, otherSource: null, types, _types, @@ -172,24 +180,23 @@ export default { source: 'kg', } }, - getList(bangid, page) { - return this.getData(this.getUrl(page, bangid)).then(({ body: html }) => { - let total = html.match(this.regExps.total) - if (total) total = parseInt(RegExp.$1) - page = html.match(this.regExps.page) - if (page) page = parseInt(RegExp.$1) - let limit = html.match(this.regExps.limit) - if (limit) limit = parseInt(RegExp.$1) - let listData = html.match(this.regExps.listData) - if (listData) listData = this.filterData(JSON.parse(RegExp.$1)) - return { - total, - list: listData, - limit, - page, - source: 'kg', - } - }) + async getList(bangid, page, retryNum = 0) { + if (++retryNum > 3) throw new Error('try max num') + const { body } = await this.getData(this.getUrl(page, bangid, this.listDetailLimit)) + + if (body.errcode != 0) return this.getList(bangid, page, retryNum) + + // console.log(body) + let total = body.data.total + let limit = 100 + let listData = this.filterData(body.data.info) + return { + total, + list: listData, + limit, + page, + source: 'kg', + } }, getDetailPageUrl(id) { if (typeof id == 'string') id = id.replace('kg__', '')