优化 tx 推荐歌单列表
This commit is contained in:
@@ -3,7 +3,6 @@
|
|||||||
对于日常使用 LX Music 的人可以试试迁移到 Any Listen,若遇到任何问题可以发 issue 反馈。
|
对于日常使用 LX Music 的人可以试试迁移到 Any Listen,若遇到任何问题可以发 issue 反馈。
|
||||||
Any Listen 的项目地址为 https://github.com/any-listen/any-listen
|
Any Listen 的项目地址为 https://github.com/any-listen/any-listen
|
||||||
|
|
||||||
### 修复
|
### 优化
|
||||||
|
|
||||||
- 修复自定义主题编辑器的颜色选择器默认值显示异常的问题(#2957)
|
- 优化 tx 推荐歌单列表
|
||||||
- 修复下载的 MP3 文件内嵌歌曲数据失败的问题(#2959)
|
|
||||||
|
|||||||
@@ -10,9 +10,13 @@ export default {
|
|||||||
limit_song: 100000,
|
limit_song: 100000,
|
||||||
successCode: 0,
|
successCode: 0,
|
||||||
sortList: [
|
sortList: [
|
||||||
|
{
|
||||||
|
name: '推荐',
|
||||||
|
id: -1,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: '最热',
|
name: '最热',
|
||||||
id: 5,
|
id: 3,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '最新',
|
name: '最新',
|
||||||
@@ -30,10 +34,9 @@ export default {
|
|||||||
},
|
},
|
||||||
tagsUrl: 'https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=%7B%22tags%22%3A%7B%22method%22%3A%22get_all_categories%22%2C%22param%22%3A%7B%22qq%22%3A%22%22%7D%2C%22module%22%3A%22playlist.PlaylistAllCategoriesServer%22%7D%7D',
|
tagsUrl: 'https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=%7B%22tags%22%3A%7B%22method%22%3A%22get_all_categories%22%2C%22param%22%3A%7B%22qq%22%3A%22%22%7D%2C%22module%22%3A%22playlist.PlaylistAllCategoriesServer%22%7D%7D',
|
||||||
hotTagUrl: 'https://c.y.qq.com/node/pc/wk_v15/category_playlist.html',
|
hotTagUrl: 'https://c.y.qq.com/node/pc/wk_v15/category_playlist.html',
|
||||||
getListUrl(sortId, id, page) {
|
getListUrl(id, page) {
|
||||||
if (id) {
|
id = parseInt(id)
|
||||||
id = parseInt(id)
|
return `https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=${encodeURIComponent(JSON.stringify({
|
||||||
return `https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=${encodeURIComponent(JSON.stringify({
|
|
||||||
comm: { cv: 1602, ct: 20 },
|
comm: { cv: 1602, ct: 20 },
|
||||||
playlist: {
|
playlist: {
|
||||||
method: 'get_category_content',
|
method: 'get_category_content',
|
||||||
@@ -48,15 +51,14 @@ export default {
|
|||||||
module: 'playlist.PlayListCategoryServer',
|
module: 'playlist.PlayListCategoryServer',
|
||||||
},
|
},
|
||||||
}))}`
|
}))}`
|
||||||
}
|
// return `https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8&data=${encodeURIComponent(JSON.stringify({
|
||||||
return `https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=${encodeURIComponent(JSON.stringify({
|
// comm: { cv: 1602, ct: 20 },
|
||||||
comm: { cv: 1602, ct: 20 },
|
// playlist: {
|
||||||
playlist: {
|
// method: 'get_playlist_by_tag',
|
||||||
method: 'get_playlist_by_tag',
|
// param: { id: 10000000, sin: this.limit_list * (page - 1), size: this.limit_list, order: sortId, cur_page: page },
|
||||||
param: { id: 10000000, sin: this.limit_list * (page - 1), size: this.limit_list, order: sortId, cur_page: page },
|
// module: 'playlist.PlayListPlazaServer',
|
||||||
module: 'playlist.PlayListPlazaServer',
|
// },
|
||||||
},
|
// }))}`
|
||||||
}))}`
|
|
||||||
},
|
},
|
||||||
getListDetailUrl(id) {
|
getListDetailUrl(id) {
|
||||||
return `https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&new_format=1&disstid=${id}&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0`
|
return `https://c.y.qq.com/qzone/fcg-bin/fcg_ucc_getcdinfo_byids_cp.fcg?type=1&json=1&utf8=1&onlysong=0&new_format=1&disstid=${id}&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8¬ice=0&platform=yqq.json&needNewCode=0`
|
||||||
@@ -112,41 +114,85 @@ export default {
|
|||||||
}))
|
}))
|
||||||
},
|
},
|
||||||
|
|
||||||
|
async getRecommendList(page) {
|
||||||
|
const { body } = await httpFetch(
|
||||||
|
`https://u.y.qq.com/cgi-bin/musicu.fcg?loginUin=0&hostUin=0&format=json&inCharset=utf-8&outCharset=utf-8¬ice=0&platform=wk_v15.json&needNewCode=0&data=${encodeURIComponent(
|
||||||
|
JSON.stringify({
|
||||||
|
comm: { cv: 1602, ct: 20 },
|
||||||
|
playlist: {
|
||||||
|
module: 'music.playlist.PlaylistSquare',
|
||||||
|
method: 'GetRecommendWhole',
|
||||||
|
param: {
|
||||||
|
IsReqFeed: true,
|
||||||
|
FeedReq: {
|
||||||
|
From: (page - 1) * this.limit_list,
|
||||||
|
Size: this.limit_list,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
)}`,
|
||||||
|
).promise
|
||||||
|
if (body.code !== this.successCode) throw new Error('tx getRecommendList failed')
|
||||||
|
return {
|
||||||
|
list:
|
||||||
|
body.playlist.data.FeedRsp.List?.map(({ Playlist }) => ({
|
||||||
|
play_count: formatPlayCount(Playlist.basic.play_cnt),
|
||||||
|
id: String(Playlist.basic.tid),
|
||||||
|
author: decodeName(Playlist.basic.creator.nick),
|
||||||
|
name: decodeName(Playlist.basic.title),
|
||||||
|
time: Playlist.basic.modify_time ? dateFormat(Playlist.basic.modify_time * 1000, 'Y-M-D') : '',
|
||||||
|
img: Playlist.basic.cover.medium_url || Playlist.basic.cover.default_url,
|
||||||
|
total: Playlist.basic.song_cnt,
|
||||||
|
desc: decodeName(Playlist.basic.desc).replace(/<br>/g, '\n'),
|
||||||
|
source: 'tx',
|
||||||
|
})) || [],
|
||||||
|
total: body.playlist.data.FeedRsp.FromLimit,
|
||||||
|
limit: this.limit_list,
|
||||||
|
page,
|
||||||
|
source: 'tx',
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
// 获取列表数据
|
// 获取列表数据
|
||||||
getList(sortId, tagId, page, tryNum = 0) {
|
getList(sortId, tagId, page, tryNum = 0) {
|
||||||
if (this._requestObj_list) this._requestObj_list.cancelHttp()
|
if (this._requestObj_list) this._requestObj_list.cancelHttp()
|
||||||
if (tryNum > 2) return Promise.reject(new Error('try max num'))
|
if (tryNum > 2) return Promise.reject(new Error('try max num'))
|
||||||
|
if (!tagId) {
|
||||||
|
if (!tagId && sortId == -1) return this.getRecommendList(page)
|
||||||
|
tagId = sortId
|
||||||
|
}
|
||||||
this._requestObj_list = httpFetch(
|
this._requestObj_list = httpFetch(
|
||||||
this.getListUrl(sortId, tagId, page),
|
this.getListUrl(tagId, page),
|
||||||
)
|
)
|
||||||
// console.log(this.getListUrl(sortId, tagId, page))
|
// console.log(this.getListUrl(sortId, tagId, page))
|
||||||
return this._requestObj_list.promise.then(({ body }) => {
|
return this._requestObj_list.promise.then(({ body }) => {
|
||||||
if (body.code !== this.successCode) return this.getList(sortId, tagId, page, ++tryNum)
|
if (body.code !== this.successCode) return this.getList(sortId, tagId, page, ++tryNum)
|
||||||
return tagId ? this.filterList2(body.playlist.data, page) : this.filterList(body.playlist.data, page)
|
return this.filterList(body.playlist.data, page)
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
|
|
||||||
filterList(data, page) {
|
// filterList(data, page) {
|
||||||
return {
|
// return {
|
||||||
list: data.v_playlist.map(item => ({
|
// list: data.v_playlist.map(item => ({
|
||||||
play_count: formatPlayCount(item.access_num),
|
// play_count: formatPlayCount(item.access_num),
|
||||||
id: String(item.tid),
|
// id: String(item.tid),
|
||||||
author: item.creator_info.nick,
|
// author: item.creator_info.nick,
|
||||||
name: item.title,
|
// name: item.title,
|
||||||
time: item.modify_time ? dateFormat(item.modify_time * 1000, 'Y-M-D') : '',
|
// time: item.modify_time ? dateFormat(item.modify_time * 1000, 'Y-M-D') : '',
|
||||||
img: item.cover_url_medium,
|
// img: item.cover_url_medium,
|
||||||
// grade: item.favorcnt / 10,
|
// // grade: item.favorcnt / 10,
|
||||||
total: item.song_ids?.length,
|
// total: item.song_ids?.length,
|
||||||
desc: decodeName(item.desc).replace(/<br>/g, '\n'),
|
// desc: decodeName(item.desc).replace(/<br>/g, '\n'),
|
||||||
source: 'tx',
|
// source: 'tx',
|
||||||
})),
|
// })),
|
||||||
total: data.total,
|
// total: data.total,
|
||||||
page,
|
// page,
|
||||||
limit: this.limit_list,
|
// limit: this.limit_list,
|
||||||
source: 'tx',
|
// source: 'tx',
|
||||||
}
|
// }
|
||||||
},
|
// },
|
||||||
filterList2({ content }, page) {
|
filterList({ content }, page) {
|
||||||
// console.log(content.v_item)
|
// console.log(content.v_item)
|
||||||
return {
|
return {
|
||||||
list: content.v_item.map(({ basic }) => ({
|
list: content.v_item.map(({ basic }) => ({
|
||||||
|
|||||||
Reference in New Issue
Block a user