import { httpFetch } from '../../request' import { weapi } from './utils/crypto' import { formatPlayTime, sizeFormate } from '../..' // https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/module/song_detail.js export default { getSinger(singers) { let arr = [] singers.forEach(singer => { arr.push(singer.name) }) return arr.join('、') }, filterList({ songs, privileges }) { // console.log(songs, privileges) const list = [] songs.forEach((item, index) => { const types = [] const _types = {} let size let privilege = privileges[index] if (privilege.id !== item.id) privilege = privileges.find(p => p.id === item.id) if (!privilege) return switch (privilege.maxbr) { case 999000: 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() list.push({ singer: this.getSinger(item.ar), 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, otherSource: null, types, _types, typeUrl: {}, }) }) return list }, async getList(ids = [], retryNum = 0) { if (retryNum > 2) return Promise.reject(new Error('try max num')) const requestObj = httpFetch('https://music.163.com/weapi/v3/song/detail', { method: 'post', headers: { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', origin: 'https://music.163.com', }, form: weapi({ c: '[' + ids.map(id => ('{"id":' + id + '}')).join(',') + ']', ids: '[' + ids.join(',') + ']', }), }) const { body, statusCode } = await requestObj.promise if (statusCode != 200 || body.code !== 200) throw new Error('获取歌曲详情失败') // console.log(body) return { source: 'wy', list: this.filterList(body) } }, }