You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
3.7 KiB
160 lines
3.7 KiB
12 months ago
|
const mm = require('music-metadata')
|
||
|
const uploadPlugin = require('../plugins/songUpload')
|
||
|
const md5 = require('md5')
|
||
|
module.exports = async (query, request) => {
|
||
|
let ext = 'mp3'
|
||
|
if (query.songFile.name.indexOf('flac') > -1) {
|
||
|
ext = 'flac'
|
||
|
}
|
||
|
const filename = query.songFile.name
|
||
|
.replace('.' + ext, '')
|
||
|
.replace(/\s/g, '')
|
||
|
.replace(/\./g, '_')
|
||
|
query.cookie.os = 'pc'
|
||
|
query.cookie.appver = '2.9.7'
|
||
|
const bitrate = 999000
|
||
|
if (!query.songFile) {
|
||
|
return Promise.reject({
|
||
|
status: 500,
|
||
|
body: {
|
||
|
msg: '请上传音乐文件',
|
||
|
code: 500,
|
||
|
},
|
||
|
})
|
||
|
}
|
||
|
if (!query.songFile.md5) {
|
||
|
// 命令行上传没有md5和size信息,需要填充
|
||
|
query.songFile.md5 = md5(query.songFile.data)
|
||
|
query.songFile.size = query.songFile.data.byteLength
|
||
|
}
|
||
|
const res = await request(
|
||
|
'POST',
|
||
|
`https://interface.music.163.com/api/cloud/upload/check`,
|
||
|
{
|
||
|
bitrate: String(bitrate),
|
||
|
ext: '',
|
||
|
length: query.songFile.size,
|
||
|
md5: query.songFile.md5,
|
||
|
songId: '0',
|
||
|
version: 1,
|
||
|
},
|
||
|
{
|
||
|
crypto: 'weapi',
|
||
|
cookie: query.cookie,
|
||
|
proxy: query.proxy,
|
||
|
realIP: query.realIP,
|
||
|
},
|
||
|
)
|
||
|
let artist = ''
|
||
|
let album = ''
|
||
|
let songName = ''
|
||
|
try {
|
||
|
const metadata = await mm.parseBuffer(
|
||
|
query.songFile.data,
|
||
|
query.songFile.mimetype,
|
||
|
)
|
||
|
const info = metadata.common
|
||
|
|
||
|
if (info.title) {
|
||
|
songName = info.title
|
||
|
}
|
||
|
if (info.album) {
|
||
|
album = info.album
|
||
|
}
|
||
|
if (info.artist) {
|
||
|
artist = info.artist
|
||
|
}
|
||
|
// if (metadata.native.ID3v1) {
|
||
|
// metadata.native.ID3v1.forEach((item) => {
|
||
|
// // console.log(item.id, item.value)
|
||
|
// if (item.id === 'title') {
|
||
|
// songName = item.value
|
||
|
// }
|
||
|
// if (item.id === 'artist') {
|
||
|
// artist = item.value
|
||
|
// }
|
||
|
// if (item.id === 'album') {
|
||
|
// album = item.value
|
||
|
// }
|
||
|
// })
|
||
|
// // console.log({
|
||
|
// // songName,
|
||
|
// // album,
|
||
|
// // songName,
|
||
|
// // })
|
||
|
// }
|
||
|
// console.log({
|
||
|
// songName,
|
||
|
// album,
|
||
|
// songName,
|
||
|
// })
|
||
|
} catch (error) {
|
||
|
console.log(error)
|
||
|
}
|
||
|
const tokenRes = await request(
|
||
|
'POST',
|
||
|
`https://music.163.com/weapi/nos/token/alloc`,
|
||
|
{
|
||
|
bucket: '',
|
||
|
ext: ext,
|
||
|
filename: filename,
|
||
|
local: false,
|
||
|
nos_product: 3,
|
||
|
type: 'audio',
|
||
|
md5: query.songFile.md5,
|
||
|
},
|
||
|
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy },
|
||
|
)
|
||
|
|
||
|
if (res.body.needUpload) {
|
||
|
const uploadInfo = await uploadPlugin(query, request)
|
||
|
// console.log('uploadInfo', uploadInfo.body.result.resourceId)
|
||
|
}
|
||
|
// console.log(tokenRes.body.result)
|
||
|
const res2 = await request(
|
||
|
'POST',
|
||
|
`https://music.163.com/api/upload/cloud/info/v2`,
|
||
|
{
|
||
|
md5: query.songFile.md5,
|
||
|
songid: res.body.songId,
|
||
|
filename: query.songFile.name,
|
||
|
song: songName || filename,
|
||
|
album: album || '未知专辑',
|
||
|
artist: artist || '未知艺术家',
|
||
|
bitrate: String(bitrate),
|
||
|
resourceId: tokenRes.body.result.resourceId,
|
||
|
},
|
||
|
{
|
||
|
crypto: 'weapi',
|
||
|
cookie: query.cookie,
|
||
|
proxy: query.proxy,
|
||
|
realIP: query.realIP,
|
||
|
},
|
||
|
)
|
||
|
// console.log({ res2, privateCloud: res2.body.privateCloud })
|
||
|
// console.log(res.body.songId, 'songid')
|
||
|
const res3 = await request(
|
||
|
'POST',
|
||
|
`https://interface.music.163.com/api/cloud/pub/v2`,
|
||
|
{
|
||
|
songid: res2.body.songId,
|
||
|
},
|
||
|
{
|
||
|
crypto: 'weapi',
|
||
|
cookie: query.cookie,
|
||
|
proxy: query.proxy,
|
||
|
realIP: query.realIP,
|
||
|
},
|
||
|
)
|
||
|
// console.log({ res3 })
|
||
|
return {
|
||
|
status: 200,
|
||
|
body: {
|
||
|
...res.body,
|
||
|
...res3.body,
|
||
|
// ...uploadInfo,
|
||
|
},
|
||
|
cookie: res.cookie,
|
||
|
}
|
||
|
}
|