未验证 提交 9063c7df 编写于 作者: B binaryify 提交者: GitHub

Merge pull request #863 from greenhat616/master

feat: optional realIP
...@@ -4,5 +4,6 @@ node_modules ...@@ -4,5 +4,6 @@ node_modules
.idea/ .idea/
package-lock.json package-lock.json
yarn.lock
.vscode .vscode
\ No newline at end of file
...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
nickname: query.nickname nickname: query.nickname,
}; }
return request( return request(
'POST', 'POST',
`http://music.163.com/eapi/activate/initProfile`, `http://music.163.com/eapi/activate/initProfile`,
...@@ -12,7 +12,8 @@ module.exports = (query, request) => { ...@@ -12,7 +12,8 @@ module.exports = (query, request) => {
crypto: 'eapi', crypto: 'eapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
url: '/api/activate/initProfile' realIP: query.realIP,
url: '/api/activate/initProfile',
} }
); )
}; }
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/v1/album/${query.id}`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/album/${query.id}`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
// 数字专辑详情 // 数字专辑详情
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id id: query.id,
} }
return request( return request(
'POST', `https://music.163.com/weapi/vipmall/albumproduct/detail`, data, 'POST',
`https://music.163.com/weapi/vipmall/albumproduct/detail`,
data,
{ {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
realIP: query.realIP,
} }
) )
} }
// 专辑动态信息 // 专辑动态信息
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id id: query.id,
} }
return request( return request(
'POST', 'POST',
`https://music.163.com/api/album/detail/dynamic`, `https://music.163.com/api/album/detail/dynamic`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -5,10 +5,17 @@ module.exports = (query, request) => { ...@@ -5,10 +5,17 @@ module.exports = (query, request) => {
offset: query.offset || 0, offset: query.offset || 0,
total: true, total: true,
area: query.area || 'ALL', //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本 area: query.area || 'ALL', //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本
type: query.type type: query.type,
} }
return request( return request(
'POST', `https://music.163.com/weapi/vipmall/albumproduct/list`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/vipmall/albumproduct/list`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -7,7 +7,14 @@ module.exports = (query, request) => { ...@@ -7,7 +7,14 @@ module.exports = (query, request) => {
area: query.area || 'Z_H', //Z_H:华语,E_A:欧美,KR:韩国,JP:日本 area: query.area || 'Z_H', //Z_H:华语,E_A:欧美,KR:韩国,JP:日本
} }
return request( return request(
'POST', `https://music.163.com/weapi/vipmall/appalbum/album/style`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/vipmall/appalbum/album/style`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -4,10 +4,12 @@ module.exports = (query, request) => { ...@@ -4,10 +4,12 @@ module.exports = (query, request) => {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
total: true, total: true,
area: query.area || 'ALL' //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本 area: query.area || 'ALL', //ALL:全部,ZH:华语,EA:欧美,KR:韩国,JP:日本
} }
return request( return request('POST', `https://music.163.com/weapi/album/new`, data, {
'POST', `https://music.163.com/weapi/album/new`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/api/discovery/newAlbum`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/discovery/newAlbum`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -14,6 +14,11 @@ module.exports = (query, request) => { ...@@ -14,6 +14,11 @@ module.exports = (query, request) => {
'POST', 'POST',
`https://music.163.com/api/feealbum/songsaleboard/${type}/type`, `https://music.163.com/api/feealbum/songsaleboard/${type}/type`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
// 收藏/取消收藏专辑 // 收藏/取消收藏专辑
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = query.t == 1 ? 'sub' : 'unsub'
const data = { const data = {
id: query.id id: query.id,
}; }
return request('POST', `https://music.163.com/api/album/${query.t}`, data, { return request('POST', `https://music.163.com/api/album/${query.t}`, data, {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
}); realIP: query.realIP,
}; })
}
...@@ -4,10 +4,12 @@ module.exports = (query, request) => { ...@@ -4,10 +4,12 @@ module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 25, limit: query.limit || 25,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true,
} }
return request( return request('POST', `https://music.163.com/weapi/album/sublist`, data, {
'POST', `https://music.163.com/weapi/album/sublist`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -4,10 +4,17 @@ module.exports = (query, request) => { ...@@ -4,10 +4,17 @@ module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true,
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/albums/${query.id}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/artist/albums/${query.id}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,10 +2,17 @@ ...@@ -2,10 +2,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id id: query.id,
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/introduction`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/artist/introduction`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -19,15 +19,19 @@ ...@@ -19,15 +19,19 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
initial: isNaN(query.initial) ? (query.initial || '').toUpperCase().charCodeAt() || undefined : query.initial, initial: isNaN(query.initial)
? (query.initial || '').toUpperCase().charCodeAt() || undefined
: query.initial,
offset: query.offset || 0, offset: query.offset || 0,
limit: query.limit || 30, limit: query.limit || 30,
total: true, total: true,
type: query.type || '1', type: query.type || '1',
area: query.area area: query.area,
} }
return request( return request('POST', `https://music.163.com/api/v1/artist/list`, data, {
'POST', `https://music.163.com/api/v1/artist/list`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -5,10 +5,12 @@ module.exports = (query, request) => { ...@@ -5,10 +5,12 @@ module.exports = (query, request) => {
artistId: query.id, artistId: query.id,
limit: query.limit, limit: query.limit,
offset: query.offset, offset: query.offset,
total: true total: true,
} }
return request( return request('POST', `https://music.163.com/weapi/artist/mvs`, data, {
'POST', `https://music.163.com/weapi/artist/mvs`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
// 收藏与取消收藏歌手 // 收藏与取消收藏歌手
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = query.t == 1 ? 'sub' : 'unsub'
const data = { const data = {
artistId: query.id, artistId: query.id,
artistIds: '[' + query.id + ']' artistIds: '[' + query.id + ']',
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/${query.t}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/artist/${query.t}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -4,10 +4,12 @@ module.exports = (query, request) => { ...@@ -4,10 +4,12 @@ module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 25, limit: query.limit || 25,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true,
} }
return request( return request('POST', `https://music.163.com/weapi/artist/sublist`, data, {
'POST', `https://music.163.com/weapi/artist/sublist`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
// 歌手热门 50 首歌曲 // 歌手热门 50 首歌曲
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id id: query.id,
} }
return request( return request('POST', `https://music.163.com/api/artist/top/song`, data, {
'POST', `https://music.163.com/api/artist/top/song`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/v1/artist/${query.id}`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/artist/${query.id}`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -5,9 +5,14 @@ module.exports = async (query, request) => { ...@@ -5,9 +5,14 @@ module.exports = async (query, request) => {
'POST', 'POST',
`https://music.163.com/weapi/user/avatar/upload/v1`, `https://music.163.com/weapi/user/avatar/upload/v1`,
{ {
imgid: uploadInfo.imgId imgid: uploadInfo.imgId,
}, },
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
return { return {
status: 200, status: 200,
......
// 首页轮播图 // 首页轮播图
module.exports = (query, request) => { module.exports = (query, request) => {
const type = { const type =
{
0: 'pc', 0: 'pc',
1: 'android', 1: 'android',
2: 'iphone', 2: 'iphone',
3: 'ipad' 3: 'ipad',
}[query.type || 0] || 'pc'; }[query.type || 0] || 'pc'
return request( return request(
'POST', `https://music.163.com/api/v2/banner/get`, {clientType: type}, 'POST',
{crypto: 'linuxapi', proxy: query.proxy} `https://music.163.com/api/v2/banner/get`,
{ clientType: type },
{ crypto: 'linuxapi', proxy: query.proxy, realIP: query.realIP }
) )
} }
...@@ -2,15 +2,18 @@ ...@@ -2,15 +2,18 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
'e_r': true e_r: true,
}; }
Object.keys(query).forEach(i => { Object.keys(query).forEach((i) => {
if (/^\/api\//.test(i)) { if (/^\/api\//.test(i)) {
data[i] = query[i] data[i] = query[i]
} }
}) })
return request( return request('POST', `http://music.163.com/eapi/batch`, data, {
'POST', `http://music.163.com/eapi/batch`, data, crypto: 'eapi',
{crypto: 'eapi', proxy: query.proxy, url: '/api/batch', cookie: query.cookie} proxy: query.proxy,
) url: '/api/batch',
}; cookie: query.cookie,
\ No newline at end of file realIP: query.realIP,
})
}
...@@ -5,10 +5,10 @@ module.exports = (query, request) => { ...@@ -5,10 +5,10 @@ module.exports = (query, request) => {
ctcode: query.ctcode || '86', ctcode: query.ctcode || '86',
cellphone: query.phone, cellphone: query.phone,
} }
return request( return request('POST', `https://music.163.com/weapi/sms/captcha/sent`, data, {
'POST', crypto: 'weapi',
`https://music.163.com/weapi/sms/captcha/sent`, cookie: query.cookie,
data, proxy: query.proxy,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } realIP: query.realIP,
) })
} }
...@@ -4,12 +4,17 @@ module.exports = (query, request) => { ...@@ -4,12 +4,17 @@ module.exports = (query, request) => {
const data = { const data = {
ctcode: query.ctcode || '86', ctcode: query.ctcode || '86',
cellphone: query.phone, cellphone: query.phone,
captcha: query.captcha captcha: query.captcha,
} }
return request( return request(
'POST', 'POST',
`https://music.163.com/weapi/sms/captcha/verify`, `https://music.163.com/weapi/sms/captcha/verify`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
cellphone: query.phone, cellphone: query.phone,
countrycode: query.countrycode countrycode: query.countrycode,
}; }
return request( return request(
'POST', 'POST',
`http://music.163.com/eapi/cellphone/existence/check`, `http://music.163.com/eapi/cellphone/existence/check`,
...@@ -13,7 +13,8 @@ module.exports = (query, request) => { ...@@ -13,7 +13,8 @@ module.exports = (query, request) => {
crypto: 'eapi', crypto: 'eapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
url: '/api/cellphone/existence/check' url: '/api/cellphone/existence/check',
realIP: query.realIP,
} }
); )
}; }
...@@ -3,26 +3,31 @@ ...@@ -3,26 +3,31 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
ids: '[' + parseInt(query.id) + ']', ids: '[' + parseInt(query.id) + ']',
br: parseInt(query.br || 999000) br: parseInt(query.br || 999000),
} }
return request( return request(
'POST', `https://music.163.com/weapi/song/enhance/player/url`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/song/enhance/player/url`,
) data,
.then(response => { {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
).then((response) => {
let playable = false let playable = false
if(response.body.code == 200){ if (response.body.code == 200) {
if(response.body.data[0].code == 200){ if (response.body.data[0].code == 200) {
playable = true playable = true
} }
} }
if(playable){ if (playable) {
response.body = {success: true, message: 'ok'} response.body = { success: true, message: 'ok' }
return response return response
} } else {
else{
response.status = 404 response.status = 404
response.body = {success: false, message: '亲爱的,暂无版权'} response.body = { success: false, message: '亲爱的,暂无版权' }
return Promise.reject(response) return Promise.reject(response)
} }
}) })
......
...@@ -5,7 +5,7 @@ module.exports = (query, request) => { ...@@ -5,7 +5,7 @@ module.exports = (query, request) => {
query.t = { query.t = {
1: 'add', 1: 'add',
0: 'delete', 0: 'delete',
2: 'reply' 2: 'reply',
}[query.t] }[query.t]
query.type = { query.type = {
0: 'R_SO_4_', // 歌曲 0: 'R_SO_4_', // 歌曲
...@@ -14,25 +14,30 @@ module.exports = (query, request) => { ...@@ -14,25 +14,30 @@ module.exports = (query, request) => {
3: 'R_AL_3_', // 专辑 3: 'R_AL_3_', // 专辑
4: 'A_DJ_1_', // 电台, 4: 'A_DJ_1_', // 电台,
5: 'R_VI_62_', // 视频 5: 'R_VI_62_', // 视频
6: 'A_EV_2_' // 动态 6: 'A_EV_2_', // 动态
}[query.type] }[query.type]
const data = { const data = {
threadId: query.type + query.id threadId: query.type + query.id,
} }
if(query.type == 'A_EV_2_'){ if (query.type == 'A_EV_2_') {
data.threadId = query.threadId data.threadId = query.threadId
} }
if(query.t == 'add') if (query.t == 'add') data.content = query.content
data.content = query.content else if (query.t == 'delete') data.commentId = query.commentId
else if(query.t == 'delete')
data.commentId = query.commentId
else if (query.t == 'reply') { else if (query.t == 'reply') {
data.commentId = query.commentId data.commentId = query.commentId
data.content = query.content data.content = query.content
} }
return request( return request(
'POST', `https://music.163.com/weapi/resource/comments/${query.t}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/resource/comments/${query.t}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -6,10 +6,17 @@ module.exports = (query, request) => { ...@@ -6,10 +6,17 @@ module.exports = (query, request) => {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -6,10 +6,17 @@ module.exports = (query, request) => { ...@@ -6,10 +6,17 @@ module.exports = (query, request) => {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -4,12 +4,17 @@ module.exports = (query, request) => { ...@@ -4,12 +4,17 @@ module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
}; }
return request( return request(
'POST', 'POST',
`https://music.163.com/weapi/v1/resource/comments/${query.threadId}`, `https://music.163.com/weapi/v1/resource/comments/${query.threadId}`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
); crypto: 'weapi',
}; cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
)
}
...@@ -8,16 +8,23 @@ module.exports = (query, request) => { ...@@ -8,16 +8,23 @@ module.exports = (query, request) => {
2: 'A_PL_0_', // 歌单 2: 'A_PL_0_', // 歌单
3: 'R_AL_3_', // 专辑 3: 'R_AL_3_', // 专辑
4: 'A_DJ_1_', // 电台, 4: 'A_DJ_1_', // 电台,
5: 'R_VI_62_' // 视频 5: 'R_VI_62_', // 视频
}[query.type] }[query.type]
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -6,6 +6,11 @@ module.exports = (query, request) => { ...@@ -6,6 +6,11 @@ module.exports = (query, request) => {
'POST', 'POST',
`https://music.163.com/api/comment/hotwall/list/get`, `https://music.163.com/api/comment/hotwall/list/get`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
query.t = (query.t == 1 ? 'like' : 'unlike') query.t = query.t == 1 ? 'like' : 'unlike'
query.type = { query.type = {
0: 'R_SO_4_', // 歌曲 0: 'R_SO_4_', // 歌曲
1: 'R_MV_5_', // MV 1: 'R_MV_5_', // MV
...@@ -10,17 +10,24 @@ module.exports = (query, request) => { ...@@ -10,17 +10,24 @@ module.exports = (query, request) => {
3: 'R_AL_3_', // 专辑 3: 'R_AL_3_', // 专辑
4: 'A_DJ_1_', // 电台, 4: 'A_DJ_1_', // 电台,
5: 'R_VI_62_', // 视频 5: 'R_VI_62_', // 视频
6: 'A_EV_2_' // 动态 6: 'A_EV_2_', // 动态
}[query.type] }[query.type]
const data = { const data = {
threadId: query.type + query.id, threadId: query.type + query.id,
commentId: query.cid commentId: query.cid,
} }
if(query.type == 'A_EV_2_'){ if (query.type == 'A_EV_2_') {
data.threadId = query.threadId data.threadId = query.threadId
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/comment/${query.t}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/comment/${query.t}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
// 歌曲评论 // 歌曲评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc'; query.cookie.os = 'pc'
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
}; }
return request( return request(
'POST', 'POST',
`https://music.163.com/api/v1/resource/comments/R_SO_4_${query.id}`, `https://music.163.com/api/v1/resource/comments/R_SO_4_${query.id}`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
); crypto: 'weapi',
}; cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
)
}
...@@ -6,10 +6,17 @@ module.exports = (query, request) => { ...@@ -6,10 +6,17 @@ module.exports = (query, request) => {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -6,10 +6,17 @@ module.exports = (query, request) => { ...@@ -6,10 +6,17 @@ module.exports = (query, request) => {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -6,10 +6,17 @@ module.exports = (query, request) => { ...@@ -6,10 +6,17 @@ module.exports = (query, request) => {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0,
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,12 +2,15 @@ ...@@ -2,12 +2,15 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = {} const data = {}
return request( return request(
'POST', `http://interface3.music.163.com/eapi/lbs/countries/v1`, data, 'POST',
`http://interface3.music.163.com/eapi/lbs/countries/v1`,
data,
{ {
crypto: 'eapi', crypto: 'eapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
url: '/api/lbs/countries/v1' url: '/api/lbs/countries/v1',
realIP: query.realIP,
} }
) )
} }
...@@ -9,10 +9,12 @@ ...@@ -9,10 +9,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
type: query.type || 0 type: query.type || 0,
} }
return request( return request('POST', `https://music.163.com/weapi/point/dailyTask`, data, {
'POST', `https://music.163.com/weapi/point/dailyTask`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -4,15 +4,24 @@ module.exports = (query, request) => { ...@@ -4,15 +4,24 @@ module.exports = (query, request) => {
const data = { const data = {
business: 'Album', business: 'Album',
paymentMethod: query.payment, paymentMethod: query.payment,
digitalResources: JSON.stringify([{ digitalResources: JSON.stringify([
{
business: 'Album', business: 'Album',
resourceID: query.id, resourceID: query.id,
quantity: query.quantity, quantity: query.quantity,
}]), },
from: 'web' ]),
from: 'web',
} }
return request( return request(
'POST', `https://music.163.com/api/ordering/web/digital`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/ordering/web/digital`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -4,10 +4,17 @@ module.exports = (query, request) => { ...@@ -4,10 +4,17 @@ module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true,
} }
return request( return request(
'POST', `https://music.163.com/api/digitalAlbum/purchased`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/digitalAlbum/purchased`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
// 电台banner // 电台banner
module.exports = (query, request) => { module.exports = (query, request) => {
const data = {}; const data = {}
query.cookie.os = 'pc'; query.cookie.os = 'pc'
return request( return request(
'POST', 'POST',
`http://music.163.com/weapi/djradio/banner/get`, `http://music.163.com/weapi/djradio/banner/get`,
{}, {},
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
); crypto: 'weapi',
}; cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
)
}
// 电台非热门类型 // 电台非热门类型
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `http://music.163.com/weapi/djradio/category/excludehot`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `http://music.163.com/weapi/djradio/category/excludehot`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
}; }
\ No newline at end of file
// 电台推荐类型 // 电台推荐类型
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `http://music.163.com/weapi/djradio/home/category/recommend`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `http://music.163.com/weapi/djradio/home/category/recommend`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
}; }
\ No newline at end of file
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/djradio/category/get`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/djradio/category/get`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,10 +2,12 @@ ...@@ -2,10 +2,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.rid id: query.rid,
} }
return request( return request('POST', `https://music.163.com/weapi/djradio/get`, data, {
'POST', `https://music.163.com/weapi/djradio/get`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -3,10 +3,12 @@ ...@@ -3,10 +3,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0 offset: query.offset || 0,
} }
return request( return request('POST', `https://music.163.com/weapi/djradio/hot/v1`, data, {
'POST', `https://music.163.com/weapi/djradio/hot/v1`, data, crypto: 'weapi',
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -3,10 +3,17 @@ ...@@ -3,10 +3,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0 offset: query.offset || 0,
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -5,12 +5,17 @@ module.exports = (query, request) => { ...@@ -5,12 +5,17 @@ module.exports = (query, request) => {
radioId: query.rid, radioId: query.rid,
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
asc: toBoolean(query.asc) asc: toBoolean(query.asc),
} }
return request( return request(
'POST', 'POST',
`https://music.163.com/weapi/dj/program/byradio`, `https://music.163.com/weapi/dj/program/byradio`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,10 +2,17 @@ ...@@ -2,10 +2,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id id: query.id,
} }
return request( return request(
'POST', `https://music.163.com/weapi/dj/program/detail`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/dj/program/detail`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -3,10 +3,12 @@ ...@@ -3,10 +3,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 100, limit: query.limit || 100,
offset: query.offset || 0 offset: query.offset || 0,
} }
return request( return request('POST', `https://music.163.com/api/program/toplist/v1`, data, {
'POST', `https://music.163.com/api/program/toplist/v1`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
// 电台24小时节目榜 // 电台24小时节目榜
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 100 limit: query.limit || 100,
// 不支持 offset // 不支持 offset
} }
return request( return request(
'POST', `https://music.163.com/api/djprogram/toplist/hours`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/djprogram/toplist/hours`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -4,10 +4,12 @@ module.exports = (query, request) => { ...@@ -4,10 +4,12 @@ module.exports = (query, request) => {
const data = { const data = {
cateId: query.cateId, cateId: query.cateId,
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0 offset: query.offset || 0,
} }
return request( return request('POST', `https://music.163.com/api/djradio/hot`, data, {
'POST', `https://music.163.com/api/djradio/hot`, data, crypto: 'weapi',
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/djradio/recommend/v1`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/djradio/recommend/v1`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -25,10 +25,17 @@ ...@@ -25,10 +25,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
cateId: query.type cateId: query.type,
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/recommend`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/djradio/recommend`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
// 订阅与取消电台 // 订阅与取消电台
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = query.t == 1 ? 'sub' : 'unsub'
const data = { const data = {
id: query.rid id: query.rid,
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/${query.t}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/djradio/${query.t}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -4,10 +4,17 @@ module.exports = (query, request) => { ...@@ -4,10 +4,17 @@ module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true,
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/get/subed`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/djradio/get/subed`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,10 +2,17 @@ ...@@ -2,10 +2,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
page: query.page || 0 page: query.page || 0,
}; }
return request( return request(
'POST', `http://music.163.com/weapi/djradio/home/today/perfered`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `http://music.163.com/weapi/djradio/home/today/perfered`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
}; }
\ No newline at end of file
// 新晋电台榜/热门电台榜 // 新晋电台榜/热门电台榜
const typeMap = { const typeMap = {
'new': 0, new: 0,
'hot': 1 hot: 1,
} }
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 100, limit: query.limit || 100,
offset: query.offset || 0, offset: query.offset || 0,
type: typeMap[query.type || 'new'] || '0' //0为新晋,1为热门 type: typeMap[query.type || 'new'] || '0', //0为新晋,1为热门
} }
return request( return request('POST', `https://music.163.com/api/djradio/toplist`, data, {
'POST', `https://music.163.com/api/djradio/toplist`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 100 limit: query.limit || 100,
// 不支持 offset // 不支持 offset
} }
return request( return request('POST', `https://music.163.com/api/dj/toplist/hours`, data, {
'POST', `https://music.163.com/api/dj/toplist/hours`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -2,10 +2,17 @@ ...@@ -2,10 +2,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 100, limit: query.limit || 100,
offset: query.offset || 0 offset: query.offset || 0,
} }
return request( return request(
'POST', `https://music.163.com/api/dj/toplist/newcomer`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/dj/toplist/newcomer`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
// 付费精品 // 付费精品
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 100 limit: query.limit || 100,
// 不支持 offset // 不支持 offset
} }
return request( return request(
'POST', `https://music.163.com/api/djradio/toplist/pay`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/djradio/toplist/pay`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 100 limit: query.limit || 100,
// 不支持 offset // 不支持 offset
} }
return request( return request('POST', `https://music.163.com/api/dj/toplist/popular`, data, {
'POST', `https://music.163.com/api/dj/toplist/popular`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -2,11 +2,13 @@ ...@@ -2,11 +2,13 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
'pagesize': query.pagesize || 20, pagesize: query.pagesize || 20,
'lasttime': query.lasttime || -1 lasttime: query.lasttime || -1,
} }
return request( return request('POST', `https://music.163.com/weapi/v1/event/get`, data, {
'POST', `https://music.163.com/weapi/v1/event/get`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -4,8 +4,10 @@ module.exports = (query, request) => { ...@@ -4,8 +4,10 @@ module.exports = (query, request) => {
const data = { const data = {
id: query.evId, id: query.evId,
} }
return request( return request('POST', `https://music.163.com/eapi/event/delete`, data, {
'POST', `https://music.163.com/eapi/event/delete`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
// 转发动态 // 转发动态
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc'; query.cookie.os = 'pc'
const data = { const data = {
forwards: query.forwards, forwards: query.forwards,
id: query.evId, id: query.evId,
eventUserId: query.uid eventUserId: query.uid,
}; }
return request('POST', `https://music.163.com/weapi/event/forward`, data, { return request('POST', `https://music.163.com/weapi/event/forward`, data, {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
}); realIP: query.realIP,
}; })
}
...@@ -2,10 +2,19 @@ ...@@ -2,10 +2,19 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
songId: query.id songId: query.id,
} }
return request( return request(
'POST', `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${query.id}&time=${query.time || 25}`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${
query.id
}&time=${query.time || 25}`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,9 +2,16 @@ ...@@ -2,9 +2,16 @@
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
query.t = (query.t == 1 ? 'follow' : 'delfollow') query.t = query.t == 1 ? 'follow' : 'delfollow'
return request( return request(
'POST', `https://music.163.com/weapi/user/${query.t}/${query.id}`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/user/${query.t}/${query.id}`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,10 +2,16 @@ ...@@ -2,10 +2,16 @@
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'ios' query.cookie.os = 'ios'
const data = { const data = {}
}
return request( return request(
'POST', `https://music.163.com/api/discovery/recommend/songs/history/recent`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/discovery/recommend/songs/history/recent`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -6,7 +6,14 @@ module.exports = (query, request) => { ...@@ -6,7 +6,14 @@ module.exports = (query, request) => {
date: query.date || '', date: query.date || '',
} }
return request( return request(
'POST', `https://music.163.com/api/discovery/recommend/songs/history/detail`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/api/discovery/recommend/songs/history/detail`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,9 +2,16 @@ ...@@ -2,9 +2,16 @@
// 这个接口为移动端接口,首页-发现页,数据结构可以参考 https://github.com/hcanyz/flutter-netease-music-api/blob/master/lib/src/api/uncategorized/bean.dart#L259 HomeBlockPageWrap // 这个接口为移动端接口,首页-发现页,数据结构可以参考 https://github.com/hcanyz/flutter-netease-music-api/blob/master/lib/src/api/uncategorized/bean.dart#L259 HomeBlockPageWrap
// query.refresh 是否刷新数据 // query.refresh 是否刷新数据
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { 'refresh': query.refresh || true } const data = { refresh: query.refresh || true }
return request( return request(
'POST', `https://music.163.com/api/homepage/block/page`, data, 'POST',
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } `https://music.163.com/api/homepage/block/page`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -5,12 +5,15 @@ ...@@ -5,12 +5,15 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = {} const data = {}
return request( return request(
'POST', `https://music.163.com/eapi/homepage/dragon/ball/static`, data, 'POST',
`https://music.163.com/eapi/homepage/dragon/ball/static`,
data,
{ {
crypto: 'eapi', crypto: 'eapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
url: '/api/homepage/dragon/ball/static' url: '/api/homepage/dragon/ball/static',
realIP: query.realIP,
} }
) )
} }
...@@ -3,10 +3,12 @@ ...@@ -3,10 +3,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0 offset: query.offset || 0,
} }
return request( return request('POST', `http://music.163.com/weapi/act/hot`, data, {
'POST', `http://music.163.com/weapi/act/hot`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
}; realIP: query.realIP,
\ No newline at end of file })
}
...@@ -5,14 +5,19 @@ module.exports = (query, request) => { ...@@ -5,14 +5,19 @@ module.exports = (query, request) => {
query.like = query.like == 'false' ? false : true query.like = query.like == 'false' ? false : true
const data = { const data = {
trackId: query.id, trackId: query.id,
like: query.like like: query.like,
} }
return request( return request(
'POST', 'POST',
`https://music.163.com/weapi/radio/like?alg=${query.alg || `https://music.163.com/weapi/radio/like?alg=${
'itembased'}&trackId=${query.id}&time=${query.time || query.alg || 'itembased'
25}`, }&trackId=${query.id}&time=${query.time || 25}`,
data, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,10 +2,12 @@ ...@@ -2,10 +2,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
uid: query.uid uid: query.uid,
} }
return request( return request('POST', `https://music.163.com/weapi/song/like/get`, data, {
'POST', `https://music.163.com/weapi/song/like/get`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -6,21 +6,31 @@ module.exports = async (query, request) => { ...@@ -6,21 +6,31 @@ module.exports = async (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
username: query.email, username: query.email,
password: query.md5_password || crypto.createHash('md5').update(query.password).digest('hex'), password:
rememberLogin: 'true' query.md5_password ||
crypto.createHash('md5').update(query.password).digest('hex'),
rememberLogin: 'true',
} }
let result = await request( let result = await request(
'POST', `https://music.163.com/weapi/login`, data, 'POST',
{ crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy } `https://music.163.com/weapi/login`,
data,
{
crypto: 'weapi',
ua: 'pc',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
if (result.body.code === 502) { if (result.body.code === 502) {
return { return {
status: 200, status: 200,
body: { body: {
'msg': '账号或密码错误', msg: '账号或密码错误',
'code': 502, code: 502,
'message': '账号或密码错误' message: '账号或密码错误',
} },
} }
} }
if (result.body.code === 200) { if (result.body.code === 200) {
...@@ -28,9 +38,9 @@ module.exports = async (query, request) => { ...@@ -28,9 +38,9 @@ module.exports = async (query, request) => {
status: 200, status: 200,
body: { body: {
...result.body, ...result.body,
cookie: result.cookie.join(';') cookie: result.cookie.join(';'),
}, },
cookie: result.cookie cookie: result.cookie,
} }
} }
return result return result
......
...@@ -7,12 +7,22 @@ module.exports = async (query, request) => { ...@@ -7,12 +7,22 @@ module.exports = async (query, request) => {
const data = { const data = {
phone: query.phone, phone: query.phone,
countrycode: query.countrycode, countrycode: query.countrycode,
password: query.md5_password || crypto.createHash('md5').update(query.password).digest('hex'), password:
rememberLogin: 'true' query.md5_password ||
crypto.createHash('md5').update(query.password).digest('hex'),
rememberLogin: 'true',
} }
let result = await request( let result = await request(
'POST', `https://music.163.com/weapi/login/cellphone`, data, 'POST',
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/login/cellphone`,
data,
{
crypto: 'weapi',
ua: 'pc',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
if (result.body.code === 200) { if (result.body.code === 200) {
...@@ -20,9 +30,9 @@ module.exports = async (query, request) => { ...@@ -20,9 +30,9 @@ module.exports = async (query, request) => {
status: 200, status: 200,
body: { body: {
...result.body, ...result.body,
cookie: result.cookie.join(';') cookie: result.cookie.join(';'),
}, },
cookie: result.cookie cookie: result.cookie,
} }
} }
return result return result
......
...@@ -2,7 +2,15 @@ ...@@ -2,7 +2,15 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/login/token/refresh`, {}, 'POST',
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/login/token/refresh`,
{},
{
crypto: 'weapi',
ua: 'pc',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,19 +2,19 @@ ...@@ -2,19 +2,19 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'GET', `https://music.163.com`, {}, 'GET',
{cookie: query.cookie, proxy: query.proxy} `https://music.163.com`,
) {},
.then(response => { { cookie: query.cookie, proxy: query.proxy, realIP: query.realIP }
try{ ).then((response) => {
try {
let profile = eval(`(${/GUser\s*=\s*([^;]+);/.exec(response.body)[1]})`) let profile = eval(`(${/GUser\s*=\s*([^;]+);/.exec(response.body)[1]})`)
let bindings = eval(`(${/GBinds\s*=\s*([^;]+);/.exec(response.body)[1]})`) let bindings = eval(`(${/GBinds\s*=\s*([^;]+);/.exec(response.body)[1]})`)
response.body = {code: 200, profile: profile, bindings: bindings} response.body = { code: 200, profile: profile, bindings: bindings }
return response return response
} } catch (err) {
catch(err){
response.status = 301 response.status = 301
response.body = {code: 301} response.body = { code: 301 }
return Promise.reject(response) return Promise.reject(response)
} }
}) })
......
...@@ -2,7 +2,15 @@ ...@@ -2,7 +2,15 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/logout`, {}, 'POST',
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/logout`,
{},
{
crypto: 'weapi',
ua: 'pc',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
// 歌词 // 歌词
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc'; query.cookie.os = 'pc'
const data = { const data = {
id: query.id, id: query.id,
lv: -1, lv: -1,
kv: -1, kv: -1,
tv: -1 tv: -1,
} }
return request( return request('POST', `https://music.163.com/api/song/lyric`, data, {
'POST', crypto: 'linuxapi',
`https://music.163.com/api/song/lyric`, cookie: query.cookie,
data, proxy: query.proxy,
{ crypto: 'linuxapi', cookie: query.cookie, proxy: query.proxy } realIP: query.realIP,
) })
} }
...@@ -5,8 +5,8 @@ module.exports = (query, request) => { ...@@ -5,8 +5,8 @@ module.exports = (query, request) => {
beforeTime: query.before || '-1', beforeTime: query.before || '-1',
limit: query.limit || 30, limit: query.limit || 30,
total: 'true', total: 'true',
uid: query.uid uid: query.uid,
}; }
return request( return request(
'POST', 'POST',
...@@ -15,7 +15,8 @@ module.exports = (query, request) => { ...@@ -15,7 +15,8 @@ module.exports = (query, request) => {
{ {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
realIP: query.realIP,
} }
); )
}; }
...@@ -4,11 +4,12 @@ module.exports = (query, request) => { ...@@ -4,11 +4,12 @@ module.exports = (query, request) => {
const data = { const data = {
offset: query.offset || 0, offset: query.offset || 0,
limit: query.limit || 30, limit: query.limit || 30,
total: 'true' total: 'true',
}; }
return request('POST', `https://music.163.com/api/forwards/get`, data, { return request('POST', `https://music.163.com/api/forwards/get`, data, {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
}); realIP: query.realIP,
}; })
}
...@@ -3,11 +3,12 @@ ...@@ -3,11 +3,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
time: query.lasttime || -1 time: query.lasttime || -1,
}; }
return request('POST', `https://music.163.com/api/msg/notices`, data, { return request('POST', `https://music.163.com/api/msg/notices`, data, {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
}); realIP: query.realIP,
}; })
}
...@@ -5,10 +5,11 @@ module.exports = (query, request) => { ...@@ -5,10 +5,11 @@ module.exports = (query, request) => {
offset: query.offset || 0, offset: query.offset || 0,
limit: query.limit || 30, limit: query.limit || 30,
total: 'true', total: 'true',
}; }
return request('POST', `https://music.163.com/api/msg/private/users`, data, { return request('POST', `https://music.163.com/api/msg/private/users`, data, {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
}); realIP: query.realIP,
}; })
}
...@@ -5,8 +5,8 @@ module.exports = (query, request) => { ...@@ -5,8 +5,8 @@ module.exports = (query, request) => {
userId: query.uid, userId: query.uid,
limit: query.limit || 30, limit: query.limit || 30,
time: query.before || 0, time: query.before || 0,
total: 'true' total: 'true',
}; }
return request( return request(
'POST', 'POST',
`https://music.163.com/api/msg/private/history`, `https://music.163.com/api/msg/private/history`,
...@@ -14,7 +14,8 @@ module.exports = (query, request) => { ...@@ -14,7 +14,8 @@ module.exports = (query, request) => {
{ {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
realIP: query.realIP,
} }
); )
}; }
...@@ -5,15 +5,16 @@ module.exports = (query, request) => { ...@@ -5,15 +5,16 @@ module.exports = (query, request) => {
tags: JSON.stringify({ tags: JSON.stringify({
地区: query.area || '全部', 地区: query.area || '全部',
类型: query.type || '全部', 类型: query.type || '全部',
排序: query.order || '上升最快' 排序: query.order || '上升最快',
}), }),
offset: query.offset || 0, offset: query.offset || 0,
total: 'true', total: 'true',
limit: query.limit || 30 limit: query.limit || 30,
}; }
return request('POST', `https://interface.music.163.com/api/mv/all`, data, { return request('POST', `https://interface.music.163.com/api/mv/all`, data, {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
}); realIP: query.realIP,
}; })
}
...@@ -2,10 +2,12 @@ ...@@ -2,10 +2,12 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.mvid id: query.mvid,
} }
return request( return request('POST', `https://music.163.com/api/v1/mv/detail`, data, {
'POST', `https://music.163.com/api/v1/mv/detail`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -2,11 +2,18 @@ ...@@ -2,11 +2,18 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
'threadid': `R_MV_5_${query.mvid}`, threadid: `R_MV_5_${query.mvid}`,
'composeliked': true composeliked: true,
} }
return request( return request(
'POST', `https://music.163.com/api/comment/commentthread/info`, data, 'POST',
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } `https://music.163.com/api/comment/commentthread/info`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
offset: query.offset || 0, offset: query.offset || 0,
limit: query.limit || 30 limit: query.limit || 30,
}; }
return request( return request(
'POST', 'POST',
`https://interface.music.163.com/api/mv/exclusive/rcmd`, `https://interface.music.163.com/api/mv/exclusive/rcmd`,
...@@ -12,7 +12,8 @@ module.exports = (query, request) => { ...@@ -12,7 +12,8 @@ module.exports = (query, request) => {
{ {
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
realIP: query.realIP,
} }
); )
}; }
...@@ -5,11 +5,17 @@ module.exports = (query, request) => { ...@@ -5,11 +5,17 @@ module.exports = (query, request) => {
// 'offset': query.offset || 0, // 'offset': query.offset || 0,
area: query.area || '', area: query.area || '',
limit: query.limit || 30, limit: query.limit || 30,
total: true total: true,
}; }
return request('POST', `https://interface.music.163.com/weapi/mv/first`, data, { return request(
'POST',
`https://interface.music.163.com/weapi/mv/first`,
data,
{
crypto: 'weapi', crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy,
}); realIP: query.realIP,
}; }
)
}
// 收藏与取消收藏MV // 收藏与取消收藏MV
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = query.t == 1 ? 'sub' : 'unsub'
const data = { const data = {
mvId: query.mvid, mvId: query.mvid,
mvIds: '["' + query.mvid + '"]' mvIds: '["' + query.mvid + '"]',
} }
return request( return request('POST', `https://music.163.com/weapi/mv/${query.t}`, data, {
'POST', `https://music.163.com/weapi/mv/${query.t}`, data, crypto: 'weapi',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} cookie: query.cookie,
) proxy: query.proxy,
realIP: query.realIP,
})
} }
...@@ -4,10 +4,17 @@ module.exports = (query, request) => { ...@@ -4,10 +4,17 @@ module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 25, limit: query.limit || 25,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true,
} }
return request( return request(
'POST', `https://music.163.com/weapi/cloudvideo/allvideo/sublist`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/cloudvideo/allvideo/sublist`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -3,10 +3,17 @@ ...@@ -3,10 +3,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id, id: query.id,
r: query.res || 1080 r: query.res || 1080,
} }
return request( return request(
'POST', `https://music.163.com/weapi/song/enhance/play/mv/url`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/song/enhance/play/mv/url`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/v1/radio/get`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/v1/radio/get`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -5,10 +5,17 @@ module.exports = (query, request) => { ...@@ -5,10 +5,17 @@ module.exports = (query, request) => {
limit: query.limit || 30, limit: query.limit || 30,
// offset: query.offset || 0, // offset: query.offset || 0,
total: true, total: true,
n: 1000 n: 1000,
} }
return request( return request(
'POST', `https://music.163.com/weapi/personalized/playlist`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/personalized/playlist`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/personalized/djprogram`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/personalized/djprogram`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,7 +2,14 @@ ...@@ -2,7 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/personalized/mv`, {}, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/personalized/mv`,
{},
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
...@@ -2,10 +2,17 @@ ...@@ -2,10 +2,17 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
type: 'recommend' type: 'recommend',
} }
return request( return request(
'POST', `https://music.163.com/weapi/personalized/newsong`, data, 'POST',
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} `https://music.163.com/weapi/personalized/newsong`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
}
) )
} }
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册