From 9bd0e38df77b346bf04ae6473425fdc7df39a816 Mon Sep 17 00:00:00 2001 From: Folltoshe Date: Thu, 27 Apr 2023 17:46:18 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=98=E5=8E=9Fkg=E6=90=9C=E7=B4=A2=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/utils/musicSdk/kg/musicSearch.js | 66 +++++------ .../utils/musicSdk/kg/temp/musicSearch-new.js | 111 ++++++++++++++++++ .../{old/songList.js => temp/songList-old.js} | 0 .../leaderboard-old.js} | 0 4 files changed, 143 insertions(+), 34 deletions(-) create mode 100644 src/renderer/utils/musicSdk/kg/temp/musicSearch-new.js rename src/renderer/utils/musicSdk/kg/{old/songList.js => temp/songList-old.js} (100%) rename src/renderer/utils/musicSdk/mg/{old/leaderboard.js => temp/leaderboard-old.js} (100%) diff --git a/src/renderer/utils/musicSdk/kg/musicSearch.js b/src/renderer/utils/musicSdk/kg/musicSearch.js index d293ca24..61571c97 100644 --- a/src/renderer/utils/musicSdk/kg/musicSearch.js +++ b/src/renderer/utils/musicSdk/kg/musicSearch.js @@ -1,5 +1,5 @@ +import { httpFetch } from '../../request' import { decodeName, formatPlayTime, sizeFormate } from '../../index' -import { signatureParams, createHttpFetch } from './util' export default { limit: 30, @@ -7,13 +7,8 @@ export default { page: 0, allPage: 1, musicSearch(str, page, limit) { - const sign = signatureParams(`userid=0&area_code=1&appid=1005&dopicfull=1&page=${page}&token=0&privilegefilter=0&requestid=0&pagesize=${limit}&user_labels=&clienttime=0&sec_aggre=1&iscorrection=1&uuid=0&mid=0&keyword=${str}&dfid=-&clientver=11409&platform=AndroidFilter&tag=`, 3) - return createHttpFetch(`https://gateway.kugou.com/complexsearch/v3/search/song?userid=0&area_code=1&appid=1005&dopicfull=1&page=${page}&token=0&privilegefilter=0&requestid=0&pagesize=${limit}&user_labels=&clienttime=0&sec_aggre=1&iscorrection=1&uuid=0&mid=0&dfid=-&clientver=11409&platform=AndroidFilter&tag=&keyword=${encodeURIComponent(str)}&signature=${sign}`, { - 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', - referer: 'https://kugou.com', - }, - }).then(body => body) + const searchRequest = httpFetch(`https://songsearch.kugou.com/song_search_v2?keyword=${encodeURIComponent(str)}&page=${page}&pagesize=${limit}&userid=0&clientver=&platform=WebFilter&filter=2&iscorrection=1&privilege_filter=0`) + return searchRequest.promise.then(({ body }) => body) }, filterList(raw) { let ids = new Set() @@ -33,33 +28,33 @@ export default { hash: item.FileHash, } } - if (item.HQ != undefined) { - let size = sizeFormate(item.HQ.FileSize) - types.push({ type: '320k', size, hash: item.HQ.Hash }) + if (item.HQFileSize !== 0) { + let size = sizeFormate(item.HQFileSize) + types.push({ type: '320k', size, hash: item.HQFileHash }) _types['320k'] = { size, - hash: item.HQ.Hash, + hash: item.HQFileHash, } } - if (item.SQ != undefined) { - let size = sizeFormate(item.SQ.FileSize) - types.push({ type: 'flac', size, hash: item.SQ.Hash }) + if (item.SQFileSize !== 0) { + let size = sizeFormate(item.SQFileSize) + types.push({ type: 'flac', size, hash: item.SQFileHash }) _types.flac = { size, - hash: item.SQ.Hash, + hash: item.SQFileHash, } } - if (item.Res != undefined) { - let size = sizeFormate(item.Res.FileSize) - types.push({ type: 'flac24bit', size, hash: item.Res.Hash }) + if (item.ResFileSize !== 0) { + let size = sizeFormate(item.ResFileSize) + types.push({ type: 'flac24bit', size, hash: item.ResFileHash }) _types.flac24bit = { size, - hash: item.Res.Hash, + hash: item.ResFileHash, } } list.push({ singer: decodeName(item.SingerName), - name: decodeName(item.OriSongName), + name: decodeName(item.SongName), albumName: decodeName(item.AlbumName), albumId: item.AlbumID, songmid: item.Audioid, @@ -75,27 +70,30 @@ export default { typeUrl: {}, }) }) - return list }, - handleResult(rawData) { - const rawList = [] - rawData.forEach(item => { - rawList.push(item) - item.Grp.forEach(e => rawList.push(e)) - }) + handleResult(raw) { + const handleList = [] - return this.filterList(rawList) + raw.forEach(item => { + handleList.push(item) + for (e in item.Grp) { + handleList.push(e) + } + }) + return this.filterList(handleList) }, search(str, page = 1, limit, retryNum = 0) { if (++retryNum > 3) return Promise.reject(new Error('try max num')) if (limit == null) limit = this.limit + // http://newlyric.kuwo.cn/newlyric.lrc?62355680 + return this.musicSearch(str, page, limit).then(result => { + if (!result || result.error_code !== 0) return this.search(str, page, limit, retryNum) + let list = this.handleResult(result.data.lists) - return this.musicSearch(str, page, limit).then(data => { - let list = this.handleResult(data.lists) - if (!list) return this.search(str, page, limit, retryNum) + if (list == null) return this.search(str, page, limit, retryNum) - this.total = data.total + this.total = result.data.total this.page = page this.allPage = Math.ceil(this.total / limit) @@ -108,4 +106,4 @@ export default { }) }) }, -} +} \ No newline at end of file diff --git a/src/renderer/utils/musicSdk/kg/temp/musicSearch-new.js b/src/renderer/utils/musicSdk/kg/temp/musicSearch-new.js new file mode 100644 index 00000000..d293ca24 --- /dev/null +++ b/src/renderer/utils/musicSdk/kg/temp/musicSearch-new.js @@ -0,0 +1,111 @@ +import { decodeName, formatPlayTime, sizeFormate } from '../../index' +import { signatureParams, createHttpFetch } from './util' + +export default { + limit: 30, + total: 0, + page: 0, + allPage: 1, + musicSearch(str, page, limit) { + const sign = signatureParams(`userid=0&area_code=1&appid=1005&dopicfull=1&page=${page}&token=0&privilegefilter=0&requestid=0&pagesize=${limit}&user_labels=&clienttime=0&sec_aggre=1&iscorrection=1&uuid=0&mid=0&keyword=${str}&dfid=-&clientver=11409&platform=AndroidFilter&tag=`, 3) + return createHttpFetch(`https://gateway.kugou.com/complexsearch/v3/search/song?userid=0&area_code=1&appid=1005&dopicfull=1&page=${page}&token=0&privilegefilter=0&requestid=0&pagesize=${limit}&user_labels=&clienttime=0&sec_aggre=1&iscorrection=1&uuid=0&mid=0&dfid=-&clientver=11409&platform=AndroidFilter&tag=&keyword=${encodeURIComponent(str)}&signature=${sign}`, { + 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', + referer: 'https://kugou.com', + }, + }).then(body => body) + }, + filterList(raw) { + let ids = new Set() + const list = [] + + raw.forEach(item => { + if (ids.has(item.Audioid)) return + ids.add(item.Audioid) + + const types = [] + const _types = {} + if (item.FileSize !== 0) { + let size = sizeFormate(item.FileSize) + types.push({ type: '128k', size, hash: item.FileHash }) + _types['128k'] = { + size, + hash: item.FileHash, + } + } + if (item.HQ != undefined) { + let size = sizeFormate(item.HQ.FileSize) + types.push({ type: '320k', size, hash: item.HQ.Hash }) + _types['320k'] = { + size, + hash: item.HQ.Hash, + } + } + if (item.SQ != undefined) { + let size = sizeFormate(item.SQ.FileSize) + types.push({ type: 'flac', size, hash: item.SQ.Hash }) + _types.flac = { + size, + hash: item.SQ.Hash, + } + } + if (item.Res != undefined) { + let size = sizeFormate(item.Res.FileSize) + types.push({ type: 'flac24bit', size, hash: item.Res.Hash }) + _types.flac24bit = { + size, + hash: item.Res.Hash, + } + } + list.push({ + singer: decodeName(item.SingerName), + name: decodeName(item.OriSongName), + albumName: decodeName(item.AlbumName), + albumId: item.AlbumID, + songmid: item.Audioid, + source: 'kg', + interval: formatPlayTime(item.Duration), + _interval: item.Duration, + img: null, + lrc: null, + otherSource: null, + hash: item.FileHash, + types, + _types, + typeUrl: {}, + }) + }) + + return list + }, + handleResult(rawData) { + const rawList = [] + rawData.forEach(item => { + rawList.push(item) + item.Grp.forEach(e => rawList.push(e)) + }) + + return this.filterList(rawList) + }, + search(str, page = 1, limit, retryNum = 0) { + if (++retryNum > 3) return Promise.reject(new Error('try max num')) + if (limit == null) limit = this.limit + + return this.musicSearch(str, page, limit).then(data => { + let list = this.handleResult(data.lists) + if (!list) return this.search(str, page, limit, retryNum) + + this.total = data.total + this.page = page + this.allPage = Math.ceil(this.total / limit) + + return Promise.resolve({ + list, + allPage: this.allPage, + limit, + total: this.total, + source: 'kg', + }) + }) + }, +} diff --git a/src/renderer/utils/musicSdk/kg/old/songList.js b/src/renderer/utils/musicSdk/kg/temp/songList-old.js similarity index 100% rename from src/renderer/utils/musicSdk/kg/old/songList.js rename to src/renderer/utils/musicSdk/kg/temp/songList-old.js diff --git a/src/renderer/utils/musicSdk/mg/old/leaderboard.js b/src/renderer/utils/musicSdk/mg/temp/leaderboard-old.js similarity index 100% rename from src/renderer/utils/musicSdk/mg/old/leaderboard.js rename to src/renderer/utils/musicSdk/mg/temp/leaderboard-old.js