add eslint

This commit is contained in:
binaryify 2019-08-16 10:57:31 +08:00
parent 629533e674
commit b98d611989
143 changed files with 1166 additions and 1125 deletions

37
.eslintrc.js Normal file
View 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
View File

@ -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}, 请及时更新`)
} }
} }
}) })

View File

@ -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'

View File

@ -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 }
); )
}; }

View File

@ -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
}); });

View File

@ -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)) {

View File

@ -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'

View File

@ -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 = {

View File

@ -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 }
); );
}; };

View File

@ -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 = {

View File

@ -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 }
); );
}; };

View File

@ -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 }
); );
}; };

View File

@ -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,

View File

@ -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
}); });

View File

@ -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,

View File

@ -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
} }

View File

@ -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
}); });

View File

@ -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
}); });

View File

@ -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
}); });

View File

@ -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
} }

View File

@ -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
}); });

View File

@ -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
} }

View File

@ -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
}); });

View File

@ -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,

View File

@ -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
}); });

View File

@ -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 }
); );
}; };

View File

@ -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,

View File

@ -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 }
); );
}; };

View File

@ -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 }
); );
}; };

View File

@ -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)
}) })

View File

@ -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 }
); );
}; };

View File

@ -2,14 +2,14 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
type: query.type || "song", // song,playlist,mv,djprogramdjradio type: query.type || 'song', // song,playlist,mv,djprogramdjradio
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 }
); );
}; };

View File

@ -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 + ']',

View File

@ -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) => {

View File

@ -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
}); });

View File

@ -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
}); });

View File

@ -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 }
); );
}; };

View File

@ -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 }
); );
}; };

View File

@ -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'
} }
); );
}; };

View File

@ -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,

View File

@ -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
} }
); );
}; };

View File

@ -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"

View File

@ -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)

View File

@ -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)

View File

@ -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)

View File

@ -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{

View File

@ -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)

View File

@ -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 === '海阔天空')

View File

@ -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()])
} }

View File

@ -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: [] }