修复kw部分歌单无法打开的问题

This commit is contained in:
lyswhut
2021-05-12 14:04:08 +08:00
parent add05ef913
commit ea35ed25d8
5 changed files with 231 additions and 38 deletions
+54 -13
View File
@@ -1,11 +1,29 @@
import { httpGet } from '../../request'
import { httpGet, httpFetch } from '../../request'
import { rendererInvoke, NAMES } from '../../../../common/ipc'
if (!window.kw_token) {
window.kw_token = {
token: null,
isGetingToken: false,
}
const kw_token = {
token: null,
isGetingToken: false,
}
const translationMap = {
"{'": '{"',
"'}\n": '"}',
"'}": '"}',
"':'": '":"',
"','": '","',
"':{'": '":{"',
"':['": '":["',
"'}],'": '"}],"',
"':[{'": '":[{"',
"'},'": '"},"',
"'},{'": '"},{"',
"':[],'": '":[],"',
"':{},'": '":{},"',
}
export const objStr2JSON = str => {
return JSON.parse(str.replace(/(^{'|'}\n$|'}$|':'|','|':\[{'|'}\],'|':{'|'},'|'},{'|':\['|':\[\],'|':{},')/g, s => translationMap[s]))
}
export const formatSinger = rawData => rawData.replace(/&/g, '、')
@@ -21,17 +39,40 @@ export const matchToken = headers => {
const wait = time => new Promise(resolve => setTimeout(() => resolve(), time))
export const getToken = () => new Promise((resolve, reject) => {
if (window.kw_token.isGetingToken) return wait(1000).then(() => getToken().then(token => resolve(token)))
if (window.kw_token.token) return resolve(window.kw_token.token)
window.kw_token.isGetingToken = true
export const getToken = (retryNum = 0) => new Promise((resolve, reject) => {
if (retryNum > 2) return Promise.reject(new Error('try max num'))
if (kw_token.isGetingToken) return wait(1000).then(() => getToken(retryNum).then(token => resolve(token)))
if (kw_token.token) return resolve(kw_token.token)
kw_token.isGetingToken = true
httpGet('http://www.kuwo.cn/', (err, resp) => {
window.kw_token.isGetingToken = false
if (err) return reject(err)
kw_token.isGetingToken = false
if (err) return getToken(retryNum)
if (resp.statusCode != 200) return reject(new Error('获取失败'))
const token = window.kw_token.token = matchToken(resp.headers)
const token = kw_token.token = matchToken(resp.headers)
resolve(token)
})
})
export const decodeLyric = base64Data => rendererInvoke(NAMES.mainWindow.handle_kw_decode_lyric, base64Data)
export const tokenRequest = async(url, options = {}) => {
let token = kw_token.token
if (!token) token = await getToken()
if (!options.headers) {
options.headers = {
Referer: 'http://www.kuwo.cn/',
csrf: token,
cookie: 'kw_token=' + token,
}
}
const requestObj = httpFetch(url, options)
requestObj.promise = requestObj.promise.then(resp => {
console.log(resp)
if (resp.statusCode == 200) {
kw_token.token = matchToken(resp.headers)
}
return resp
})
return requestObj
}