import { httpFetch } from '../../request' import { decodeLyric } from './util' export default { lrcInfoRxp: /(.+?)<\/lyric>[\s\S]+(.+?)<\/lyric_zz>/, parseLyricInfo(str) { let result = str.match(this.lrcInfoRxp) return result ? { lyric: result[1], lyric_zz: result[2] } : null }, getLyric(songId, isGetLyricx = false) { const requestObj = httpFetch(`http://player.kuwo.cn/webmusic/st/getNewMuiseByRid?rid=MUSIC_${songId}`) requestObj.promise = requestObj.promise.then(({ statusCode, 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))) Object.assign(requestObj, httpFetch(`http://newlyric.kuwo.cn/newlyric.lrc?${isGetLyricx ? info.lyric_zz : info.lyric}`)) return requestObj.promise.then(({ statusCode, body, raw }) => { if (statusCode != 200) return Promise.reject(new Error(JSON.stringify(body))) return decodeLyric({ lrcBase64: raw.toString('base64'), isGetLyricx }).then(base64Data => { return { lyric: Buffer.from(base64Data, 'base64').toString(), tlyric: '', } }) }) }) return requestObj }, }