From d0518e6dfed3ac8c3f25c0a3412d4d25fcb92f93 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Wed, 8 Apr 2020 16:54:29 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9=E5=8F=A6=E4=B8=80=E7=A7=8D?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=AD=8C=E5=8D=95=E6=89=93=E5=BC=80=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/utils/music/kg/songList.js | 64 +++++++++++++++++++------ 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/src/renderer/utils/music/kg/songList.js b/src/renderer/utils/music/kg/songList.js index 98f1276c..75680218 100644 --- a/src/renderer/utils/music/kg/songList.js +++ b/src/renderer/utils/music/kg/songList.js @@ -155,8 +155,9 @@ export default { console.log(err) return this.createHttp(url, options, ++retryNum) } + // console.log(result.statusCode, result.body) if (result.statusCode !== 200 || ((result.body.error_code === undefined ? result.body.errcode : result.body.error_code) !== 0)) return this.createHttp(url, options, ++retryNum) - return result.body.data + return result.body.data || result.body.info }, createTask(hashs) { @@ -188,6 +189,31 @@ export default { }).then(data => data.map(s => s[0]))) }, + async getUserListDetail3(chain, page) { + const songInfo = await this.createHttp(`http://m.kugou.com/schain/transfer?pagesize=${this.listDetailLimit}&chain=${chain}&su=1&page=${page}&n=0.7928855356604456`, { + headers: { + 'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + }, + }) + if (!songInfo.list) return this.getUserListDetail2(songInfo.global_collection_id) + let result = await Promise.all(this.createTask(songInfo.list.map(item => ({ hash: item.hash })))).then(([...datas]) => datas.flat()) + // console.log(info, songInfo) + return { + list: this.filterData2(result) || [], + page: 1, + limit: this.listDetailLimit, + total: songInfo.count, + source: 'kg', + info: { + name: songInfo.info.name, + img: songInfo.info.img, + // desc: body.result.info.list_desc, + author: songInfo.info.username, + // play_count: this.formatPlayCount(info.count), + }, + } + }, + async getUserListDetail2(global_collection_id) { let id = global_collection_id if (id.length > 1000) throw new Error('get list error') @@ -228,16 +254,19 @@ export default { }, async getUserListDetail(link, page, retryNum = 0) { - if (retryNum > 2) return Promise.reject(new Error('link try max num')) + if (retryNum > 3) return Promise.reject(new Error('link try max num')) if (link.includes('#')) link = link.replace(/#.*$/, '') if (link.includes('global_collection_id')) return this.getUserListDetail2(link.replace(/^.*?global_collection_id=(\w+)(?:&.*$|#.*$|$)/, '$1')) - if (link.includes('zlist.html')) { - link = link.replace(/^(.*)zlist\.html/, 'https://m3ws.kugou.com/zlist/list') - if (link.includes('pagesize')) { - link = link.replace('pagesize=30', 'pagesize=' + this.listDetailLimit).replace('page=1', 'page=' + page) - } else { - link += `&pagesize=${this.listDetailLimit}&page=${page}` - } + if (link.includes('chain=')) return this.getUserListDetail3(link.replace(/^.*?chain=(\w+)(?:&.*$|#.*$|$)/, '$1'), page) + if (link.includes('.html')) { + if (link.includes('zlist.html')) { + link = link.replace(/^(.*)zlist\.html/, 'https://m3ws.kugou.com/zlist/list') + if (link.includes('pagesize')) { + link = link.replace('pagesize=30', 'pagesize=' + this.listDetailLimit).replace('page=1', 'page=' + page) + } else { + link += `&pagesize=${this.listDetailLimit}&page=${page}` + } + } else if (!link.includes('song.html')) return this.getUserListDetail3(link.replace(/.+\/(\w+).html(?:\?.*|&.*$|#.*$|$)/, '$1'), page) } if (this._requestObj_listDetailLink) this._requestObj_listDetailLink.cancelHttp() @@ -252,12 +281,19 @@ export default { if (statusCode > 400) return this.getUserListDetail(link, page, ++retryNum) if (location) { if (location.includes('global_collection_id')) return this.getUserListDetail2(location.replace(/^.*?global_collection_id=(\w+)(?:&.*$|#.*$|$)/, '$1')) + if (location.includes('chain=')) return this.getUserListDetail3(location.replace(/^.*?chain=(\w+)(?:&.*$|#.*$|$)/, '$1'), page) + // console.log('location', location) - let link = location.replace(/^(.*)zlist\.html/, 'https://m3ws.kugou.com/zlist/list') - if (link.includes('pagesize')) { - link = link.replace('pagesize=30', 'pagesize=' + this.listDetailLimit).replace('page=1', 'page=' + page) - } else { - link += `&pagesize=${this.listDetailLimit}&page=${page}` + if (location.includes('.html')) { + if (location.includes('zlist.html')) { + let link = location.replace(/^(.*)zlist\.html/, 'https://m3ws.kugou.com/zlist/list') + if (link.includes('pagesize')) { + link = link.replace('pagesize=30', 'pagesize=' + this.listDetailLimit).replace('page=1', 'page=' + page) + } else { + link += `&pagesize=${this.listDetailLimit}&page=${page}` + } + return this.getUserListDetail(link, page, ++retryNum) + } else return this.getUserListDetail3(location.replace(/.+\/(\w+).html(?:\?.*|&.*$|#.*$|$)/, '$1'), page) } return this.getUserListDetail(link, page, ++retryNum) }