105 lines
3.2 KiB
JavaScript
105 lines
3.2 KiB
JavaScript
import { decodeName, formatPlayTime, sizeFormate } from '../../index'
|
|
import { createHttpFetch } from './util'
|
|
|
|
const createGetMusicInfosTask = (hashs) => {
|
|
let data = {
|
|
appid: 1001,
|
|
clienttime: 639437935,
|
|
clientver: 9020,
|
|
fields: 'album_info,author_name,audio_info,ori_audio_name',
|
|
is_publish: '1',
|
|
key: '0475af1457cd3363c7b45b871e94428a',
|
|
mid: '21511157a05844bd085308bc76ef3342',
|
|
show_privilege: 1,
|
|
}
|
|
let list = hashs
|
|
let tasks = []
|
|
while (list.length) {
|
|
tasks.push(Object.assign({ data: list.slice(0, 100) }, data))
|
|
if (list.length < 100) break
|
|
list = list.slice(100)
|
|
}
|
|
let url = 'http://kmr.service.kugou.com/v2/album_audio/audio'
|
|
return tasks.map(task => createHttpFetch(url, {
|
|
method: 'POST',
|
|
body: task,
|
|
headers: {
|
|
'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1',
|
|
},
|
|
}).then(data => data.map(s => s[0])))
|
|
}
|
|
|
|
export const filterMusicInfoList = (rawList) => {
|
|
// console.log(rawList)
|
|
let ids = new Set()
|
|
let list = []
|
|
rawList.forEach(item => {
|
|
if (!item) return
|
|
if (ids.has(item.audio_info.audio_id)) return
|
|
ids.add(item.audio_info.audio_id)
|
|
const types = []
|
|
const _types = {}
|
|
if (item.audio_info.filesize !== '0') {
|
|
let size = sizeFormate(parseInt(item.audio_info.filesize))
|
|
types.push({ type: '128k', size, hash: item.audio_info.hash })
|
|
_types['128k'] = {
|
|
size,
|
|
hash: item.audio_info.hash,
|
|
}
|
|
}
|
|
if (item.audio_info.filesize_320 !== '0') {
|
|
let size = sizeFormate(parseInt(item.audio_info.filesize_320))
|
|
types.push({ type: '320k', size, hash: item.audio_info.hash_320 })
|
|
_types['320k'] = {
|
|
size,
|
|
hash: item.audio_info.hash_320,
|
|
}
|
|
}
|
|
if (item.audio_info.filesize_flac !== '0') {
|
|
let size = sizeFormate(parseInt(item.audio_info.filesize_flac))
|
|
types.push({ type: 'flac', size, hash: item.audio_info.hash_flac })
|
|
_types.flac = {
|
|
size,
|
|
hash: item.audio_info.hash_flac,
|
|
}
|
|
}
|
|
if (item.audio_info.filesize_high !== '0') {
|
|
let size = sizeFormate(parseInt(item.audio_info.filesize_high))
|
|
types.push({ type: 'flac24bit', size, hash: item.audio_info.hash_high })
|
|
_types.flac24bit = {
|
|
size,
|
|
hash: item.audio_info.hash_high,
|
|
}
|
|
}
|
|
list.push({
|
|
singer: decodeName(item.author_name),
|
|
name: decodeName(item.ori_audio_name),
|
|
albumName: decodeName(item.album_info.album_name),
|
|
albumId: item.album_info.album_id,
|
|
songmid: item.audio_info.audio_id,
|
|
source: 'kg',
|
|
interval: formatPlayTime(parseInt(item.audio_info.timelength) / 1000),
|
|
img: null,
|
|
lrc: null,
|
|
hash: item.audio_info.hash,
|
|
otherSource: null,
|
|
types,
|
|
_types,
|
|
typeUrl: {},
|
|
})
|
|
})
|
|
return list
|
|
}
|
|
|
|
export const getMusicInfos = async(hashs) => {
|
|
return filterMusicInfoList(await Promise.all(createGetMusicInfosTask(hashs)).then(data => data.flat()))
|
|
}
|
|
|
|
export const getMusicInfo = async(hash) => {
|
|
return getMusicInfos([hash]).then(data => data[0])
|
|
}
|
|
|
|
export const getMusicInfosByList = (list) => {
|
|
return getMusicInfos(list.map(item => ({ hash: item.hash })))
|
|
}
|