From 976be6d96fa08cbd9eecc692a284670a3e191f63 Mon Sep 17 00:00:00 2001 From: lyswhut Date: Thu, 18 Nov 2021 14:51:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=9B=A0kw=E6=BA=90=E6=AD=8C?= =?UTF-8?q?=E8=AF=8D=E6=8E=A5=E5=8F=A3=E5=81=9C=E7=94=A8=E5=AF=BC=E8=87=B4?= =?UTF-8?q?=E8=AF=A5=E6=BA=90=E6=AD=8C=E8=AF=8D=E8=8E=B7=E5=8F=96=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publish/changeLog.md | 1 + src/common/ipcNames.js | 2 +- src/main/rendererEvents/index.js | 2 +- src/renderer/utils/music/kw/lyric.js | 60 +++++++++++++++++++++++++++- src/renderer/utils/music/kw/util.js | 4 +- 5 files changed, 64 insertions(+), 5 deletions(-) diff --git a/publish/changeLog.md b/publish/changeLog.md index a99bd531..1ba78dcc 100644 --- a/publish/changeLog.md +++ b/publish/changeLog.md @@ -3,3 +3,4 @@ - 修复设置-控制按钮位置选项与下载歌词编码格式选项命名冲突导致选项显示异常的问题 - 修复播放下载列表时存在失效的歌曲会导致切歌不准确的问题 - 修复潜在的音乐加载超时不会切歌的问题 +- 修复因kw源歌词接口停用导致该源歌词获取失败的问题 diff --git a/src/common/ipcNames.js b/src/common/ipcNames.js index f811652d..e2674b51 100644 --- a/src/common/ipcNames.js +++ b/src/common/ipcNames.js @@ -35,7 +35,7 @@ const names = { lang_s2t: 'lang_s2t', - handle_kw_decode_lyric: 'handle_kw_decode_lyric', + // handle_kw_decode_lyric: 'handle_kw_decode_lyric', get_lyric_info: 'get_lyric_info', set_lyric_info: 'set_lyric_info', set_config: 'set_config', diff --git a/src/main/rendererEvents/index.js b/src/main/rendererEvents/index.js index 21f34f41..4d61666f 100644 --- a/src/main/rendererEvents/index.js +++ b/src/main/rendererEvents/index.js @@ -21,7 +21,7 @@ require('./lyric') require('./musicUrl') require('./systemFonts') -require('./kw_decodeLyric') +// require('./kw_decodeLyric') require('./userApi') require('./sync') diff --git a/src/renderer/utils/music/kw/lyric.js b/src/renderer/utils/music/kw/lyric.js index 91fd52f3..3c78bfaa 100644 --- a/src/renderer/utils/music/kw/lyric.js +++ b/src/renderer/utils/music/kw/lyric.js @@ -1,7 +1,63 @@ import { httpFetch } from '../../request' -import { decodeLyric } from './util' +import { decodeName } from '../../index' export default { + formatTime(time) { + let m = parseInt(time / 60) + let s = (time % 60).toFixed(2) + return (m < 10 ? '0' + m : m) + ':' + (s < 10 ? '0' + s : s) + }, + sortLrcArr(arr) { + const lrcSet = new Set() + let lrc = [] + let lrcT = [] + + for (const item of arr) { + if (lrcSet.has(item.time)) { + lrc.push(item) + } else { + lrcT.push(item) + lrcSet.add(item.time) + } + } + if (lrc.length) { + lrc.unshift(lrcT.shift()) + } else { + lrc = lrcT + lrcT = [] + } + + return { + lrc, + lrcT, + } + }, + transformLrc(songinfo, lrclist) { + return `[ti:${songinfo.songName}]\n[ar:${songinfo.artist}]\n[al:${songinfo.album}]\n[by:]\n[offset:0]\n${lrclist ? lrclist.map(l => `[${this.formatTime(l.time)}]${l.lineLyric}\n`).join('') : '暂无歌词'}` + }, + getLyric(songId) { + const requestObj = httpFetch(`http://m.kuwo.cn/newh5/singles/songinfoandlrc?musicId=${songId}`) + requestObj.promise = requestObj.promise.then(({ body }) => { + // console.log(body) + if (!body.data?.lrclist?.length) return Promise.reject(new Error('Get lyric failed')) + const { lrc, lrcT } = this.sortLrcArr(body.data.lrclist) + // console.log(body.data.lrclist) + // console.log(lrc, lrcT) + // console.log({ + // lyric: decodeName(this.transformLrc(body.data.songinfo, lrc)), + // tlyric: decodeName(this.transformLrc(body.data.songinfo, lrcT)), + // }) + return { + lyric: decodeName(this.transformLrc(body.data.songinfo, lrc)), + tlyric: lrcT.length ? decodeName(this.transformLrc(body.data.songinfo, lrcT)) : '', + } + }) + return requestObj + }, +} + + +/* export default { lrcInfoRxp: /(.+?)<\/lyric>[\s\S]+(.+?)<\/lyric_zz>/, parseLyricInfo(str) { let result = str.match(this.lrcInfoRxp) @@ -10,6 +66,7 @@ export default { getLyric(songId, isGetLyricx = false) { const requestObj = httpFetch(`http://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_${songId}`) requestObj.promise = requestObj.promise.then(({ statusCode, body }) => { + console.log(body) if (statusCode != 200) return Promise.reject(new Error(JSON.stringify(body))) let info = this.parseLyricInfo(body) if (!info) return Promise.reject(new Error(JSON.stringify(body))) @@ -27,3 +84,4 @@ export default { return requestObj }, } + */ diff --git a/src/renderer/utils/music/kw/util.js b/src/renderer/utils/music/kw/util.js index 0ce875ea..aa7f42c3 100644 --- a/src/renderer/utils/music/kw/util.js +++ b/src/renderer/utils/music/kw/util.js @@ -1,5 +1,5 @@ import { httpGet, httpFetch } from '../../request' -import { rendererInvoke, NAMES } from '../../../../common/ipc' +// import { rendererInvoke, NAMES } from '../../../../common/ipc' const kw_token = { token: null, @@ -54,7 +54,7 @@ export const getToken = (retryNum = 0) => new Promise((resolve, reject) => { }) }) -export const decodeLyric = base64Data => rendererInvoke(NAMES.mainWindow.handle_kw_decode_lyric, base64Data) +// export const decodeLyric = base64Data => rendererInvoke(NAMES.mainWindow.handle_kw_decode_lyric, base64Data) export const tokenRequest = async(url, options = {}) => { let token = kw_token.token