From e3e4cf8026f86d8d2eb0b479428353b4f333eebe Mon Sep 17 00:00:00 2001 From: Folltoshe Date: Mon, 3 Apr 2023 21:23:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmg=E6=BA=90=E6=90=9C=E7=B4=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E4=B8=8D=E6=98=BE=E7=A4=BA=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/utils/musicSdk/mg/musicSearch.js | 67 ++++++++++--------- src/renderer/utils/musicSdk/mg/util.js | 9 +++ 2 files changed, 44 insertions(+), 32 deletions(-) create mode 100644 src/renderer/utils/musicSdk/mg/util.js diff --git a/src/renderer/utils/musicSdk/mg/musicSearch.js b/src/renderer/utils/musicSdk/mg/musicSearch.js index 1dbd5e29..93df375e 100644 --- a/src/renderer/utils/musicSdk/mg/musicSearch.js +++ b/src/renderer/utils/musicSdk/mg/musicSearch.js @@ -1,7 +1,8 @@ // import '../../polyfill/array.find' import { httpFetch } from '../../request' -import { sizeFormate } from '../../index' +import { sizeFormate, formatPlayTime } from '../../index' +import { encode } from './util' // import { debug } from '../../utils/env' // import { formatSinger } from './util' @@ -11,8 +12,9 @@ export default { page: 0, allPage: 1, musicSearch(str, page, limit) { - const searchRequest = httpFetch(`http://pd.musicapp.migu.cn/MIGUM2.0/v1.0/content/search_all.do?ua=Android_migu&version=5.0.1&text=${encodeURIComponent(str)}&pageNo=${page}&pageSize=${limit}&searchSwitch=%7B%22song%22%3A1%2C%22album%22%3A0%2C%22singer%22%3A0%2C%22tagSong%22%3A0%2C%22mvSong%22%3A0%2C%22songlist%22%3A0%2C%22bestShow%22%3A1%7D`, { - // searchRequest = httpFetch(`http://jadeite.migu.cn:7090/music_search/v2/search/searchAll?sid=4f87090d01c84984a11976b828e2b02c18946be88a6b4c47bcdc92fbd40762db&isCorrect=1&isCopyright=1&searchSwitch=%7B%22song%22%3A1%2C%22album%22%3A0%2C%22singer%22%3A0%2C%22tagSong%22%3A1%2C%22mvSong%22%3A0%2C%22bestShow%22%3A1%2C%22songlist%22%3A0%2C%22lyricSong%22%3A0%7D&pageSize=${limit}&text=${encodeURIComponent(str)}&pageNo=${page}&sort=0`, { + const timestamp = Date.now() + const encodeData = encode(str, timestamp) + const searchRequest = httpFetch(`https://jadeite.migu.cn/music_search/v3/search/searchAll?pageNo=${page}&pageSize=${limit}&sort=0&text=${str}&searchSwitch={"song":1,"album":0,"singer":0,"tagSong":0,"mvSong":0,"bestShow":0,"songlist":0,"lyricSong":0}&isCopyright=1&isCorrect=1`, { headers: { // sign: 'c3b7ae985e2206e97f1b2de8f88691e2', // timestamp: 1578225871982, @@ -20,10 +22,17 @@ export default { // mode: 'android', // ua: 'Android_migu', // version: '6.9.4', - osVersion: 'android 7.0', - 'User-Agent': 'okhttp/3.9.1', + // osVersion: 'android 10.0', + uiVersion: 'A_music_3.6.1', + deviceId: encodeData.deviceId, + timestamp: timestamp.toString(), + sign: encodeData.sign, + 'User-Agent': 'Mozilla/5.0 (Linux; U; Android 11.0.0; zh-cn; MI 11 Build/OPR1.170623.032) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', + channel: '0146921', }, }) + // searchRequest = httpFetch(`http://pd.musicapp.migu.cn/MIGUM2.0/v1.0/content/search_all.do?ua=Android_migu&version=5.0.1&text=${encodeURIComponent(str)}&pageNo=${page}&pageSize=${limit}&searchSwitch=%7B%22song%22%3A1%2C%22album%22%3A0%2C%22singer%22%3A0%2C%22tagSong%22%3A0%2C%22mvSong%22%3A0%2C%22songlist%22%3A0%2C%22bestShow%22%3A1%7D`, { + // searchRequest = httpFetch(`http://jadeite.migu.cn:7090/music_search/v2/search/searchAll?sid=4f87090d01c84984a11976b828e2b02c18946be88a6b4c47bcdc92fbd40762db&isCorrect=1&isCopyright=1&searchSwitch=%7B%22song%22%3A1%2C%22album%22%3A0%2C%22singer%22%3A0%2C%22tagSong%22%3A1%2C%22mvSong%22%3A0%2C%22bestShow%22%3A1%2C%22songlist%22%3A0%2C%22lyricSong%22%3A0%7D&pageSize=${limit}&text=${encodeURIComponent(str)}&pageNo=${page}&sort=0`, { // searchRequest = httpFetch(`https://app.c.nf.migu.cn/MIGUM2.0/v1.0/content/search_all.do?isCopyright=1&isCorrect=1&pageNo=${page}&pageSize=${limit}&searchSwitch={%22song%22:1,%22album%22:0,%22singer%22:0,%22tagSong%22:0,%22mvSong%22:0,%22songlist%22:0,%22bestShow%22:0}&sort=0&text=${encodeURIComponent(str)}`) return searchRequest.promise.then(({ body }) => body) }, @@ -39,36 +48,37 @@ export default { let ids = new Set() const list = [] rawData.forEach(item => { - if (ids.has(item.id)) return - ids.add(item.id) + let data = item[0] + if (ids.has(data.id)) return + ids.add(data.id) const types = [] const _types = {} - item.newRateFormats && item.newRateFormats.forEach(type => { + data.audioFormats && data.audioFormats.forEach(type => { let size switch (type.formatType) { case 'PQ': - size = sizeFormate(type.size ?? type.androidSize) + size = sizeFormate(type.asize ?? type.isize) types.push({ type: '128k', size }) _types['128k'] = { size, } break case 'HQ': - size = sizeFormate(type.size ?? type.androidSize) + size = sizeFormate(type.asize ?? type.isize) types.push({ type: '320k', size }) _types['320k'] = { size, } break case 'SQ': - size = sizeFormate(type.size ?? type.androidSize) + size = sizeFormate(type.asize ?? type.isize) types.push({ type: 'flac', size }) _types.flac = { size, } break case 'ZQ': - size = sizeFormate(type.size ?? type.androidSize) + size = sizeFormate(type.asize ?? type.isize) types.push({ type: 'flac24bit', size }) _types.flac24bit = { size, @@ -77,28 +87,21 @@ export default { } }) - const albumNInfo = item.albums && item.albums.length - ? { - id: item.albums[0].id, - name: item.albums[0].name, - } - : {} - list.push({ - singer: this.getSinger(item.singers), - name: item.name, - albumName: albumNInfo.name, - albumId: albumNInfo.id, - songmid: item.copyrightId, - songId: item.songId, - copyrightId: item.copyrightId, + singer: this.getSinger(data.singerList), + name: data.name, + albumName: data.album, + albumId: data.albumId, + songmid: data.copyrightId, + songId: data.songId, + copyrightId: data.copyrightId, source: 'mg', - interval: null, - img: item.imgItems && item.imgItems.length ? item.imgItems[0].img : null, + interval: formatPlayTime(data.duration), + img: data.img3, lrc: null, - lrcUrl: item.lyricUrl, - mrcUrl: item.mrcurl, - trcUrl: item.trcUrl, + lrcUrl: data.lyricUrl, + mrcUrl: data.mrcurl, + trcUrl: data.trcUrl, otherSource: null, types, _types, @@ -116,7 +119,7 @@ export default { if (!result || result.code !== '000000') return Promise.reject(new Error(result ? result.info : '搜索失败')) const songResultData = result.songResultData || { result: [], totalCount: 0 } - let list = this.handleResult(songResultData.result) + let list = this.handleResult(songResultData.resultList) if (list == null) return this.search(str, page, limit, retryNum) this.total = parseInt(songResultData.totalCount) diff --git a/src/renderer/utils/musicSdk/mg/util.js b/src/renderer/utils/musicSdk/mg/util.js new file mode 100644 index 00000000..43f4178d --- /dev/null +++ b/src/renderer/utils/musicSdk/mg/util.js @@ -0,0 +1,9 @@ +import { toMD5 } from '../utils' + +export const encode = (keyword, timestamp) => { + const deviceId = '963B7AA0D21511ED807EE5846EC87D16' + const signatureMd5 = '6cdc72a439cef99a3418d2a78aa28c73' + const text = `${keyword}${signatureMd5}yyapp2d16148780a1dcc7408e06336b98cfd50${deviceId}${timestamp}` + return { sign: toMD5(text), deviceId } +} +