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

88
app.js
View File

@ -3,44 +3,44 @@ 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
// version check // version check
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}, 请及时更新`)
}
} }
}
}) })
const app = express() const app = express()
// CORS // CORS
app.use((req, res, next) => { app.use((req, res, next) => {
if(req.path !== '/' && !req.path.includes('.')){ if(req.path !== '/' && !req.path.includes('.')){
res.header({ res.header({
'Access-Control-Allow-Credentials': true, 'Access-Control-Allow-Credentials': true,
'Access-Control-Allow-Origin': req.headers.origin || '*', 'Access-Control-Allow-Origin': req.headers.origin || '*',
'Access-Control-Allow-Headers': 'X-Requested-With', 'Access-Control-Allow-Headers': 'X-Requested-With',
'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS', 'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS',
'Content-Type': 'application/json; charset=utf-8' 'Content-Type': 'application/json; charset=utf-8'
}) })
} }
next() next()
}) })
// cookie parser // cookie parser
app.use((req, res, next) => { app.use((req, res, next) => {
req.cookies = {}, (req.headers.cookie || '').split(/\s*;\s*/).forEach(pair => { req.cookies = {}, (req.headers.cookie || '').split(/\s*;\s*/).forEach(pair => {
let crack = pair.indexOf('=') let crack = pair.indexOf('=')
if(crack < 1 || crack == pair.length - 1) return if(crack < 1 || crack == pair.length - 1) return
req.cookies[decodeURIComponent(pair.slice(0, crack)).trim()] = decodeURIComponent(pair.slice(crack + 1)).trim() req.cookies[decodeURIComponent(pair.slice(0, crack)).trim()] = decodeURIComponent(pair.slice(crack + 1)).trim()
}) })
next() next()
}) })
// body parser // body parser
@ -55,37 +55,37 @@ app.use(express.static(path.join(__dirname, 'public')))
// router // router
const special = { const special = {
'daily_signin.js': '/daily_signin', 'daily_signin.js': '/daily_signin',
'fm_trash.js': '/fm_trash', 'fm_trash.js': '/fm_trash',
'personal_fm.js': '/personal_fm' 'personal_fm.js': '/personal_fm'
} }
fs.readdirSync(path.join(__dirname, 'module')).reverse().forEach(file => { fs.readdirSync(path.join(__dirname, 'module')).reverse().forEach(file => {
if(!(/\.js$/i.test(file))) return if(!(/\.js$/i.test(file))) return
let route = (file in special) ? special[file] : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/') let route = (file in special) ? special[file] : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/')
let question = require(path.join(__dirname, 'module', file)) let question = require(path.join(__dirname, 'module', file))
app.use(route, (req, res) => { app.use(route, (req, res) => {
let query = Object.assign({}, req.query, req.body, {cookie: req.cookies}) let query = Object.assign({}, req.query, req.body, {cookie: req.cookies})
question(query, request) question(query, request)
.then(answer => { .then(answer => {
console.log('[OK]', decodeURIComponent(req.originalUrl)) console.log('[OK]', decodeURIComponent(req.originalUrl))
res.append('Set-Cookie', answer.cookie) res.append('Set-Cookie', answer.cookie)
res.status(answer.status).send(answer.body) res.status(answer.status).send(answer.body)
}) })
.catch(answer => { .catch(answer => {
console.log('[ERR]', decodeURIComponent(req.originalUrl)) console.log('[ERR]', decodeURIComponent(req.originalUrl))
if(answer.body.code =='301') answer.body.msg = '需要登录' if(answer.body.code =='301') answer.body.msg = '需要登录'
res.append('Set-Cookie', answer.cookie) res.append('Set-Cookie', answer.cookie)
res.status(answer.status).send(answer.body) res.status(answer.status).send(answer.body)
}) })
}) })
}) })
const port = process.env.PORT || 3000 const port = process.env.PORT || 3000
app.server = app.listen(port, () => { app.server = app.listen(port, () => {
console.log(`server running @ http://localhost:${port}`) console.log(`server running @ http://localhost:${port}`)
}) })
module.exports = app module.exports = app

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

@ -1,8 +1,8 @@
// 专辑内容 // 专辑内容
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/v1/album/${query.id}`, {}, 'POST', `https://music.163.com/weapi/v1/album/${query.id}`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

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

@ -1,8 +1,8 @@
// 最新专辑 // 最新专辑
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/api/discovery/newAlbum`, {}, 'POST', `https://music.163.com/api/discovery/newAlbum`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// 已收藏专辑列表 // 已收藏专辑列表
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = (query.t == 1 ? 'sub' : 'unsub')
const data = { const data = {
id: query.id id: query.id
}; };
return request("POST", `https://music.163.com/api/album/${query.t}`, data, { return request('POST', `https://music.163.com/api/album/${query.t}`, data, {
crypto: "weapi", crypto: 'weapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy proxy: query.proxy
}); });
}; };

View File

@ -1,13 +1,13 @@
// 已收藏专辑列表 // 已收藏专辑列表
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 25, limit: query.limit || 25,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/weapi/album/sublist`, data, 'POST', `https://music.163.com/weapi/album/sublist`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// 歌手专辑列表 // 歌手专辑列表
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/albums/${query.id}`, data, 'POST', `https://music.163.com/weapi/artist/albums/${query.id}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 歌手介绍 // 歌手介绍
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id id: query.id
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/introduction`, data, 'POST', `https://music.163.com/weapi/artist/introduction`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -23,15 +23,15 @@
*/ */
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
categoryCode: query.cat || '1001', categoryCode: query.cat || '1001',
initial: (query.initial || '').toUpperCase().charCodeAt() || '', initial: (query.initial || '').toUpperCase().charCodeAt() || '',
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', `https://music.163.com/weapi/artist/list`, data, 'POST', `https://music.163.com/weapi/artist/list`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,14 +1,14 @@
// 歌手相关MV // 歌手相关MV
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
artistId: query.id, artistId: query.id,
limit: query.limit, limit: query.limit,
offset: query.offset, offset: query.offset,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/mvs`, data, 'POST', `https://music.163.com/weapi/artist/mvs`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// 收藏与取消收藏歌手 // 收藏与取消收藏歌手
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = (query.t == 1 ? 'sub' : 'unsub')
const data = { const data = {
artistId: query.id, artistId: query.id,
artistIds: '[' + query.id + ']' artistIds: '[' + query.id + ']'
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/${query.t}`, data, 'POST', `https://music.163.com/weapi/artist/${query.t}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// 关注歌手列表 // 关注歌手列表
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 25, limit: query.limit || 25,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/weapi/artist/sublist`, data, 'POST', `https://music.163.com/weapi/artist/sublist`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 歌手单曲 // 歌手单曲
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/v1/artist/${query.id}`, {}, 'POST', `https://music.163.com/weapi/v1/artist/${query.id}`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,14 +1,14 @@
// 首页轮播图 // 首页轮播图
module.exports = (query, request) => { module.exports = (query, request) => {
const type = { const type = {
0: 'pc', 0: 'pc',
1: 'android', 1: 'android',
2: 'iphone', 2: 'iphone',
3: 'ipad' 3: 'ipad'
}[query.type || 0] || 'pc'; }[query.type || 0] || 'pc';
return request( return request(
'POST', `https://music.163.com/api/v2/banner/get`, {clientType: type}, 'POST', `https://music.163.com/api/v2/banner/get`, {clientType: type},
{crypto: 'linuxapi', proxy: query.proxy} {crypto: 'linuxapi', 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

@ -1,29 +1,29 @@
// 歌曲可用性 // 歌曲可用性
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
ids: '[' + parseInt(query.id) + ']', ids: '[' + parseInt(query.id) + ']',
br: parseInt(query.br || 999000) br: parseInt(query.br || 999000)
} }
return request( return request(
'POST', `https://music.163.com/weapi/song/enhance/player/url`, data, 'POST', `https://music.163.com/weapi/song/enhance/player/url`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
.then(response => { .then(response => {
let playable = false let playable = false
if(response.body.code == 200){ if(response.body.code == 200){
if(response.body.data[0].code == 200){ if(response.body.data[0].code == 200){
playable = true playable = true
}
}
if(playable){
response.body = {success: true, message: 'ok'}
return response
}
else{
response.status = 404
response.body = {success: false, message: '亲爱的,暂无版权'}
return Promise.reject(response)
} }
}
if(playable){
response.body = {success: true, message: 'ok'}
return response
}
else{
response.status = 404
response.body = {success: false, message: '亲爱的,暂无版权'}
return Promise.reject(response)
}
}) })
} }

View File

@ -1,30 +1,30 @@
// 发送与删除评论 // 发送与删除评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
query.t = (query.t == 1 ? 'add' : 'delete') query.t = (query.t == 1 ? 'add' : 'delete')
query.type = { query.type = {
0: 'R_SO_4_', // 歌曲 0: 'R_SO_4_', // 歌曲
1: 'R_MV_5_', // MV 1: 'R_MV_5_', // MV
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 = {
threadId: query.type + query.id threadId: query.type + query.id
} }
if(query.type == 'A_EV_2_'){ if(query.type == 'A_EV_2_'){
data.threadId = query.threadId data.threadId = query.threadId
} }
if(query.t == 'add') if(query.t == 'add')
data.content = query.content data.content = query.content
else if(query.t == 'delete') else if(query.t == 'delete')
data.commentId = query.commentId data.commentId = query.commentId
return request( return request(
'POST', `https://music.163.com/weapi/resource/comments/${query.t}`, data, 'POST', `https://music.163.com/weapi/resource/comments/${query.t}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,15 +1,15 @@
// 专辑评论 // 专辑评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before || 0 beforeTime: query.before || 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, data, 'POST', `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,15 +1,15 @@
// 电台评论 // 电台评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before|| 0 beforeTime: query.before|| 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, data, 'POST', `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, 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) => {
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

@ -1,23 +1,23 @@
// 热门评论 // 热门评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
query.type = { query.type = {
0: 'R_SO_4_', // 歌曲 0: 'R_SO_4_', // 歌曲
1: 'R_MV_5_', // MV 1: 'R_MV_5_', // MV
2: 'A_PL_0_', // 歌单 2: 'A_PL_0_', // 歌单
3: 'R_AL_3_', // 专辑 3: 'R_AL_3_', // 专辑
4: 'A_DJ_1_', // 电台, 4: 'A_DJ_1_', // 电台,
5: 'R_VI_62_' // 视频 5: 'R_VI_62_' // 视频
}[query.type] }[query.type]
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before|| 0 beforeTime: query.before|| 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, data, 'POST', `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,26 +1,26 @@
// 点赞与取消点赞评论 // 点赞与取消点赞评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
query.t = (query.t == 1 ? 'like' : 'unlike') query.t = (query.t == 1 ? 'like' : 'unlike')
query.type = { query.type = {
0: 'R_SO_4_', // 歌曲 0: 'R_SO_4_', // 歌曲
1: 'R_MV_5_', // MV 1: 'R_MV_5_', // MV
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 = {
threadId: query.type + query.id, threadId: query.type + query.id,
commentId: query.cid commentId: query.cid
} }
if(query.type == 'A_EV_2_'){ if(query.type == 'A_EV_2_'){
data.threadId = query.threadId data.threadId = query.threadId
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/comment/${query.t}`, data, 'POST', `https://music.163.com/weapi/v1/comment/${query.t}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

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

@ -1,15 +1,15 @@
// MV评论 // MV评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before|| 0 beforeTime: query.before|| 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`, data, 'POST', `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,15 +1,15 @@
// 歌单评论 // 歌单评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before|| 0 beforeTime: query.before|| 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`, data, 'POST', `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,15 +1,15 @@
// 视频评论 // 视频评论
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
rid: query.id, rid: query.id,
limit: query.limit || 20, limit: query.limit || 20,
offset: query.offset || 0, offset: query.offset || 0,
beforeTime: query.before|| 0 beforeTime: query.before|| 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`, data, 'POST', `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -8,11 +8,11 @@
*/ */
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
type: query.type || 0 type: query.type || 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/point/dailyTask`, data, 'POST', `https://music.163.com/weapi/point/dailyTask`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// 我的数字专辑 // 我的数字专辑
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/api/digitalAlbum/purchased`, data, 'POST', `https://music.163.com/api/digitalAlbum/purchased`, 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

@ -1,8 +1,8 @@
// 电台分类列表 // 电台分类列表
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/djradio/category/get`, {}, 'POST', `https://music.163.com/weapi/djradio/category/get`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 电台详情 // 电台详情
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.rid id: query.rid
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/get`, data, 'POST', `https://music.163.com/weapi/djradio/get`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,17 +1,17 @@
// 热门电台 // 热门电台
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
cat: query.type, cat: query.type,
cateId: query.type, cateId: query.type,
type: query.type, type: query.type,
categoryId: query.type, categoryId: query.type,
category: query.type, category: query.type,
limit: query.limit, limit: query.limit,
offset: query.offset offset: query.offset
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/hot/v1`, data, 'POST', `https://music.163.com/weapi/djradio/hot/v1`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,12 +1,12 @@
// 付费电台 // 付费电台
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0 offset: query.offset || 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`, data, 'POST', `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 电台节目详情 // 电台节目详情
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id id: query.id
} }
return request( return request(
'POST', `https://music.163.com/weapi/dj/program/detail`, data, 'POST', `https://music.163.com/weapi/dj/program/detail`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 精选电台 // 精选电台
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/djradio/recommend/v1`, {}, 'POST', `https://music.163.com/weapi/djradio/recommend/v1`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -24,11 +24,11 @@
*/ */
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
cateId: query.type cateId: query.type
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/recommend`, data, 'POST', `https://music.163.com/weapi/djradio/recommend`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,12 +1,12 @@
// 订阅与取消电台 // 订阅与取消电台
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = (query.t == 1 ? 'sub' : 'unsub')
const data = { const data = {
id: query.rid id: query.rid
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/${query.t}`, data, 'POST', `https://music.163.com/weapi/djradio/${query.t}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// 订阅电台列表 // 订阅电台列表
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/weapi/djradio/get/subed`, data, 'POST', `https://music.163.com/weapi/djradio/get/subed`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,12 +1,12 @@
// 动态 // 动态
module.exports = (query, request) => { module.exports = (query, request) => {
const data={ const data={
"pagesize": query.pagesize || 20, 'pagesize': query.pagesize || 20,
"lasttime": query.lasttime || -1 'lasttime': query.lasttime || -1
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/event/get`, data, 'POST', `https://music.163.com/weapi/v1/event/get`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 删除动态 // 删除动态
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.evId, id: query.evId,
} }
return request( return request(
'POST', `https://music.163.com/eapi/event/delete`, data, 'POST', `https://music.163.com/eapi/event/delete`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

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

@ -1,11 +1,11 @@
// 垃圾桶 // 垃圾桶
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
songId: query.id songId: query.id
} }
return request( return request(
'POST', `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${query.id}&time=${query.time || 25}`, data, 'POST', `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${query.id}&time=${query.time || 25}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,10 +1,10 @@
// 关注与取消关注用户 // 关注与取消关注用户
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
query.t = (query.t == 1 ? 'follow' : 'delfollow') query.t = (query.t == 1 ? 'follow' : 'delfollow')
return request( return request(
'POST', `https://music.163.com/weapi/user/${query.t}/${query.id}`, {}, 'POST', `https://music.163.com/weapi/user/${query.t}/${query.id}`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 喜欢的歌曲(无序) // 喜欢的歌曲(无序)
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
uid: query.uid uid: query.uid
} }
return request( return request(
'POST', `https://music.163.com/weapi/song/like/get`, data, 'POST', `https://music.163.com/weapi/song/like/get`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -3,14 +3,14 @@
const crypto = require('crypto') const crypto = require('crypto')
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
username: query.email, username: query.email,
password: crypto.createHash('md5').update(query.password).digest('hex'), password: crypto.createHash('md5').update(query.password).digest('hex'),
rememberLogin: 'true' rememberLogin: 'true'
} }
return request( return request(
'POST', `https://music.163.com/weapi/login`, data, 'POST', `https://music.163.com/weapi/login`, data,
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -3,15 +3,15 @@
const crypto = require('crypto') const crypto = require('crypto')
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
phone: query.phone, phone: query.phone,
countrycode: query.countrycode, countrycode: query.countrycode,
password: crypto.createHash('md5').update(query.password).digest('hex'), password: crypto.createHash('md5').update(query.password).digest('hex'),
rememberLogin: 'true' rememberLogin: 'true'
} }
return request( return request(
'POST', `https://music.163.com/weapi/login/cellphone`, data, 'POST', `https://music.163.com/weapi/login/cellphone`, data,
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 登录刷新 // 登录刷新
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/login/token/refresh`, {}, 'POST', `https://music.163.com/weapi/login/token/refresh`, {},
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,21 +1,21 @@
// 登录状态 // 登录状态
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'GET', `https://music.163.com`, {}, 'GET', `https://music.163.com`, {},
{cookie: query.cookie, proxy: query.proxy} {cookie: query.cookie, proxy: query.proxy}
) )
.then(response => { .then(response => {
try{ try{
let profile = eval(`(${/GUser\s*=\s*([^;]+);/.exec(response.body)[1]})`) let profile = eval(`(${/GUser\s*=\s*([^;]+);/.exec(response.body)[1]})`)
let bindings = eval(`(${/GBinds\s*=\s*([^;]+);/.exec(response.body)[1]})`) let bindings = eval(`(${/GBinds\s*=\s*([^;]+);/.exec(response.body)[1]})`)
response.body = {code: 200, profile: profile, bindings: bindings} response.body = {code: 200, profile: profile, bindings: bindings}
return response return response
} }
catch(err){ catch(err){
response.status = 301 response.status = 301
response.body = {code: 301} response.body = {code: 301}
return Promise.reject(response) return Promise.reject(response)
} }
}) })
} }

View File

@ -1,8 +1,8 @@
// 退出登录 // 退出登录
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/logout`, {}, 'POST', `https://music.163.com/weapi/logout`, {},
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 歌词 // 歌词
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,
{crypto: 'linuxapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'linuxapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

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

@ -1,11 +1,11 @@
// MV详情 // MV详情
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.mvid id: query.mvid
} }
return request( return request(
'POST', `https://music.163.com/weapi/mv/detail`, data, 'POST', `https://music.163.com/weapi/mv/detail`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, 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

@ -1,13 +1,13 @@
// 收藏与取消收藏MV // 收藏与取消收藏MV
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'sub' : 'unsub') query.t = (query.t == 1 ? 'sub' : 'unsub')
const data = { const data = {
mvId: query.mvid, mvId: query.mvid,
mvIds: '["' + query.mvid + '"]' mvIds: '["' + query.mvid + '"]'
} }
return request( return request(
'POST', `https://music.163.com/weapi/mv/${query.t}`, data, 'POST', `https://music.163.com/weapi/mv/${query.t}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// // 已收藏MV列表 // // 已收藏MV列表
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 25, limit: query.limit || 25,
offset: query.offset || 0, offset: query.offset || 0,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/weapi/cloudvideo/allvideo/sublist`, data, 'POST', `https://music.163.com/weapi/cloudvideo/allvideo/sublist`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,12 +1,12 @@
// MV链接 // MV链接
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id, id: query.id,
r: query.res || 1080 r: query.res || 1080
} }
return request( return request(
'POST', `https://music.163.com/weapi/song/enhance/play/mv/url`, data, 'POST', `https://music.163.com/weapi/song/enhance/play/mv/url`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 私人FM // 私人FM
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/v1/radio/get`, {}, 'POST', `https://music.163.com/weapi/v1/radio/get`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,14 +1,14 @@
// 推荐歌单 // 推荐歌单
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: query.limit || 30, limit: query.limit || 30,
offset: query.limit || 0, offset: query.limit || 0,
total: true, total: true,
n: 1000 n: 1000
} }
return request( return request(
'POST', `https://music.163.com/weapi/personalized/playlist`, data, 'POST', `https://music.163.com/weapi/personalized/playlist`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 推荐电台 // 推荐电台
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/personalized/djprogram`, {}, 'POST', `https://music.163.com/weapi/personalized/djprogram`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 推荐MV // 推荐MV
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/personalized/mv`, {}, 'POST', `https://music.163.com/weapi/personalized/mv`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 推荐新歌 // 推荐新歌
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,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 独家放送 // 独家放送
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/personalized/privatecontent`, {}, 'POST', `https://music.163.com/weapi/personalized/privatecontent`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 全部歌单分类 // 全部歌单分类
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/playlist/catalogue`, {}, 'POST', `https://music.163.com/weapi/playlist/catalogue`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

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

@ -6,12 +6,12 @@ module.exports = (query, request) => {
desc: query.desc desc: query.desc
} }
return request( return request(
'POST', `http://interface3.music.163.com/eapi/playlist/desc/update`, data, 'POST', `http://interface3.music.163.com/eapi/playlist/desc/update`, data,
{ {
crypto: 'eapi', crypto: 'eapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
url: '/api/playlist/desc/update' url: '/api/playlist/desc/update'
} }
) )
} }

View File

@ -1,13 +1,13 @@
// 歌单详情 // 歌单详情
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id, id: query.id,
n: 100000, n: 100000,
s: query.s || 8 s: query.s || 8
} }
return request( return request(
'POST', `https://music.163.com/weapi/v3/playlist/detail`, data, 'POST', `https://music.163.com/weapi/v3/playlist/detail`, data,
{crypto: 'linuxapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'linuxapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,8 +1,8 @@
// 热门歌单分类 // 热门歌单分类
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/playlist/hottags`, {}, 'POST', `https://music.163.com/weapi/playlist/hottags`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -6,12 +6,12 @@ module.exports = (query, request) => {
name: query.name name: query.name
} }
return request( return request(
'POST', `http://interface3.music.163.com/eapi/playlist/update/name`, data, 'POST', `http://interface3.music.163.com/eapi/playlist/update/name`, data,
{ {
crypto: 'eapi', crypto: 'eapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
url: '/api/playlist/update/name' url: '/api/playlist/update/name'
} }
) )
} }

View File

@ -1,12 +1,12 @@
// 收藏与取消收藏歌单 // 收藏与取消收藏歌单
module.exports = (query, request) => { module.exports = (query, request) => {
query.t = (query.t == 1 ? 'subscribe' : 'unsubscribe') query.t = (query.t == 1 ? 'subscribe' : 'unsubscribe')
const data = { const data = {
id: query.id id: query.id
} }
return request( return request(
'POST', `https://music.163.com/weapi/playlist/${query.t}`, data, 'POST', `https://music.163.com/weapi/playlist/${query.t}`, 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) => {
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

@ -6,12 +6,12 @@ module.exports = (query, request) => {
tags: query.tags tags: query.tags
} }
return request( return request(
'POST', `http://interface3.music.163.com/eapi/playlist/tags/update`, data, 'POST', `http://interface3.music.163.com/eapi/playlist/tags/update`, data,
{ {
crypto: 'eapi', crypto: 'eapi',
cookie: query.cookie, cookie: query.cookie,
proxy: query.proxy, proxy: query.proxy,
url: '/api/playlist/tags/update' url: '/api/playlist/tags/update'
} }
) )
} }

View File

@ -1,13 +1,13 @@
// 收藏单曲到歌单 从歌单删除歌曲 // 收藏单曲到歌单 从歌单删除歌曲
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
op: query.op, // del,add op: query.op, // del,add
pid: query.pid, // 歌单id pid: query.pid, // 歌单id
trackIds: '[' + query.tracks + ']' // 歌曲id trackIds: '[' + query.tracks + ']' // 歌曲id
} }
return request( return request(
'POST', `https://music.163.com/weapi/playlist/manipulate/tracks`, data, 'POST', `https://music.163.com/weapi/playlist/manipulate/tracks`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,16 +1,16 @@
// 编辑歌单 // 编辑歌单
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
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,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

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

@ -1,13 +1,13 @@
// 推荐节目 // 推荐节目
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
cateId: query.type, cateId: query.type,
limit: query.limit || 10, limit: query.limit || 10,
offset: query.offset || 0 offset: query.offset || 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/program/recommend/v1`, data, 'POST', `https://music.163.com/weapi/program/recommend/v1`, 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

@ -1,8 +1,8 @@
// 每日推荐歌单 // 每日推荐歌单
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'POST', `https://music.163.com/weapi/v1/discovery/recommend/resource`, {}, 'POST', `https://music.163.com/weapi/v1/discovery/recommend/resource`, {},
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,13 +1,13 @@
// 每日推荐歌曲 // 每日推荐歌曲
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
limit: 20, limit: 20,
offset: 0, offset: 0,
total: true total: true
} }
return request( return request(
'POST', `https://music.163.com/weapi/v1/discovery/recommend/songs`, data, 'POST', `https://music.163.com/weapi/v1/discovery/recommend/songs`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,12 +1,12 @@
// 相关视频 // 相关视频
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
id: query.id, id: query.id,
type: (/^\d+$/.test(query.id)) ? 0 : 1 type: (/^\d+$/.test(query.id)) ? 0 : 1
} }
return request( return request(
'POST', `https://music.163.com/weapi/cloudvideo/v1/allvideo/rcmd`, data, 'POST', `https://music.163.com/weapi/cloudvideo/v1/allvideo/rcmd`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,32 +1,32 @@
// 相关歌单 // 相关歌单
module.exports = (query, request) => { module.exports = (query, request) => {
return request( return request(
'GET', `https://music.163.com/playlist?id=${query.id}`, {}, 'GET', `https://music.163.com/playlist?id=${query.id}`, {},
{ua: 'pc', cookie: query.cookie, proxy: query.proxy} {ua: 'pc', cookie: query.cookie, proxy: query.proxy}
) )
.then(response => { .then(response => {
try{ try{
const pattern = /<div class="cver u-cover u-cover-3">[\s\S]*?<img src="([^"]+)">[\s\S]*?<a class="sname f-fs1 s-fc0" href="([^"]+)"[^>]*>([^<]+?)<\/a>[\s\S]*?<a class="nm nm f-thide s-fc3" href="([^"]+)"[^>]*>([^<]+?)<\/a>/g; const pattern = /<div class="cver u-cover u-cover-3">[\s\S]*?<img src="([^"]+)">[\s\S]*?<a class="sname f-fs1 s-fc0" href="([^"]+)"[^>]*>([^<]+?)<\/a>[\s\S]*?<a class="nm nm f-thide s-fc3" href="([^"]+)"[^>]*>([^<]+?)<\/a>/g;
let result, playlists = [] let result, playlists = []
while((result = pattern.exec(response.body)) != null){ while((result = pattern.exec(response.body)) != null){
playlists.push({ playlists.push({
creator: { creator: {
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)
}) })
}
response.body = {code: 200, playlists: playlists}
return response
}
catch(err){
response.status = 500
response.body = {code: 500, msg: err.stack}
return Promise.reject(response)
} }
response.body = {code: 200, playlists: playlists}
return response
}
catch(err){
response.status = 500
response.body = {code: 500, msg: err.stack}
return Promise.reject(response)
}
}) })
} }

View File

@ -1,22 +1,22 @@
// 点赞与取消点赞资源 // 点赞与取消点赞资源
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
query.t = (query.t == 1 ? 'like' : 'unlike') query.t = (query.t == 1 ? 'like' : 'unlike')
query.type = { query.type = {
1: 'R_MV_5_', // MV 1: 'R_MV_5_', // MV
4: 'A_DJ_1_', // 电台 4: 'A_DJ_1_', // 电台
5: 'R_VI_62_', // 视频 5: 'R_VI_62_', // 视频
6: 'A_EV_2_' 6: 'A_EV_2_'
}[query.type] }[query.type]
const data = { const data = {
threadId: query.type + query.id threadId: query.type + query.id
} }
if(query.type=='A_EV_2_'){ if(query.type=='A_EV_2_'){
data.threadId=query.threadId data.threadId=query.threadId
} }
return request( return request(
'POST', `https://music.163.com/weapi/resource/${query.t}`, data, 'POST', `https://music.163.com/weapi/resource/${query.t}`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,23 +1,23 @@
// 听歌打卡 // 听歌打卡
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
logs: JSON.stringify([{ logs: JSON.stringify([{
action: 'play', action: 'play',
json: { json: {
download: 0, download: 0,
end: 'playend', end: 'playend',
id: query.id, id: query.id,
sourceId: query.sourceid, sourceId: query.sourceid,
time: query.time, time: query.time,
type: 'song', type: 'song',
wifi: 0, wifi: 0,
} }
}]) }])
} }
return request( return request(
'POST', `https://music.163.com/weapi/feedback/weblog`, data, 'POST', `https://music.163.com/weapi/feedback/weblog`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,14 +1,14 @@
// 搜索 // 搜索
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
s: query.keywords, s: query.keywords,
type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频
limit: query.limit || 30, limit: query.limit || 30,
offset: query.offset || 0 offset: query.offset || 0
} }
return request( return request(
'POST', `https://music.163.com/weapi/search/get`, data, 'POST', `https://music.163.com/weapi/search/get`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,11 +1,11 @@
// 热门搜索 // 热门搜索
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
type: 1111 type: 1111
} }
return request( return request(
'POST', `https://music.163.com/weapi/search/hot`, data, 'POST', `https://music.163.com/weapi/search/hot`, data,
{crypto: 'weapi', ua: 'mobile', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', ua: 'mobile', cookie: query.cookie, proxy: query.proxy}
) )
} }

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

@ -1,12 +1,12 @@
// 多类型搜索 // 多类型搜索
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
type: query.type || 1, type: query.type || 1,
s: query.keywords || '' s: query.keywords || ''
} }
return request( return request(
'POST', `https://music.163.com/weapi/search/suggest/multimatch`, data, 'POST', `https://music.163.com/weapi/search/suggest/multimatch`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,12 +1,12 @@
// 搜索建议 // 搜索建议
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
s: query.keywords || '' s: query.keywords || ''
} }
let type = query.type == 'mobile' ? 'keyword' : 'web' let type = query.type == 'mobile' ? 'keyword' : 'web'
return request( return request(
'POST', `https://music.163.com/weapi/search/suggest/` + type, data, 'POST', `https://music.163.com/weapi/search/suggest/` + type, data,
{ crypto: 'weapi', cookie: query.cookie, proxy: query.proxy } { crypto: 'weapi', cookie: query.cookie, proxy: query.proxy }
) )
} }

View File

@ -1,15 +1,15 @@
// 私信歌单 // 私信歌单
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
id: query.playlist, id: query.playlist,
type: 'playlist', type: 'playlist',
msg: query.msg, msg: query.msg,
userIds: '[' + query.user_ids + ']' userIds: '[' + query.user_ids + ']'
} }
return request( return request(
'POST', `https://music.163.com/weapi/msg/private/send`, data, 'POST', `https://music.163.com/weapi/msg/private/send`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,15 +1,15 @@
// 私信 // 私信
module.exports = (query, request) => { module.exports = (query, request) => {
query.cookie.os = 'pc' query.cookie.os = 'pc'
const data = { const data = {
id: query.playlist, id: query.playlist,
type: 'text', type: 'text',
msg: query.msg, msg: query.msg,
userIds: '[' + query.user_ids + ']' userIds: '[' + query.user_ids + ']'
} }
return request( return request(
'POST', `https://music.163.com/weapi/msg/private/send`, data, 'POST', `https://music.163.com/weapi/msg/private/send`, data,
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
) )
} }

View File

@ -1,9 +1,9 @@
module.exports = (query, request) => { module.exports = (query, request) => {
const data = { const data = {
} }
return request( return request(
'POST', `https://music.163.com/api/user/setting`, data, 'POST', `https://music.163.com/api/user/setting`, 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 }
); );
}; };

Some files were not shown because too many files have changed in this diff Show More