添加kg排行榜flac hires歌曲类型的显示

This commit is contained in:
lyswhut 2023-03-15 18:10:09 +08:00
parent ee59999d5f
commit 713eccdca3
2 changed files with 49 additions and 41 deletions

View File

@ -13,7 +13,8 @@
- 启动软件时自动回到上次的界面,例如上次退出软件时在我的收藏,下次启动软件时会自动进入我的收藏 - 启动软件时自动回到上次的界面,例如上次退出软件时在我的收藏,下次启动软件时会自动进入我的收藏
- 新增PC端所拥有的内置皮肤 - 新增PC端所拥有的内置皮肤
- 新增界面字体大小设置 - 新增界面字体大小设置
- 添加kg源评论图片展示感谢@helloplhm-qwq - 添加kg源评论图片展示@helloplhm-qwq
- 支持kg源搜索列表、排行榜flac hires歌曲类型的显示@helloplhm-qwq, @Folltoshe
### 优化(界面/交互/功能) ### 优化(界面/交互/功能)

View File

@ -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' }] 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 { export default {
listDetailLimit: 100,
list: [ list: [
{ {
id: 'kgtop500', id: 'kgtop500',
@ -61,8 +62,8 @@ export default {
bangid: '31308', bangid: '31308',
}, },
], ],
getUrl(p, id) { getUrl(p, id, limit) {
return `http://www2.kugou.kugou.com/yueku/v9/rank/home/${p}-${id}.html` 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: { regExps: {
total: /total: '(\d+)',/, total: /total: '(\d+)',/,
@ -80,6 +81,13 @@ export default {
const requestDataObj = httpFetch(url) const requestDataObj = httpFetch(url)
return requestDataObj.promise return requestDataObj.promise
}, },
getSinger(singers) {
let arr = []
singers.forEach(singer => {
arr.push(singer.author_name)
})
return arr.join('、')
},
filterData(rawList) { filterData(rawList) {
// console.log(rawList) // console.log(rawList)
return rawList.map(item => { return rawList.map(item => {
@ -93,41 +101,41 @@ export default {
hash: item.hash, hash: item.hash,
} }
} }
if (item.filesize_320 !== 0) { if (item['320filesize'] !== 0) {
let size = sizeFormate(item.filesize_320) let size = sizeFormate(item['320filesize'])
types.push({ type: '320k', size, hash: item.hash_320 }) types.push({ type: '320k', size, hash: item['320hash'] })
_types['320k'] = { _types['320k'] = {
size, size,
hash: item.hash_320, hash: item['320hash'],
} }
} }
if (item.filesize_ape !== 0) { if (item.sqfilesize !== 0) {
let size = sizeFormate(item.filesize_ape) let size = sizeFormate(item.sqfilesize)
types.push({ type: 'ape', size, hash: item.hash_ape }) types.push({ type: 'flac', size, hash: item.sqhash })
_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 })
_types.flac = { _types.flac = {
size, 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 { return {
singer: decodeName(item.singername), singer: decodeName(this.getSinger(item.authors)),
name: decodeName(item.songname), name: decodeName(item.songname),
albumName: decodeName(item.album_name), albumName: decodeName(item.remark),
albumId: item.album_id, albumId: item.album_id,
songmid: item.audio_id, songmid: item.audio_id,
source: 'kg', source: 'kg',
interval: formatPlayTime(item.duration / 1000), interval: formatPlayTime(item.duration),
img: null, img: null,
lrc: null, lrc: null,
hash: item.HASH, hash: item.hash,
otherSource: null, otherSource: null,
types, types,
_types, _types,
@ -172,24 +180,23 @@ export default {
source: 'kg', source: 'kg',
} }
}, },
getList(bangid, page) { async getList(bangid, page, retryNum = 0) {
return this.getData(this.getUrl(page, bangid)).then(({ body: html }) => { if (++retryNum > 3) throw new Error('try max num')
let total = html.match(this.regExps.total) const { body } = await this.getData(this.getUrl(page, bangid, this.listDetailLimit))
if (total) total = parseInt(RegExp.$1)
page = html.match(this.regExps.page) if (body.errcode != 0) return this.getList(bangid, page, retryNum)
if (page) page = parseInt(RegExp.$1)
let limit = html.match(this.regExps.limit) // console.log(body)
if (limit) limit = parseInt(RegExp.$1) let total = body.data.total
let listData = html.match(this.regExps.listData) let limit = 100
if (listData) listData = this.filterData(JSON.parse(RegExp.$1)) let listData = this.filterData(body.data.info)
return { return {
total, total,
list: listData, list: listData,
limit, limit,
page, page,
source: 'kg', source: 'kg',
} }
})
}, },
getDetailPageUrl(id) { getDetailPageUrl(id) {
if (typeof id == 'string') id = id.replace('kg__', '') if (typeof id == 'string') id = id.replace('kg__', '')