154 lines
3.9 KiB
JavaScript
154 lines
3.9 KiB
JavaScript
import { httpFetch } from '../../request'
|
|
// import { formatPlayTime } from '../../index'
|
|
|
|
|
|
const boardList = [
|
|
// { id: 'bd__601', name: '歌单榜', bangid: '601' },
|
|
{ id: 'bd__2', name: '热歌榜', bangid: '2' },
|
|
{ id: 'bd__20', name: '华语金曲榜', bangid: '20' },
|
|
{ id: 'bd__25', name: '网络歌曲榜', bangid: '25' },
|
|
{ id: 'bd__1', name: '新歌榜', bangid: '1' },
|
|
{ id: 'bd__21', name: '欧美金曲榜', bangid: '21' },
|
|
{ id: 'bd__200', name: '原创音乐榜', bangid: '200' },
|
|
{ id: 'bd__22', name: '经典老歌榜', bangid: '22' },
|
|
{ id: 'bd__24', name: '影视金曲榜', bangid: '24' },
|
|
{ id: 'bd__23', name: '情歌对唱榜', bangid: '23' },
|
|
{ id: 'bd__11', name: '摇滚榜', bangid: '11' },
|
|
{ id: 'bd__105', name: '好童星榜', bangid: '105' },
|
|
{ id: 'bd__106', name: '雅克•藏羌彝原创音乐榜', bangid: '106' },
|
|
]
|
|
|
|
export default {
|
|
limit: 20,
|
|
list: [
|
|
{
|
|
id: 'bdrgb',
|
|
name: '热歌榜',
|
|
bangid: '2',
|
|
},
|
|
{
|
|
id: 'bdxgb',
|
|
name: '新歌榜',
|
|
bangid: '1',
|
|
},
|
|
{
|
|
id: 'bdycb',
|
|
name: '原创榜',
|
|
bangid: '200',
|
|
},
|
|
{
|
|
id: 'bdhyjqb',
|
|
name: '华语榜',
|
|
bangid: '20',
|
|
},
|
|
{
|
|
id: 'bdomjqb',
|
|
name: '欧美榜',
|
|
bangid: '21',
|
|
},
|
|
{
|
|
id: 'bdwugqb',
|
|
name: '网络榜',
|
|
bangid: '25',
|
|
},
|
|
{
|
|
id: 'bdjdlgb',
|
|
name: '老歌榜',
|
|
bangid: '22',
|
|
},
|
|
{
|
|
id: 'bdysjqb',
|
|
name: '影视金曲榜',
|
|
bangid: '24',
|
|
},
|
|
{
|
|
id: 'bdqgdcb',
|
|
name: '情歌对唱榜',
|
|
bangid: '23',
|
|
},
|
|
{
|
|
id: 'bdygb',
|
|
name: '摇滚榜',
|
|
bangid: '11',
|
|
},
|
|
],
|
|
getUrl(id, p) {
|
|
return `http://musicmini.qianqian.com/2018/static/bangdan/bangdanList_${id}_${p}.html`
|
|
},
|
|
regExps: {
|
|
item: /data-song="({.+?})"/g,
|
|
info: /{total[\s:]+"(\d+)", size[\s:]+"(\d+)", page[\s:]+"(\d+)"}/,
|
|
},
|
|
getData(url) {
|
|
const requestObj = httpFetch(url)
|
|
return requestObj.promise
|
|
},
|
|
filterData(rawList) {
|
|
// console.log(rawList)
|
|
return rawList.map(item => {
|
|
const types = []
|
|
const _types = {}
|
|
let size = null
|
|
types.push({ type: '128k', size })
|
|
_types['128k'] = {
|
|
size,
|
|
}
|
|
if (item.biaoshi) {
|
|
types.push({ type: '320k', size })
|
|
_types['320k'] = {
|
|
size,
|
|
}
|
|
types.push({ type: 'flac', size })
|
|
_types.flac = {
|
|
size,
|
|
}
|
|
}
|
|
// types.reverse()
|
|
|
|
return {
|
|
singer: item.song_artist.replace(',', '、'),
|
|
name: item.song_title,
|
|
albumName: item.album_title,
|
|
albumId: item.album_id,
|
|
source: 'bd',
|
|
interval: '',
|
|
songmid: item.song_id,
|
|
img: null,
|
|
lrc: null,
|
|
types,
|
|
_types,
|
|
typeUrl: {},
|
|
}
|
|
})
|
|
},
|
|
parseData(rawData) {
|
|
// return rawData.map(item => JSON.parse(item.replace(this.regExps.item, '$1').replace(/"/g, '"').replace(/\\\//g, '/').replace(/(@s_1,w_)\d+(,h_)\d+/, '$1500$2500')))
|
|
return rawData.map(item => JSON.parse(item.replace(this.regExps.item, '$1').replace(/"/g, '"').replace(/\\\//g, '/')))
|
|
},
|
|
async getBoards(retryNum = 0) {
|
|
this.list = boardList
|
|
return {
|
|
list: boardList,
|
|
source: 'bd',
|
|
}
|
|
},
|
|
getList(bangid, page, retryNum = 0) {
|
|
if (++retryNum > 3) return Promise.reject(new Error('try max num'))
|
|
return this.getData(this.getUrl(bangid, page)).then(({ body }) => {
|
|
let result = body.match(this.regExps.item)
|
|
if (!result) return this.getList(bangid, page, retryNum)
|
|
let info = body.match(this.regExps.info)
|
|
if (!info) return this.getList(bangid, page, retryNum)
|
|
const list = this.filterData(this.parseData(result))
|
|
this.limit = parseInt(info[2])
|
|
return {
|
|
total: parseInt(info[1]),
|
|
list,
|
|
limit: this.limit,
|
|
page: parseInt(info[3]),
|
|
source: 'bd',
|
|
}
|
|
})
|
|
},
|
|
}
|