103 lines
2.9 KiB
JavaScript
103 lines
2.9 KiB
JavaScript
// import { httpFetch } from '../../request'
|
|
// import { weapi } from './utils/crypto'
|
|
import { sizeFormate, formatPlayTime, getSingerName } from '../../index'
|
|
// import musicDetailApi from './musicDetail'
|
|
import { eapiRequest } from './utils/index'
|
|
|
|
export default {
|
|
limit: 30,
|
|
total: 0,
|
|
page: 0,
|
|
allPage: 1,
|
|
musicSearch(str, page, limit) {
|
|
const searchRequest = eapiRequest('/api/cloudsearch/pc', {
|
|
s: str,
|
|
type: 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频
|
|
limit,
|
|
total: page == 1,
|
|
offset: limit * (page - 1),
|
|
})
|
|
return searchRequest.promise.then(({ body }) => body)
|
|
},
|
|
handleResult(rawList) {
|
|
// console.log(rawList)
|
|
if (!rawList) return []
|
|
return rawList.map(item => {
|
|
const types = []
|
|
const _types = {}
|
|
let size
|
|
|
|
if (item.privilege.maxBrLevel == 'hires') {
|
|
size = item.hr ? sizeFormate(item.hr.size) : null
|
|
types.push({ type: 'flac24bit', size })
|
|
_types.flac24bit = {
|
|
size,
|
|
}
|
|
}
|
|
switch (item.privilege.maxbr) {
|
|
case 999000:
|
|
size = item.sq ? sizeFormate(item.sq.size) : null
|
|
types.push({ type: 'flac', size })
|
|
_types.flac = {
|
|
size,
|
|
}
|
|
case 320000:
|
|
size = item.h ? sizeFormate(item.h.size) : null
|
|
types.push({ type: '320k', size })
|
|
_types['320k'] = {
|
|
size,
|
|
}
|
|
case 192000:
|
|
case 128000:
|
|
size = item.l ? sizeFormate(item.l.size) : null
|
|
types.push({ type: '128k', size })
|
|
_types['128k'] = {
|
|
size,
|
|
}
|
|
}
|
|
|
|
types.reverse()
|
|
|
|
return {
|
|
singer: getSingerName(item.ar, 'name'),
|
|
name: item.name,
|
|
albumName: item.al.name,
|
|
albumId: item.al.id,
|
|
source: 'wy',
|
|
interval: formatPlayTime(item.dt / 1000),
|
|
songmid: item.id,
|
|
img: item.al.picUrl,
|
|
lrc: null,
|
|
types,
|
|
_types,
|
|
typeUrl: {},
|
|
}
|
|
})
|
|
},
|
|
search(str, page = 1, limit, retryNum = 0) {
|
|
if (++retryNum > 3) return Promise.reject(new Error('try max num'))
|
|
if (limit == null) limit = this.limit
|
|
return this.musicSearch(str, page, limit).then(result => {
|
|
// console.log(result)
|
|
if (!result || result.code !== 200) return this.search(str, page, limit, retryNum)
|
|
let list = this.handleResult(result.result.songs || [])
|
|
// console.log(list)
|
|
|
|
if (list == null) return this.search(str, page, limit, retryNum)
|
|
|
|
this.total = result.result.songCount || 0
|
|
this.page = page
|
|
this.allPage = Math.ceil(this.total / this.limit)
|
|
|
|
return {
|
|
list,
|
|
allPage: this.allPage,
|
|
limit: this.limit,
|
|
total: this.total,
|
|
source: 'wy',
|
|
}
|
|
// return result.data
|
|
})
|
|
},
|
|
}
|