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