diff --git a/src/renderer/utils/musicSdk/kg/musicSearch.js b/src/renderer/utils/musicSdk/kg/musicSearch.js index 15f69b02..0893c6c2 100644 --- a/src/renderer/utils/musicSdk/kg/musicSearch.js +++ b/src/renderer/utils/musicSdk/kg/musicSearch.js @@ -2,6 +2,7 @@ import { httpFetch } from '../../request' import { decodeName, formatPlayTime, sizeFormate } from '../../index' import { formatSingerName } from '../utils' + export default { limit: 30, total: 0, diff --git a/src/renderer/utils/musicSdk/tx/musicInfo.js b/src/renderer/utils/musicSdk/tx/musicInfo.js index 72a56e47..a3ec274b 100644 --- a/src/renderer/utils/musicSdk/tx/musicInfo.js +++ b/src/renderer/utils/musicSdk/tx/musicInfo.js @@ -1,61 +1,4 @@ -import { formatPlayTime, sizeFormate } from '../../index' -import { formatSingerName } from '../utils' -import { createMusicuFetch } from './util' - -export const filterMusicInfoItem = item => { - const types = [] - const _types = {} - if (item.file.size_128mp3 != 0) { - let size = sizeFormate(item.file.size_128mp3) - types.push({ type: '128k', size }) - _types['128k'] = { - size, - } - } - if (item.file.size_320mp3 !== 0) { - let size = sizeFormate(item.file.size_320mp3) - types.push({ type: '320k', size }) - _types['320k'] = { - size, - } - } - if (item.file.size_flac !== 0) { - let size = sizeFormate(item.file.size_flac) - types.push({ type: 'flac', size }) - _types.flac = { - size, - } - } - if (item.file.size_hires !== 0) { - let size = sizeFormate(item.file.size_hires) - types.push({ type: 'flac24bit', size }) - _types.flac24bit = { - size, - } - } - - const albumId = item.album.id ?? '' - const albumMid = item.album.mid ?? '' - const albumName = item.album.name ?? '' - return { - source: 'tx', - singer: formatSingerName(item.singer, 'name'), - name: item.name, - albumName, - albumId, - albumMid, - interval: formatPlayTime(item.interval), - songId: item.id, - songmid: item.mid, - strMediaMid: item.file.media_mid, - img: (albumId === '' || albumId === '空') - ? item.singer?.length ? `https://y.gtimg.cn/music/photo_new/T001R500x500M000${item.singer[0].mid}.jpg` : '' - : `https://y.gtimg.cn/music/photo_new/T002R500x500M000${albumMid}.jpg`, - types, - _types, - typeUrl: {}, - } -} +import { createMusicuFetch, filterMusicInfoItem } from './util' export const getMusicInfo = (id) => { return createMusicuFetch({ diff --git a/src/renderer/utils/musicSdk/tx/musicSearch.js b/src/renderer/utils/musicSdk/tx/musicSearch.js index b462a6d0..1f4a5952 100644 --- a/src/renderer/utils/musicSdk/tx/musicSearch.js +++ b/src/renderer/utils/musicSdk/tx/musicSearch.js @@ -1,5 +1,5 @@ import { httpFetch } from '../../request' -import { filterMusicInfoItem } from './musicInfo' +import { filterMusicInfoItem } from './util' export default { limit: 50, diff --git a/src/renderer/utils/musicSdk/tx/singer.js b/src/renderer/utils/musicSdk/tx/singer.js index e1ed9ec3..aad93e1d 100644 --- a/src/renderer/utils/musicSdk/tx/singer.js +++ b/src/renderer/utils/musicSdk/tx/singer.js @@ -1,5 +1,42 @@ -import { createMusicuFetch } from './util' -import { filterMusicInfoItem } from './musicInfo' +import { createMusicuFetch, filterMusicInfoItem } from './util' +import { httpFetch } from '../../request' + +/** + * 创建一个适用于TX的Http请求 + * @param {*} url + * @param {*} options + * @param {*} retryNum + */ +const createMusicuFetch = async(data, options, retryNum = 0) => { + if (retryNum > 2) throw new Error('try max num') + + let result + try { + result = await httpFetch('https://u.y.qq.com/cgi-bin/musicu.fcg', { + method: 'POST', + body: { + comm: { + cv: 4747474, + ct: 24, + format: 'json', + inCharset: 'utf-8', + outCharset: 'utf-8', + uin: 0, + }, + ...data, + }, + headers: { + 'User-Angent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', + }, + }).promise + } catch (err) { + console.log(err) + return createMusicuFetch(data, options, ++retryNum) + } + if (result.statusCode !== 200 || result.body.code != 0) return createMusicuFetch(data, options, ++retryNum) + + return result.body +} export default { /** @@ -43,11 +80,11 @@ export default { }, }, }).then(body => { - if (!body.req_1 || !body.req_2 || !body.req_3) throw new Error('get singer info faild.') + if (body.req_1.code != 0 || body.req_2 != 0 || body.req_3 != 0) throw new Error('get singer info faild.') - const info = body.req_1.singer_list[0] - const music = body.req_3 - const album = body.req_3 + const info = body.req_1.data.singer_list[0] + const music = body.req_3.data + const album = body.req_3.data return { source: 'tx', id: info.basic_info.singer_mid, @@ -86,15 +123,15 @@ export default { }, }, }).then(body => { - if (!body.req) throw new Error('get singer album faild.') + if (body.req.code != 0) throw new Error('get singer album faild.') - const list = this.filterAlbumList(body.req.albumList) + const list = this.filterAlbumList(body.req.data.albumList) return { source: 'tx', list, limit, page, - total: body.req.total, + total: body.req.data.total, } }) }, @@ -118,15 +155,15 @@ export default { }, }, }).then(body => { - if (!body.req) throw new Error('get singer song list faild.') + if (body.req.code != 0) throw new Error('get singer song list faild.') - const list = this.filterSongList(body.req.songList) + const list = this.filterSongList(body.req.data.songList) return { source: 'tx', list, limit, page, - total: body.req.totalNum, + total: body.req.data.totalNum, } }) }, diff --git a/src/renderer/utils/musicSdk/tx/util.js b/src/renderer/utils/musicSdk/tx/util.js index c0b4d2a5..e974d58e 100644 --- a/src/renderer/utils/musicSdk/tx/util.js +++ b/src/renderer/utils/musicSdk/tx/util.js @@ -1,43 +1,58 @@ import { httpFetch } from '../../request' +import { formatPlayTime, sizeFormate } from '../../index' +import { formatSingerName } from '../utils' -/** - * 创建一个适用于TX的Http请求 - * @param {*} url - * @param {*} options - * @param {*} retryNum - */ -export const createMusicuFetch = async(data, options, retryNum = 0) => { - if (retryNum > 2) throw new Error('try max num') - - let request - try { - request = await httpFetch('https://u.y.qq.com/cgi-bin/musicu.fcg', { - method: 'POST', - body: { - comm: { - cv: 4747474, - ct: 24, - format: 'json', - inCharset: 'utf-8', - outCharset: 'utf-8', - uin: 0, - }, - ...data, - }, - headers: { - 'User-Angent': 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', - }, - }).promise - } catch (err) { - console.log(err) - return createMusicuFetch(data, options, ++retryNum) +export const filterMusicInfoItem = item => { + const types = [] + const _types = {} + if (item.file.size_128mp3 != 0) { + let size = sizeFormate(item.file.size_128mp3) + types.push({ type: '128k', size }) + _types['128k'] = { + size, + } + } + if (item.file.size_320mp3 !== 0) { + let size = sizeFormate(item.file.size_320mp3) + types.push({ type: '320k', size }) + _types['320k'] = { + size, + } + } + if (item.file.size_flac !== 0) { + let size = sizeFormate(item.file.size_flac) + types.push({ type: 'flac', size }) + _types.flac = { + size, + } + } + if (item.file.size_hires !== 0) { + let size = sizeFormate(item.file.size_hires) + types.push({ type: 'flac24bit', size }) + _types.flac24bit = { + size, + } } - if (request.statusCode !== 200 || request.body.code != 0) return createMusicuFetch(data, options, ++retryNum) - const result = {} - Object.keys(data).forEach(item => { - if (request.body[item].code != 0) return - result[item] = request.body[item].data - }) - return result + const albumId = item.album.id ?? '' + const albumMid = item.album.mid ?? '' + const albumName = item.album.name ?? '' + return { + source: 'tx', + singer: formatSingerName(item.singer, 'name'), + name: item.name, + albumName, + albumId, + albumMid, + interval: formatPlayTime(item.interval), + songId: item.id, + songmid: item.mid, + strMediaMid: item.file.media_mid, + img: (albumId === '' || albumId === '空') + ? item.singer?.length ? `https://y.gtimg.cn/music/photo_new/T001R500x500M000${item.singer[0].mid}.jpg` : '' + : `https://y.gtimg.cn/music/photo_new/T002R500x500M000${albumMid}.jpg`, + types, + _types, + typeUrl: {}, + } } diff --git a/src/renderer/utils/musicSdk/wy/singer.js b/src/renderer/utils/musicSdk/wy/singer.js index 4fe350f4..d853b3eb 100644 --- a/src/renderer/utils/musicSdk/wy/singer.js +++ b/src/renderer/utils/musicSdk/wy/singer.js @@ -1,149 +1,149 @@ -import { createEapiFetch } from './utils/index' +import { eapiRequest } from './utils/index' import { formatPlayTime, sizeFormate } from '../../index' import { formatSingerName } from '../utils' export default { - /** - * 获取歌手信息 - * @param {*} id - */ - getInfo(id) { - return createEapiFetch('/api/artist/head/info/get', { id }).then(body => { - if (!body) throw new Error("get singer info faild.") - return { - source: 'wy', - id: body.artist.id, - info: { - name: body.artist.name, - desc: body.artist.briefDesc, - avatar: body.user.avatarUrl, - gender: body.user.gender === 1 ? 'man' : 'woman', - }, - count: { - music: body.artist.musicSize, - album: body.artist.albumSize, - } + /** + * 获取歌手信息 + * @param {*} id + */ + getInfo(id) { + return eapiRequest('/api/artist/head/info/get', { id }).then(({ body }) => { + if (!body || body.code != 200) throw new Error('get singer info faild.') + return { + source: 'wy', + id: body.artist.id, + info: { + name: body.artist.name, + desc: body.artist.briefDesc, + avatar: body.user.avatarUrl, + gender: body.user.gender === 1 ? 'man' : 'woman', + }, + count: { + music: body.artist.musicSize, + album: body.artist.albumSize, + }, + } + }) + }, + /** + * 获取歌手歌曲列表 + * @param {*} id + * @param {*} page + * @param {*} limit + */ + getSongList(id, page = 1, limit = 100) { + if (page === 1) page = 0 + return eapiRequest('/api/v2/artist/songs', { + id, + limit, + offset: limit * page, + }).then(({ body }) => { + if (!body.songs || body.code != 200) throw new Error('get singer song list faild.') + + const list = this.filterSongList(body.songs) + return { + list, + limit, + page, + total: body.total, + source: 'wy', + } + }) + }, + /** + * 获取歌手专辑列表 + * @param {*} id + * @param {*} page + * @param {*} limit + */ + getAlbumList(id, page = 1, limit = 10) { + if (page === 1) page = 0 + return eapiRequest(`/api/artist/albums/${id}`, { + limit, + offset: limit * page, + }).then(({ body }) => { + if (!body.hotAlbums || body.code != 200) throw new Error('get singer album list faild.') + + const list = this.filterAlbumList(body.hotAlbums) + return { + source: 'wy', + list, + limit, + page, + total: body.artist.albumSize, + } + }) + }, + filterAlbumList(raw) { + const list = [] + raw.forEach(item => { + if (!item.id) return + list.push({ + id: item.id, + count: item.size, + info: { + name: item.name, + author: formatSingerName(item.artists), + img: item.picUrl, + desc: null, + }, + }) + }) + return list + }, + filterSongList(raw) { + const list = [] + raw.forEach(item => { + if (!item.id) return + + const types = [] + const _types = {} + item.privilege.chargeInfoList.forEach(i => { + switch (i.rate) { + case 128000: + size = item.lMusic ? sizeFormate(item.lMusic.size) : null + types.push({ type: '128k', size }) + _types['128k'] = { + size, } - }) - }, - /** - * 获取歌手歌曲列表 - * @param {*} id - * @param {*} page - * @param {*} limit - */ - getSongList(id, page = 1, limit = 100) { - if (page === 1) page = 0 - return createEapiFetch('/api/v2/artist/songs', { - id, - limit, - offset: limit * page - }).then(body => { - if (!body.songs) throw new Error("get singer song list faild.") - - const list = this.filterSongList(body.songs) - return { - list, - limit, - page, - total: body.total, - source: 'wy', + case 320000: + size = item.hMusic ? sizeFormate(item.hMusic.size) : null + types.push({ type: '320k', size }) + _types['320k'] = { + size, } - }) - }, - /** - * 获取歌手专辑列表 - * @param {*} id - * @param {*} page - * @param {*} limit - */ - getAlbumList(id, page = 1, limit = 10) { - if (page === 1) page = 0 - return createEapiFetch(`/api/artist/albums/${id}`, { - limit, - offset: limit * page - }).then(body => { - if (!body.hotAlbums) throw new Error("get singer album list faild.") - - const list = this.filterAlbumList(body.hotAlbums) - return { - source: 'wy', - list, - limit, - page, - total: body.artist.albumSize + case 999000: + size = item.sqMusic ? sizeFormate(item.sqMusic.size) : null + types.push({ type: 'flac', size }) + _typesflac = { + size, } - }) - }, - filterAlbumList(raw) { - const list = [] - raw.forEach(item => { - if (!item.id) return - list.push({ - id: item.id, - count: item.size, - info: { - name: item.name, - author: formatSingerName(item.artists), - img: item.picUrl, - desc: null, - }, - }) - }) - return list - }, - filterSongList(raw) { - const list = [] - raw.forEach(item => { - if (!item.id) return + case 1999000: + size = item.hrMusic ? sizeFormate(item.hrMusic.size) : null + types.push({ type: 'flac24bit', size }) + _types.flac24bit = { + size, + } + } + }) - const types = [] - const _types = {} - item.privilege.chargeInfoList.forEach(i => { - switch (i.rate) { - case 128000: - size = item.lMusic ? sizeFormate(item.lMusic.size) : null - types.push({ type: '128k', size }) - _types['128k'] = { - size, - } - case 320000: - size = item.hMusic ? sizeFormate(item.hMusic.size) : null - types.push({ type: '320k', size }) - _types['320k'] = { - size, - } - case 999000: - size = item.sqMusic ? sizeFormate(item.sqMusic.size) : null - types.push({ type: 'flac', size }) - _typesflac = { - size, - } - case 1999000: - size = item.hrMusic ? sizeFormate(item.hrMusic.size) : null - types.push({ type: 'flac24bit', size }) - _types.flac24bit = { - size, - } - } - }) - - list.push({ - singer: formatSingerName(item.artists), - name: item.name, - albumName: item.album.name, - albumId: item.album.id, - songmid: item.id, - source: 'wy', - interval: formatPlayTime(item.duration), - img: null, - lrc: null, - otherSource: null, - types, - _types, - typeUrl: {}, - }) - }) - return list - }, + list.push({ + singer: formatSingerName(item.artists), + name: item.name, + albumName: item.album.name, + albumId: item.album.id, + songmid: item.id, + source: 'wy', + interval: formatPlayTime(item.duration), + img: null, + lrc: null, + otherSource: null, + types, + _types, + typeUrl: {}, + }) + }) + return list + }, } diff --git a/src/renderer/utils/musicSdk/wy/utils/index.js b/src/renderer/utils/musicSdk/wy/utils/index.js index 04c0a671..ce27143e 100644 --- a/src/renderer/utils/musicSdk/wy/utils/index.js +++ b/src/renderer/utils/musicSdk/wy/utils/index.js @@ -20,25 +20,3 @@ export const eapiRequest = (url, data) => { // }) // return requestObj } - -/** - * 创建一个Eapi请求 - * @param {*} url - * @param {*} options - * @param {*} retryNum - */ -export const createEapiFetch = async(url, data, retryNum = 0) => { - if (retryNum > 2) throw new Error('try max num') - - let result - try { - result = await eapiRequest(url, data).promise - } catch (err) { - console.log(err) - return createEapiFetch(url, data, ++retryNum) - } - - if (result.statusCode !== 200 || result.body.code != 200) return createEapiFetch(url, data, ++retryNum) - if (result.body.data) return result.body.data - return result.body -}