mirror of
https://github.com/NeteaseCloudMusicApiEnhanced/api-enhanced.git
synced 2025-10-22 22:53:09 +00:00
add eslint
This commit is contained in:
parent
629533e674
commit
b98d611989
37
.eslintrc.js
Normal file
37
.eslintrc.js
Normal file
@ -0,0 +1,37 @@
|
||||
module.exports = {
|
||||
root: true,
|
||||
|
||||
parserOptions: {
|
||||
parser: 'babel-eslint',
|
||||
ecmaVersion: 2018,
|
||||
sourceType: 'module'
|
||||
},
|
||||
|
||||
env: {
|
||||
browser: true
|
||||
},
|
||||
|
||||
rules: {
|
||||
indent: ['error', 2, { SwitchCase: 1 }],
|
||||
'key-spacing': [
|
||||
2,
|
||||
{
|
||||
beforeColon: false,
|
||||
afterColon: true
|
||||
}
|
||||
],
|
||||
'no-octal': 2,
|
||||
'no-redeclare': 2,
|
||||
'comma-spacing': 2,
|
||||
'no-new-object': 2,
|
||||
'arrow-spacing': 2,
|
||||
quotes: [
|
||||
2,
|
||||
'single',
|
||||
{
|
||||
avoidEscape: true,
|
||||
allowTemplateLiterals: true
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
6
app.js
6
app.js
@ -3,7 +3,7 @@ const path = require('path')
|
||||
const express = require('express')
|
||||
const bodyParser = require('body-parser')
|
||||
const request = require('./util/request')
|
||||
const package = require('./package.json')
|
||||
const packageJSON = require('./package.json')
|
||||
const exec = require('child_process').exec
|
||||
const cache = require('apicache').middleware
|
||||
|
||||
@ -11,8 +11,8 @@ const cache = require('apicache').middleware
|
||||
exec('npm info NeteaseCloudMusicApi version', (err, stdout, stderr) => {
|
||||
if(!err){
|
||||
let version = stdout.trim()
|
||||
if(package.version < version){
|
||||
console.log(`最新版本: ${version}, 当前版本: ${package.version}, 请及时更新`)
|
||||
if(packageJSON.version < version){
|
||||
console.log(`最新版本: ${version}, 当前版本: ${packageJSON.version}, 请及时更新`)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
@ -5,11 +5,11 @@ module.exports = (query, request) => {
|
||||
nickname: query.nickname
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`http://music.163.com/eapi/activate/initProfile`,
|
||||
data,
|
||||
{
|
||||
crypto: "eapi",
|
||||
crypto: 'eapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy,
|
||||
url: '/api/activate/initProfile'
|
||||
|
@ -2,11 +2,11 @@
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.id
|
||||
};
|
||||
}
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/api/album/detail/dynamic`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
)
|
||||
}
|
||||
|
@ -5,8 +5,8 @@ module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.id
|
||||
};
|
||||
return request("POST", `https://music.163.com/api/album/${query.t}`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://music.163.com/api/album/${query.t}`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -1,6 +1,6 @@
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
"e_r": true
|
||||
'e_r': true
|
||||
};
|
||||
Object.keys(query).forEach(i => {
|
||||
if (/^\/api\//.test(i)) {
|
||||
|
@ -5,11 +5,11 @@ module.exports = (query, request) => {
|
||||
cellphone: query.phone
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`http://music.163.com/eapi/cellphone/existence/check`,
|
||||
data,
|
||||
{
|
||||
crypto: "eapi",
|
||||
crypto: 'eapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy,
|
||||
url: '/api/cellphone/existence/check'
|
||||
|
@ -9,7 +9,7 @@ module.exports = (query, request) => {
|
||||
2: 'A_PL_0_', // 歌单
|
||||
3: 'R_AL_3_', // 专辑
|
||||
4: 'A_DJ_1_', // 电台,
|
||||
5: 'R_VI_62_',// 视频
|
||||
5: 'R_VI_62_', // 视频
|
||||
6: 'A_EV_2_' // 动态
|
||||
}[query.type]
|
||||
const data = {
|
||||
|
@ -5,9 +5,9 @@ module.exports = (query, request) => {
|
||||
beforeTime: query.before|| 0
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/weapi/v1/resource/comments/${query.threadId}`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -9,7 +9,7 @@ module.exports = (query, request) => {
|
||||
2: 'A_PL_0_', // 歌单
|
||||
3: 'R_AL_3_', // 专辑
|
||||
4: 'A_DJ_1_', // 电台,
|
||||
5: 'R_VI_62_',// 视频
|
||||
5: 'R_VI_62_', // 视频
|
||||
6: 'A_EV_2_' // 动态
|
||||
}[query.type]
|
||||
const data = {
|
||||
|
@ -1,7 +1,7 @@
|
||||
// 歌曲评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = "pc";
|
||||
query.cookie.os = 'pc';
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
@ -9,9 +9,9 @@ module.exports = (query, request) => {
|
||||
beforeTime: query.before|| 0
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/api/v1/resource/comments/R_SO_4_${query.id}`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -3,9 +3,9 @@
|
||||
module.exports = (query, request) => {
|
||||
const data = {};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`http://music.163.com/weapi/djradio/banner/get`,
|
||||
{},
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -2,8 +2,8 @@
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data={
|
||||
"pagesize": query.pagesize || 20,
|
||||
"lasttime": query.lasttime || -1
|
||||
'pagesize': query.pagesize || 20,
|
||||
'lasttime': query.lasttime || -1
|
||||
}
|
||||
return request(
|
||||
'POST', `https://music.163.com/weapi/v1/event/get`, data,
|
||||
|
@ -1,14 +1,14 @@
|
||||
// 转发动态
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = "pc";
|
||||
query.cookie.os = 'pc';
|
||||
const data = {
|
||||
forwards: query.forwards,
|
||||
id: query.evId,
|
||||
eventUserId: query.uid
|
||||
};
|
||||
return request("POST", `https://music.163.com/weapi/event/forward`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://music.163.com/weapi/event/forward`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data={
|
||||
id:query.id
|
||||
id: query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `https://music.163.com/weapi/song/lyric?lv=-1&kv=-1&tv=-1`, data,
|
||||
|
@ -2,18 +2,18 @@
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
beforeTime: query.before || "-1",
|
||||
beforeTime: query.before || '-1',
|
||||
limit: query.limit || 30,
|
||||
total: "true",
|
||||
total: 'true',
|
||||
uid: query.uid
|
||||
};
|
||||
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/api/v1/user/comments/${query.uid}`,
|
||||
data,
|
||||
{
|
||||
crypto: "weapi",
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
}
|
||||
|
@ -4,10 +4,10 @@ module.exports = (query, request) => {
|
||||
const data = {
|
||||
offset: query.offset || 0,
|
||||
limit: query.limit || 30,
|
||||
total: "true"
|
||||
total: 'true'
|
||||
};
|
||||
return request("POST", `https://music.163.com/api/forwards/get`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://music.163.com/api/forwards/get`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -4,10 +4,10 @@ module.exports = (query, request) => {
|
||||
const data = {
|
||||
offset: query.offset || 0,
|
||||
limit: query.limit || 30,
|
||||
total: "true",
|
||||
total: 'true',
|
||||
};
|
||||
return request("POST", `https://music.163.com/api/msg/notices`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://music.163.com/api/msg/notices`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -4,10 +4,10 @@ module.exports = (query, request) => {
|
||||
const data = {
|
||||
offset: query.offset || 0,
|
||||
limit: query.limit || 30,
|
||||
total: "true",
|
||||
total: 'true',
|
||||
};
|
||||
return request("POST", `https://music.163.com/api/msg/private/users`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://music.163.com/api/msg/private/users`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -5,14 +5,14 @@ module.exports = (query, request) => {
|
||||
userId: query.uid,
|
||||
offset: query.offset || 0,
|
||||
limit: query.limit || 30,
|
||||
total: "true"
|
||||
total: 'true'
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/api/msg/private/history`,
|
||||
data,
|
||||
{
|
||||
crypto: "weapi",
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
}
|
||||
|
@ -3,16 +3,16 @@
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
tags: JSON.stringify({
|
||||
地区: query.area || "全部",
|
||||
类型: query.type || "全部",
|
||||
排序: query.order || "上升最快"
|
||||
地区: query.area || '全部',
|
||||
类型: query.type || '全部',
|
||||
排序: query.order || '上升最快'
|
||||
}),
|
||||
offset: query.offset || 0,
|
||||
total: "true",
|
||||
total: 'true',
|
||||
limit: query.limit || 30
|
||||
};
|
||||
return request("POST", `https://interface.music.163.com/api/mv/all`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://interface.music.163.com/api/mv/all`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -6,11 +6,11 @@ module.exports = (query, request) => {
|
||||
limit: query.limit || 30
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://interface.music.163.com/api/mv/exclusive/rcmd`,
|
||||
data,
|
||||
{
|
||||
crypto: "weapi",
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
}
|
||||
|
@ -3,12 +3,12 @@
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
// 'offset': query.offset || 0,
|
||||
area: query.area || "",
|
||||
area: query.area || '',
|
||||
limit: query.limit || 30,
|
||||
total: true
|
||||
};
|
||||
return request("POST", `https://interface.music.163.com/weapi/mv/first`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://interface.music.163.com/weapi/mv/first`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
type: "recommend"
|
||||
type: 'recommend'
|
||||
}
|
||||
return request(
|
||||
'POST', `https://music.163.com/weapi/personalized/newsong`, data,
|
||||
|
@ -1,13 +1,13 @@
|
||||
// 创建歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = "pc";
|
||||
query.cookie.os = 'pc';
|
||||
const data = {
|
||||
name: query.name,
|
||||
privacy: query.privacy //0 为普通歌单,10 为隐私歌单
|
||||
};
|
||||
return request("POST", `https://music.163.com/weapi/playlist/create`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://music.163.com/weapi/playlist/create`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -5,9 +5,9 @@ module.exports = (query, request) => {
|
||||
offset: query.offset || 0
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/weapi/playlist/subscribers`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -5,9 +5,9 @@ module.exports = (query, request) => {
|
||||
query.desc = query.desc || ''
|
||||
query.tags = query.tags || ''
|
||||
const data = {
|
||||
"/api/playlist/desc/update": `{"id":${query.id},"desc":"${query.desc}"}`,
|
||||
"/api/playlist/tags/update": `{"id":${query.id},"tags":"${query.tags}"}`,
|
||||
"/api/playlist/update/name": `{"id":${query.id},"name":"${query.name}"}`
|
||||
'/api/playlist/desc/update': `{"id":${query.id},"desc":"${query.desc}"}`,
|
||||
'/api/playlist/tags/update': `{"id":${query.id},"tags":"${query.tags}"}`,
|
||||
'/api/playlist/update/name': `{"id":${query.id},"name":"${query.name}"}`
|
||||
}
|
||||
return request(
|
||||
'POST', `https://music.163.com/weapi/batch`, data,
|
||||
|
@ -3,15 +3,15 @@
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
songId: query.id,
|
||||
type: "fromPlayOne",
|
||||
type: 'fromPlayOne',
|
||||
playlistId: query.pid,
|
||||
startMusicId: query.sid || query.id,
|
||||
count: query.count || 1
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`http://music.163.com/weapi/playmode/intelligence/list`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -5,12 +5,12 @@ module.exports = (query, request) => {
|
||||
captcha: query.captcha,
|
||||
phone: query.phone,
|
||||
oldcaptcha: query.oldcaptcha,
|
||||
ctcode: query.ctcode || "86"
|
||||
ctcode: query.ctcode || '86'
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/api/user/replaceCellphone`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -15,7 +15,7 @@ module.exports = (query, request) => {
|
||||
userId: result[4].slice('/user/home?id='.length),
|
||||
nickname: result[5]
|
||||
},
|
||||
coverImgUrl: result[1].slice(0,-('?param=50y50'.length)),
|
||||
coverImgUrl: result[1].slice(0, -('?param=50y50'.length)),
|
||||
name: result[3],
|
||||
id: result[2].slice('/playlist?id='.length)
|
||||
})
|
||||
|
@ -3,9 +3,9 @@ module.exports = (query, request) => {
|
||||
const data = {
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/weapi/hotsearchlist/get`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -2,14 +2,14 @@
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
type: query.type || "song", // song,playlist,mv,djprogram,djradio
|
||||
msg: query.msg || "",
|
||||
id: query.id || ""
|
||||
type: query.type || 'song', // song,playlist,mv,djprogram,djradio
|
||||
msg: query.msg || '',
|
||||
id: query.id || ''
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`http://music.163.com/weapi/share/friends/resource`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -3,7 +3,7 @@
|
||||
const crypto = require('crypto')
|
||||
|
||||
module.exports = (query, request) => {
|
||||
if(!('MUSIC_U' in query.cookie)) query.cookie._ntes_nuid = crypto.randomBytes(16).toString("hex")
|
||||
if(!('MUSIC_U' in query.cookie)) query.cookie._ntes_nuid = crypto.randomBytes(16).toString('hex')
|
||||
query.cookie.os = 'pc'
|
||||
const data = {
|
||||
ids: '[' + query.id + ']',
|
||||
|
@ -1,30 +1,30 @@
|
||||
// 排行榜
|
||||
|
||||
const topList = {
|
||||
0: "3779629", //云音乐新歌榜
|
||||
1: "3778678", //云音乐热歌榜
|
||||
2: "2884035", ///云音乐原创榜
|
||||
3: "19723756", //云音乐飙升榜
|
||||
4: "10520166", //云音乐电音榜
|
||||
5: "180106", //UK排行榜周榜
|
||||
6: "60198", //美国Billboard周榜
|
||||
7: "21845217", //KTV嗨榜
|
||||
8: "11641012", //iTunes榜
|
||||
9: "120001", //Hit FM Top榜
|
||||
10: "60131", //日本Oricon周榜
|
||||
11: "3733003", //韩国Melon排行榜周榜
|
||||
12: "60255", //韩国Mnet排行榜周榜
|
||||
13: "46772709", //韩国Melon原声周榜
|
||||
14: "112504", //中国TOP排行榜(港台榜)
|
||||
15: "64016", //中国TOP排行榜(内地榜)
|
||||
16: "10169002", //香港电台中文歌曲龙虎榜
|
||||
17: "4395559", //华语金曲榜
|
||||
18: "1899724", //中国嘻哈榜
|
||||
19: "27135204", //法国 NRJ EuroHot 30周榜
|
||||
20: "112463", //台湾Hito排行榜
|
||||
21: "3812895", //Beatport全球电子舞曲榜
|
||||
22: "71385702", //云音乐ACG音乐榜
|
||||
23: "991319590" //云音乐嘻哈榜
|
||||
0: '3779629', //云音乐新歌榜
|
||||
1: '3778678', //云音乐热歌榜
|
||||
2: '2884035', ///云音乐原创榜
|
||||
3: '19723756', //云音乐飙升榜
|
||||
4: '10520166', //云音乐电音榜
|
||||
5: '180106', //UK排行榜周榜
|
||||
6: '60198', //美国Billboard周榜
|
||||
7: '21845217', //KTV嗨榜
|
||||
8: '11641012', //iTunes榜
|
||||
9: '120001', //Hit FM Top榜
|
||||
10: '60131', //日本Oricon周榜
|
||||
11: '3733003', //韩国Melon排行榜周榜
|
||||
12: '60255', //韩国Mnet排行榜周榜
|
||||
13: '46772709', //韩国Melon原声周榜
|
||||
14: '112504', //中国TOP排行榜(港台榜)
|
||||
15: '64016', //中国TOP排行榜(内地榜)
|
||||
16: '10169002', //香港电台中文歌曲龙虎榜
|
||||
17: '4395559', //华语金曲榜
|
||||
18: '1899724', //中国嘻哈榜
|
||||
19: '27135204', //法国 NRJ EuroHot 30周榜
|
||||
20: '112463', //台湾Hito排行榜
|
||||
21: '3812895', //Beatport全球电子舞曲榜
|
||||
22: '71385702', //云音乐ACG音乐榜
|
||||
23: '991319590' //云音乐嘻哈榜
|
||||
}
|
||||
|
||||
module.exports = (query, request) => {
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
area: query.area || "",
|
||||
area: query.area || '',
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
};
|
||||
return request("POST", `https://music.163.com/weapi/mv/toplist`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `https://music.163.com/weapi/mv/toplist`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -4,8 +4,8 @@ module.exports = (query, request) => {
|
||||
const data = {
|
||||
songIds: [query.id]
|
||||
};
|
||||
return request("POST", `http://music.163.com/weapi/cloud/del`, data, {
|
||||
crypto: "weapi",
|
||||
return request('POST', `http://music.163.com/weapi/cloud/del`, data, {
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
});
|
||||
|
@ -1,14 +1,14 @@
|
||||
// 云盘数据详情
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const id = query.id.replace(/\s/g, "").split(",");
|
||||
const id = query.id.replace(/\s/g, '').split(',');
|
||||
const data = {
|
||||
songIds: id
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/weapi/v1/cloud/get/byids`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -8,9 +8,9 @@ module.exports = (query, request) => {
|
||||
total: false
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/weapi/event/get/${query.uid}`,
|
||||
data,
|
||||
{ crypto: "weapi", cookie: query.cookie, proxy: query.proxy }
|
||||
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
|
||||
);
|
||||
};
|
||||
|
@ -7,14 +7,14 @@ module.exports = (query, request) => {
|
||||
limit: query.limit || 30
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/eapi/user/getfolloweds/${query.uid}`,
|
||||
data,
|
||||
{
|
||||
crypto: "eapi",
|
||||
crypto: 'eapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy,
|
||||
url: "/api/user/getfolloweds"
|
||||
url: '/api/user/getfolloweds'
|
||||
}
|
||||
);
|
||||
};
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
avatarImgId: "0",
|
||||
avatarImgId: '0',
|
||||
birthday: query.birthday,
|
||||
city: query.city,
|
||||
gender: query.gender,
|
||||
|
@ -2,14 +2,14 @@ module.exports = (query, request) => {
|
||||
const data = {
|
||||
};
|
||||
return request(
|
||||
"POST",
|
||||
'POST',
|
||||
`https://music.163.com/api/cloudvideo/group/list`,
|
||||
data,
|
||||
{
|
||||
crypto: "weapi",
|
||||
crypto: 'weapi',
|
||||
cookie: query.cookie,
|
||||
proxy: query.proxy
|
||||
}
|
||||
);
|
||||
};
|
||||
};
|
||||
|
@ -4,7 +4,9 @@
|
||||
"description": "网易云音乐 NodeJS 版 API",
|
||||
"scripts": {
|
||||
"start": "node app.js",
|
||||
"test": "mocha -r intelli-espower-loader -t 20000 app.test.js --exit"
|
||||
"test": "mocha -r intelli-espower-loader -t 20000 app.test.js --exit",
|
||||
"lint-fix": "eslint --fix --ext .js app.js module/ util/ test/ "
|
||||
|
||||
},
|
||||
"keywords": [
|
||||
"网易云音乐",
|
||||
@ -21,6 +23,8 @@
|
||||
"request": "^2.88.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^6.1.0",
|
||||
"eslint-config-standard": "^13.0.1",
|
||||
"intelli-espower-loader": "^1.0.1",
|
||||
"mocha": "^6.1.4",
|
||||
"power-assert": "^1.6.1"
|
||||
|
@ -8,7 +8,7 @@ describe('测试获取歌手专辑列表是否正常', () => {
|
||||
id: 32311
|
||||
}
|
||||
|
||||
request.get({url: `${host}/album`,qs: qs}, (err, res, body) => {
|
||||
request.get({url: `${host}/album`, qs: qs}, (err, res, body) => {
|
||||
if (!err && res.statusCode == 200) {
|
||||
body = JSON.parse(body)
|
||||
assert(body.code === 200)
|
||||
|
@ -8,7 +8,7 @@ describe('测试获取评论是否正常', () => {
|
||||
id: 32311
|
||||
}
|
||||
|
||||
request.get({url: `${host}/comment/album`,qs: qs}, (err, res, body) => {
|
||||
request.get({url: `${host}/comment/album`, qs: qs}, (err, res, body) => {
|
||||
if (!err && res.statusCode == 200) {
|
||||
body = JSON.parse(body)
|
||||
assert(body.code === 200)
|
||||
|
@ -2,16 +2,16 @@ const assert = require('assert')
|
||||
const request = require('request')
|
||||
const host = global.host || 'http://localhost:3000'
|
||||
|
||||
console.log("注意: 测试登录需在 test/login.test.js 中填写账号密码!!!");
|
||||
console.log('注意: 测试登录需在 test/login.test.js 中填写账号密码!!!');
|
||||
|
||||
describe("测试登录是否正常", () => {
|
||||
it("手机登录 code 应该等于200", done => {
|
||||
describe('测试登录是否正常', () => {
|
||||
it('手机登录 code 应该等于200', done => {
|
||||
const qs = {
|
||||
phone: phone,
|
||||
password: password
|
||||
}
|
||||
|
||||
request.get({url: `${host}/login/cellphone`,qs: qs}, (err, res, body) => {
|
||||
request.get({url: `${host}/login/cellphone`, qs: qs}, (err, res, body) => {
|
||||
if (!err && res.statusCode == 200) {
|
||||
body = JSON.parse(body)
|
||||
assert(body.code === 200)
|
||||
|
@ -2,16 +2,16 @@ const assert = require('assert')
|
||||
const request = require('request')
|
||||
const host = global.host || 'http://localhost:3000'
|
||||
|
||||
describe("测试获取歌词是否正常", () => {
|
||||
it("数据应该有 lrc 字段", done => {
|
||||
describe('测试获取歌词是否正常', () => {
|
||||
it('数据应该有 lrc 字段', done => {
|
||||
const qs = {
|
||||
id: 347230
|
||||
}
|
||||
|
||||
request.get({url: `${host}/lyric`,qs: qs}, (err, res, body) => {
|
||||
request.get({url: `${host}/lyric`, qs: qs}, (err, res, body) => {
|
||||
if (!err && res.statusCode == 200) {
|
||||
body = JSON.parse(body)
|
||||
assert(typeof body.lrc !== "undefined")
|
||||
assert(typeof body.lrc !== 'undefined')
|
||||
done()
|
||||
}
|
||||
else{
|
||||
|
@ -2,14 +2,14 @@ const assert = require('assert')
|
||||
const request = require('request')
|
||||
const host = global.host || 'http://localhost:3000'
|
||||
|
||||
describe("测试获取歌曲是否正常", () => {
|
||||
it("歌曲的 url 不应该为空", done => {
|
||||
describe('测试获取歌曲是否正常', () => {
|
||||
it('歌曲的 url 不应该为空', done => {
|
||||
const qs = {
|
||||
id: 462791935,
|
||||
br: 999000
|
||||
}
|
||||
|
||||
request.get({url: `${host}/music/url`,qs: qs}, (err, res, body) => {
|
||||
request.get({url: `${host}/music/url`, qs: qs}, (err, res, body) => {
|
||||
if (!err && res.statusCode == 200) {
|
||||
body = JSON.parse(body)
|
||||
assert(!!body.data[0].url)
|
||||
|
@ -8,7 +8,7 @@ describe('测试搜索是否正常', () => {
|
||||
keywords: '海阔天空',
|
||||
type: 1
|
||||
}
|
||||
request.get({url: `${host}/search`,qs: qs}, (err, res, body) => {
|
||||
request.get({url: `${host}/search`, qs: qs}, (err, res, body) => {
|
||||
if (!err && res.statusCode == 200) {
|
||||
body = JSON.parse(body)
|
||||
assert(body.result.songs[0].name === '海阔天空')
|
||||
|
@ -8,7 +8,7 @@ const eapiKey = 'e82ckenh8dichen8'
|
||||
|
||||
const aesEncrypt = (buffer, mode, key, iv) => {
|
||||
const cipher = crypto.createCipheriv('aes-128-' + mode, key, iv)
|
||||
return Buffer.concat([cipher.update(buffer),cipher.final()])
|
||||
return Buffer.concat([cipher.update(buffer), cipher.final()])
|
||||
}
|
||||
|
||||
const rsaEncrypt = (buffer, key) => {
|
||||
@ -43,7 +43,7 @@ const eapi = (url, object) => {
|
||||
}
|
||||
|
||||
const decrypt = cipherBuffer => {
|
||||
const decipher = crypto.createDecipheriv('aes-128-ecb',eapiKey,'')
|
||||
const decipher = crypto.createDecipheriv('aes-128-ecb', eapiKey, '')
|
||||
return Buffer.concat([decipher.update(cipherBuffer), decipher.final()])
|
||||
}
|
||||
|
||||
|
@ -70,20 +70,20 @@ const createRequest = (method, url, data, options) => {
|
||||
const cookie = options.cookie || {};
|
||||
const csrfToken = cookie['__csrf'] || ''
|
||||
const header = {
|
||||
"osver": cookie.osver, //系统版本
|
||||
"deviceId": cookie.deviceId, //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7')
|
||||
"appver": cookie.appver || "6.1.1", // app版本
|
||||
"versioncode": cookie.versioncode || "140", //版本号
|
||||
"mobilename": cookie.mobilename, //设备model
|
||||
"buildver": cookie.buildver || Date.now().toString().substr(0, 10),
|
||||
"resolution": cookie.resolution || "1920x1080", //设备分辨率
|
||||
"__csrf": csrfToken,
|
||||
"os": cookie.os || 'android',
|
||||
"channel": cookie.channel,
|
||||
"requestId":`${Date.now()}_${Math.floor(Math.random() * 1000).toString().padStart(4, '0')}`
|
||||
'osver': cookie.osver, //系统版本
|
||||
'deviceId': cookie.deviceId, //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7')
|
||||
'appver': cookie.appver || '6.1.1', // app版本
|
||||
'versioncode': cookie.versioncode || '140', //版本号
|
||||
'mobilename': cookie.mobilename, //设备model
|
||||
'buildver': cookie.buildver || Date.now().toString().substr(0, 10),
|
||||
'resolution': cookie.resolution || '1920x1080', //设备分辨率
|
||||
'__csrf': csrfToken,
|
||||
'os': cookie.os || 'android',
|
||||
'channel': cookie.channel,
|
||||
'requestId': `${Date.now()}_${Math.floor(Math.random() * 1000).toString().padStart(4, '0')}`
|
||||
}
|
||||
if (cookie.MUSIC_U) header["MUSIC_U"] = cookie.MUSIC_U
|
||||
if (cookie.MUSIC_A) header["MUSIC_A"] = cookie.MUSIC_A
|
||||
if (cookie.MUSIC_U) header['MUSIC_U'] = cookie.MUSIC_U
|
||||
if (cookie.MUSIC_A) header['MUSIC_A'] = cookie.MUSIC_A
|
||||
headers['Cookie'] = Object.keys(header)
|
||||
.map(
|
||||
key =>
|
||||
@ -94,7 +94,7 @@ const createRequest = (method, url, data, options) => {
|
||||
.join('; ')
|
||||
data.header = header
|
||||
data = encrypt.eapi(options.url, data)
|
||||
url = url.replace(/\w*api/,'eapi')
|
||||
url = url.replace(/\w*api/, 'eapi')
|
||||
}
|
||||
|
||||
const answer = { status: 500, body: {}, cookie: [] }
|
||||
|
Loading…
x
Reference in New Issue
Block a user