mirror of
https://gitlab.com/Binaryify/neteasecloudmusicapi.git
synced 2025-05-23 22:37:41 +08:00
commit
7aca52e1b8
76
app.js
76
app.js
@ -42,14 +42,6 @@ app.use(cache('2 minutes', onlyStatus200))
|
||||
|
||||
app.use(express.static(path.resolve(__dirname, 'public')))
|
||||
|
||||
app.use(function(req, res, next) {
|
||||
const proxy = req.query.proxy
|
||||
if (proxy) {
|
||||
req.headers.cookie += `__proxy__${proxy}`
|
||||
}
|
||||
next()
|
||||
})
|
||||
|
||||
// 补全缺失的cookie
|
||||
const { completeCookie } = require('./util/init')
|
||||
app.use(function(req, res, next) {
|
||||
@ -59,6 +51,24 @@ app.use(function(req, res, next) {
|
||||
next()
|
||||
})
|
||||
|
||||
// cookie parser
|
||||
app.use(function(req, res, next) {
|
||||
req.cookies = {}, (req.headers.cookie || '').split(/\s*;\s*/).forEach(pair => {
|
||||
let crack = pair.indexOf('=')
|
||||
if(crack < 1 || crack == pair.length - 1) return
|
||||
req.cookies[decodeURIComponent(pair.slice(0, crack)).trim()] = decodeURIComponent(pair.slice(crack + 1)).trim()
|
||||
})
|
||||
next()
|
||||
})
|
||||
|
||||
app.use(function(req, res, next) {
|
||||
const proxy = req.query.proxy
|
||||
if (proxy) {
|
||||
req.headers.cookie += `__proxy__${proxy}`
|
||||
}
|
||||
next()
|
||||
})
|
||||
|
||||
// 因为这几个文件对外所注册的路由 和 其他文件对外注册的路由规则不一样, 所以专门写个MAP对这些文件做特殊处理
|
||||
const UnusualRouteFileMap = {
|
||||
// key 为文件名, value 为对外注册的路由
|
||||
@ -72,27 +82,41 @@ const { createWebAPIRequest, request } = require('./util/util')
|
||||
const Wrap = fn => (req, res) => fn(req, res, createWebAPIRequest, request)
|
||||
|
||||
// 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由
|
||||
fs.readdirSync(path.resolve(__dirname, 'router'))
|
||||
.reverse()
|
||||
.forEach(file => {
|
||||
if (/\.js$/i.test(file) === false) {
|
||||
return
|
||||
}
|
||||
fs.readdirSync(path.join(__dirname, 'router'))
|
||||
.reverse()
|
||||
.forEach(file => {
|
||||
if (!/\.js$/i.test(file)) return
|
||||
let route = (file in UnusualRouteFileMap) ? UnusualRouteFileMap[file] : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/')
|
||||
app.use(route, Wrap(require(path.join(__dirname, 'router', file))))
|
||||
})
|
||||
|
||||
let route
|
||||
|
||||
if (typeof UnusualRouteFileMap[file] !== 'undefined') {
|
||||
route = UnusualRouteFileMap[file]
|
||||
} else {
|
||||
route =
|
||||
'/' +
|
||||
file
|
||||
.replace(/\.js$/i, '')
|
||||
.replace(/_/g, '/')
|
||||
}
|
||||
|
||||
app.use(route, Wrap(require('./router/' + file)))
|
||||
// 改写router为module
|
||||
const requestMod = require('./util/request')
|
||||
let dev = express()
|
||||
fs.readdirSync(path.join(__dirname, 'module'))
|
||||
.reverse()
|
||||
.forEach(file => {
|
||||
if (!(/\.js$/i.test(file))) return
|
||||
let route = (file in UnusualRouteFileMap) ? UnusualRouteFileMap[file] : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/')
|
||||
let question = require(path.join(__dirname, 'module', file))
|
||||
|
||||
dev.use(route, (req, res) => {
|
||||
let query = {...req.query, cookie: req.cookies}
|
||||
question(query, requestMod)
|
||||
.then(answer => {
|
||||
console.log('[OK]', decodeURIComponent(req.originalUrl))
|
||||
res.append('Set-Cookie', answer.cookie)
|
||||
res.status(answer.status).send(answer.body)
|
||||
})
|
||||
.catch(answer => {
|
||||
console.log('[ERR]', decodeURIComponent(req.originalUrl))
|
||||
res.append('Set-Cookie', answer.cookie)
|
||||
res.status(answer.status).send(answer.body)
|
||||
})
|
||||
})
|
||||
})
|
||||
app.use('/dev', dev)
|
||||
|
||||
const port = process.env.PORT || 3000
|
||||
|
||||
|
8
module/album.js
Normal file
8
module/album.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 专辑内容
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/album/${query.id}`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/artist_album.js
Normal file
13
module/artist_album.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 歌手专辑列表
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/artist/albums/${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/artist_desc.js
Normal file
11
module/artist_desc.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 歌手介绍
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/artist/introduction`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
37
module/artist_list.js
Normal file
37
module/artist_list.js
Normal file
@ -0,0 +1,37 @@
|
||||
// 歌手分类
|
||||
|
||||
/*
|
||||
categoryCode 取值
|
||||
入驻歌手 5001
|
||||
华语男歌手 1001
|
||||
华语女歌手 1002
|
||||
华语组合/乐队 1003
|
||||
欧美男歌手 2001
|
||||
欧美女歌手 2002
|
||||
欧美组合/乐队 2003
|
||||
日本男歌手 6001
|
||||
日本女歌手 6002
|
||||
日本组合/乐队 6003
|
||||
韩国男歌手 7001
|
||||
韩国女歌手 7002
|
||||
韩国组合/乐队 7003
|
||||
其他男歌手 4001
|
||||
其他女歌手 4002
|
||||
其他组合/乐队 4003
|
||||
|
||||
initial 取值 a-z/A-Z
|
||||
*/
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
categoryCode: query.cat || '1001',
|
||||
initial: (query.initial || '').toUpperCase().charCodeAt() || '',
|
||||
offset: query.offset || 0,
|
||||
limit: query.limit || 30,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/artist/list`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/artist_mv.js
Normal file
14
module/artist_mv.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 歌手相关MV
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
artistId: query.id,
|
||||
limit: query.limit,
|
||||
offset: query.offset,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/artist/mvs`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/artist_sub.js
Normal file
13
module/artist_sub.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 收藏与取消收藏歌手
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.t = (query.t == 1 ? 'sub' : 'unsub')
|
||||
const data = {
|
||||
artistId: query.id,
|
||||
artistIds: '[' + query.id + ']'
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/artist/${query.t}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/artist_sublist.js
Normal file
13
module/artist_sublist.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 我的歌手列表
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 25,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/artist/sublist`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/artists.js
Normal file
8
module/artists.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 歌手单曲
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/artist/${query.id}`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
20
module/banner.js
Normal file
20
module/banner.js
Normal file
@ -0,0 +1,20 @@
|
||||
// 首页轮播图
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'GET', `http://music.163.com/discover`, {},
|
||||
{ua: 'pc', proxy: query.proxy}
|
||||
)
|
||||
.then(response => {
|
||||
try{
|
||||
const banners = eval(`(${/Gbanners\s*=\s*([^;]+);/.exec(response.body)[1]})`)
|
||||
response.body = {code: 200, banners: banners}
|
||||
return response
|
||||
}
|
||||
catch(err){
|
||||
response.status = 500
|
||||
response.body = {code: 500, msg: err.stack}
|
||||
return Promise.reject(response)
|
||||
}
|
||||
})
|
||||
}
|
25
module/check_music.js
Normal file
25
module/check_music.js
Normal file
@ -0,0 +1,25 @@
|
||||
// 歌曲可用性
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
ids: '[' + parseInt(query.id) + ']',
|
||||
br: parseInt(query.br || 999000)
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/song/enhance/player/url`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
.then(response => {
|
||||
if (response.body.code == 200) {
|
||||
if (response.body.data[0].code == 200){
|
||||
response.body = {success: true, message: 'ok'}
|
||||
return response
|
||||
}
|
||||
}
|
||||
else{
|
||||
response.status = 404
|
||||
response.body = {success: false, message: '亲爱的,暂无版权'}
|
||||
return Promise.reject(response)
|
||||
}
|
||||
})
|
||||
}
|
25
module/comment.js
Normal file
25
module/comment.js
Normal file
@ -0,0 +1,25 @@
|
||||
// 发送与删除评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = 'pc'
|
||||
query.t = (query.t == 1 ? 'add' : 'delete')
|
||||
query.type = {
|
||||
0: 'R_SO_4_', // 歌曲
|
||||
1: 'R_MV_5_', // MV
|
||||
2: 'A_PL_0_', // 歌单
|
||||
3: 'R_AL_3_', // 专辑
|
||||
4: 'A_DJ_1_', // 电台,
|
||||
5: 'R_VI_62_' // 视频
|
||||
}[query.type]
|
||||
const data = {
|
||||
threadId: query.type + query.id
|
||||
}
|
||||
if(query.t == 'add')
|
||||
data.content = query.content
|
||||
else if(query.t == 'delete')
|
||||
data.commentId = query.commentId
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/resource/comments/${query.t}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/comment_album.js
Normal file
13
module/comment_album.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 专辑评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/comment_dj.js
Normal file
13
module/comment_dj.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 电台评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
22
module/comment_hot.js
Normal file
22
module/comment_hot.js
Normal file
@ -0,0 +1,22 @@
|
||||
// 热门评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = 'pc'
|
||||
query.type = {
|
||||
0: 'R_SO_4_', // 歌曲
|
||||
1: 'R_MV_5_', // MV
|
||||
2: 'A_PL_0_', // 歌单
|
||||
3: 'R_AL_3_', // 专辑
|
||||
4: 'A_DJ_1_', // 电台,
|
||||
5: 'R_VI_62_' // 视频
|
||||
}[query.type]
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
22
module/comment_like.js
Normal file
22
module/comment_like.js
Normal file
@ -0,0 +1,22 @@
|
||||
// 点赞与取消点赞评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = 'pc'
|
||||
query.t = (query.t == 1 ? 'like' : 'unlike')
|
||||
query.type = {
|
||||
0: 'R_SO_4_', // 歌曲
|
||||
1: 'R_MV_5_', // MV
|
||||
2: 'A_PL_0_', // 歌单
|
||||
3: 'R_AL_3_', // 专辑
|
||||
4: 'A_DJ_1_', // 电台,
|
||||
5: 'R_VI_62_' // 视频
|
||||
}[query.type]
|
||||
const data = {
|
||||
threadId: query.type + query.id,
|
||||
commentId: query.cid
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/comment/${query.t}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/comment_music.js
Normal file
13
module/comment_music.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 歌曲评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/resource/comments/R_SO_4_${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/comment_mv.js
Normal file
13
module/comment_mv.js
Normal file
@ -0,0 +1,13 @@
|
||||
// MV评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/comment_playlist.js
Normal file
13
module/comment_playlist.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 歌单评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/comment_video.js
Normal file
13
module/comment_video.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 视频评论
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
rid: query.id,
|
||||
limit: query.limit || 20,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
18
module/daily_signin.js
Normal file
18
module/daily_signin.js
Normal file
@ -0,0 +1,18 @@
|
||||
// 签到
|
||||
|
||||
/*
|
||||
0为安卓端签到 3点经验, 1为网页签到,2点经验
|
||||
签到成功 {'android': {'point': 3, 'code': 200}, 'web': {'point': 2, 'code': 200}}
|
||||
重复签到 {'android': {'code': -2, 'msg': '重复签到'}, 'web': {'code': -2, 'msg': '重复签到'}}
|
||||
未登录 {'android': {'code': 301}, 'web': {'code': 301}}
|
||||
*/
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
type: query.type || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/point/dailyTask`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/dj_catelist.js
Normal file
8
module/dj_catelist.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 电台分类列表
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/category/get`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/dj_detail.js
Normal file
11
module/dj_detail.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 电台详情
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.rid
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/get`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
17
module/dj_hot.js
Normal file
17
module/dj_hot.js
Normal file
@ -0,0 +1,17 @@
|
||||
// 热门电台
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
cat: query.type,
|
||||
cateId: query.type,
|
||||
type: query.type,
|
||||
categoryId: query.type,
|
||||
category: query.type,
|
||||
limit: query.limit,
|
||||
offset: query.offset
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/hot/v1`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/dj_paygift.js
Normal file
12
module/dj_paygift.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 付费电台
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 10,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/dj_program.js
Normal file
14
module/dj_program.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 电台节目列表
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
radioId: query.rid,
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0,
|
||||
asc: query.asc
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/dj/program/byradio`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/dj_program_detail.js
Normal file
11
module/dj_program_detail.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 电台节目详情
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/dj/program/detail`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/dj_recommend.js
Normal file
8
module/dj_recommend.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 精选电台
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/recommend/v1`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
34
module/dj_recommend_type.js
Normal file
34
module/dj_recommend_type.js
Normal file
@ -0,0 +1,34 @@
|
||||
// 精选电台分类
|
||||
|
||||
/*
|
||||
有声书 10001
|
||||
知识技能 453050
|
||||
商业财经 453051
|
||||
人文历史 11
|
||||
外语世界 13
|
||||
亲子宝贝 14
|
||||
创作|翻唱 2001
|
||||
音乐故事 2
|
||||
3D|电子 10002
|
||||
相声曲艺 8
|
||||
情感调频 3
|
||||
美文读物 6
|
||||
脱口秀 5
|
||||
广播剧 7
|
||||
二次元 3001
|
||||
明星做主播 1
|
||||
娱乐|影视 4
|
||||
科技科学 453052
|
||||
校园|教育 4001
|
||||
旅途|城市 12
|
||||
*/
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
cateId: query.type
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/recommend`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/dj_sub.js
Normal file
12
module/dj_sub.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 订阅与取消电台
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.t = (query.t == 1 ? 'sub' : 'unsub')
|
||||
const data = {
|
||||
id: query.rid
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/${query.t}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/dj_sublist.js
Normal file
13
module/dj_sublist.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 我的电台列表
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/get/subed`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/event.js
Normal file
8
module/event.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 动态
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/event/get`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/fm_trash.js
Normal file
11
module/fm_trash.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 垃圾桶
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
songId: query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://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}
|
||||
)
|
||||
}
|
9
module/follow.js
Normal file
9
module/follow.js
Normal file
@ -0,0 +1,9 @@
|
||||
// 关注与取消关注用户
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.t = (query.t == 1 ? 'follow' : 'delfollow')
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/user/${query.t}/${query.id}`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/like.js
Normal file
13
module/like.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 红心取消红心歌曲
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.like = (query.like ? true : false)
|
||||
const data = {
|
||||
trackId: query.id,
|
||||
like: query.like
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/radio/like?alg=${query.alg || 'itembased'}&trackId=${query.id}&like=${query.like}&time=${query.time || 25}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/likelist.js
Normal file
11
module/likelist.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 喜欢的歌曲(无序)
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
uid: query.uid
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/song/like/get`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
15
module/login.js
Normal file
15
module/login.js
Normal file
@ -0,0 +1,15 @@
|
||||
// 邮箱登录
|
||||
|
||||
const crypto = require('crypto')
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
username: query.email,
|
||||
password: crypto.createHash('md5').update(query.password).digest('hex'),
|
||||
rememberLogin: 'true'
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/login`, data,
|
||||
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
15
module/login_cellphone.js
Normal file
15
module/login_cellphone.js
Normal file
@ -0,0 +1,15 @@
|
||||
// 手机登录
|
||||
|
||||
const crypto = require('crypto')
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
phone: query.phone,
|
||||
password: crypto.createHash('md5').update(query.password).digest('hex'),
|
||||
rememberLogin: 'true'
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/login/cellphone`, data,
|
||||
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/login_refresh.js
Normal file
8
module/login_refresh.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 登录刷新
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/login/token/refresh`, {},
|
||||
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
21
module/login_status.js
Normal file
21
module/login_status.js
Normal file
@ -0,0 +1,21 @@
|
||||
// 登录状态
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'GET', `http://music.163.com`, {},
|
||||
{cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
.then(response => {
|
||||
try{
|
||||
let profile = eval(`(${/GUser\s*=\s*([^;]+);/.exec(response.body)[1]})`)
|
||||
let bindings = eval(`(${/GBinds\s*=\s*([^;]+);/.exec(response.body)[1]})`)
|
||||
response.body = {code: 200, profile: profile, bindings: bindings}
|
||||
return response
|
||||
}
|
||||
catch(err){
|
||||
response.status = 301
|
||||
response.body = {code: 301}
|
||||
return Promise.reject(response)
|
||||
}
|
||||
})
|
||||
}
|
8
module/logout.js
Normal file
8
module/logout.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 退出登录
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/logout`, {},
|
||||
{crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/lyric.js
Normal file
8
module/lyric.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 歌词
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/song/lyric?os=osx&id=${query.id}&lv=-1&kv=-1&tv=-1`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/mv_detail.js
Normal file
11
module/mv_detail.js
Normal file
@ -0,0 +1,11 @@
|
||||
// MV详情
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.mvid
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/mv/detail`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/mv_first.js
Normal file
13
module/mv_first.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 最新MV
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
// 'offset': query.offset || 0,
|
||||
limit: query.limit || 30,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/mv/first`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/mv_sub.js
Normal file
13
module/mv_sub.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 收藏与取消收藏MV
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.t = (query.t == 1 ? 'sub' : 'unsub')
|
||||
const data = {
|
||||
mvId: query.mvid,
|
||||
mvIds: '["' + query.mvid + '"]'
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/mv/${query.t}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/mv_url.js
Normal file
12
module/mv_url.js
Normal file
@ -0,0 +1,12 @@
|
||||
// MV链接
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.id,
|
||||
r: query.res || 1080
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/song/enhance/play/mv/url`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/personal_fm.js
Normal file
8
module/personal_fm.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 私人FM
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/radio/get`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/personalized.js
Normal file
14
module/personalized.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 推荐歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 30,
|
||||
offset: query.limit || 0,
|
||||
total: true,
|
||||
n: 1000
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/personalized/playlist`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/personalized_djprogram.js
Normal file
8
module/personalized_djprogram.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 推荐电台
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/personalized/djprogram`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/personalized_mv.js
Normal file
8
module/personalized_mv.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 推荐MV
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/personalized/mv`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/personalized_newsong.js
Normal file
11
module/personalized_newsong.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 推荐新歌
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
type: "recommend"
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/personalized/newsong`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/personalized_privatecontent.js
Normal file
8
module/personalized_privatecontent.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 独家放送
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/personalized/privatecontent`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/playlist_catlist.js
Normal file
8
module/playlist_catlist.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 全部歌单分类
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/playlist/catalogue`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/playlist_create.js
Normal file
12
module/playlist_create.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 创建歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = 'pc'
|
||||
const data = {
|
||||
name: query.name
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/playlist/create`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/playlist_detail.js
Normal file
13
module/playlist_detail.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 歌单详情
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.id,
|
||||
n: 100000,
|
||||
s: query.s || 8
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v3/playlist/detail`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/playlist_hot.js
Normal file
8
module/playlist_hot.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 热门歌单分类
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/playlist/hottags`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/playlist_subscribe.js
Normal file
12
module/playlist_subscribe.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 收藏与取消收藏歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.t = (query.t == 1 ? 'subscribe' : 'unsubscribe')
|
||||
const data = {
|
||||
id: query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/playlist/${query.t}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/playlist_tracks.js
Normal file
13
module/playlist_tracks.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 收藏单曲到歌单 从歌单删除歌曲
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
op: query.op, // del,add
|
||||
pid: query.pid, // 歌单id
|
||||
trackIds: '[' + query.tracks + ']' // 歌曲id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/playlist/manipulate/tracks`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
16
module/playlist_update.js
Normal file
16
module/playlist_update.js
Normal file
@ -0,0 +1,16 @@
|
||||
// 编辑歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.cookie.os = 'pc'
|
||||
query.desc = query.desc || ''
|
||||
query.tags = query.tags || ''
|
||||
const data = {
|
||||
"/api/playlist/desc/update": `{"id":${query.id},"desc":"${query.desc}"}`,
|
||||
"/api/playlist/tags/update": `{"id":${query.id},"tags":"${query.tags}"}`,
|
||||
"/api/playlist/update/name": `{"id":${query.id},"name":"${query.name}"}`
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/batch`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/program_recommend.js
Normal file
13
module/program_recommend.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 推荐节目
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
cateId: query.type,
|
||||
limit: query.limit || 10,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/program/recommend/v1`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/recommend_resource.js
Normal file
8
module/recommend_resource.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 每日推荐歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/discovery/recommend/resource`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/recommend_songs.js
Normal file
13
module/recommend_songs.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 每日推荐歌曲
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: 20,
|
||||
offset: 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/discovery/recommend/songs`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/related_allvideo.js
Normal file
12
module/related_allvideo.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 相关视频
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.id,
|
||||
type: (/^\d+$/.test(query.id)) ? 0 : 1
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/cloudvideo/v1/allvideo/rcmd`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
32
module/related_playlist.js
Normal file
32
module/related_playlist.js
Normal file
@ -0,0 +1,32 @@
|
||||
// 相关歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'GET', `http://music.163.com/playlist?id=${query.id}`, {},
|
||||
{ua: 'pc', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
.then(response => {
|
||||
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;
|
||||
let result, playlists = []
|
||||
while((result = pattern.exec(response.body)) != null){
|
||||
playlists.push({
|
||||
creator: {
|
||||
userId: result[4].slice('/user/home?id='.length),
|
||||
nickname: result[5]
|
||||
},
|
||||
coverImgUrl: result[1].slice(0,-('?param=50y50'.length)),
|
||||
name: result[3],
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
17
module/resource_like.js
Normal file
17
module/resource_like.js
Normal file
@ -0,0 +1,17 @@
|
||||
// 点赞与取消点赞资源
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.t = (query.t == 1 ? 'like' : 'unlike')
|
||||
query.type = {
|
||||
1: 'R_MV_5_', // MV
|
||||
4: 'A_DJ_1_', // 电台
|
||||
5: 'R_VI_62_' // 视频
|
||||
}[query.type]
|
||||
const data = {
|
||||
threadId: query.type + query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/resource/${query.t}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/search.js
Normal file
14
module/search.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 搜索
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
s: query.keywords,
|
||||
type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/search/get`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/search_hot.js
Normal file
11
module/search_hot.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 热门搜索
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
type: 1111
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/search/hot`, data,
|
||||
{crypto: 'weapi', ua: 'mobile', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/search_multimatch.js
Normal file
12
module/search_multimatch.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 多类型搜索
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
type: query.type || 1,
|
||||
s: query.keywords || ''
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/search/suggest/multimatch`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/search_suggest.js
Normal file
11
module/search_suggest.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 搜索建议
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
s: query.keywords || ''
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/search/suggest/web`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/send_playlist.js
Normal file
14
module/send_playlist.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 私信歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.playlist,
|
||||
type: 'playlist',
|
||||
msg: query.msg,
|
||||
userIds: '[' + query.user_ids + ']'
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/msg/private/send`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/send_text.js
Normal file
14
module/send_text.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 私信
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: query.playlist,
|
||||
type: 'text',
|
||||
msg: query.msg,
|
||||
userIds: '[' + query.user_ids + ']'
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/msg/private/send`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/simi_artist.js
Normal file
11
module/simi_artist.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 相似歌手
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
artistid: query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/discovery/simiArtist`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/simi_mv.js
Normal file
11
module/simi_mv.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 相似MV
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
mvid: query.mvid
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/discovery/simiMV`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/simi_playlist.js
Normal file
13
module/simi_playlist.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 相似歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
songid: query.id,
|
||||
limit: query.limit || 50,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/discovery/simiPlaylist`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/simi_song.js
Normal file
13
module/simi_song.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 相似歌曲
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
songid: query.id,
|
||||
limit: query.limit || 50,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/discovery/simiSong`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/simi_user.js
Normal file
13
module/simi_user.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 相似用户
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
songid: query.id,
|
||||
limit: query.limit || 50,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/discovery/simiUser`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/song_detail.js
Normal file
13
module/song_detail.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 歌曲详情
|
||||
|
||||
module.exports = (query, request) => {
|
||||
query.ids = query.ids.split(/\s*,\s*/)
|
||||
const data = {
|
||||
c: '[' + query.ids.map(id => ('{"id":' + id + '}')).join(',') + ']',
|
||||
ids: '[' + query.ids.join(',') + ']'
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v3/song/detail`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
15
module/song_url.js
Normal file
15
module/song_url.js
Normal file
@ -0,0 +1,15 @@
|
||||
// 歌曲链接
|
||||
|
||||
const crypto = require('crypto')
|
||||
|
||||
module.exports = (query, request) => {
|
||||
if(!('MUSIC_U' in query.cookie)) query.cookie._ntes_nuid = crypto.randomBytes(16).toString("hex")
|
||||
const data = {
|
||||
ids: '[' + parseInt(query.id) + ']',
|
||||
br: parseInt(query.br || 999000)
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/song/enhance/player/url`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/top_album.js
Normal file
14
module/top_album.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 新碟上架
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
area: query.type || 'ALL', // ALL,ZH,EA,KR,JP
|
||||
limit: query.limit || 50,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/album/new`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/top_artists.js
Normal file
13
module/top_artists.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 热门歌手
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 50,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/artist/top`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
39
module/top_list.js
Normal file
39
module/top_list.js
Normal file
@ -0,0 +1,39 @@
|
||||
// 排行榜
|
||||
|
||||
const topList = {
|
||||
0: "3779629", //云音乐新歌榜
|
||||
1: "3778678", //云音乐热歌榜
|
||||
2: "2884035", ///云音乐原创榜
|
||||
3: "19723756", //云音乐飙升榜
|
||||
4: "10520166", //云音乐电音榜
|
||||
5: "180106", //UK排行榜周榜
|
||||
6: "60198", //美国Billboard周榜
|
||||
7: "21845217", //KTV嗨榜
|
||||
8: "11641012", //iTunes榜
|
||||
9: "120001", //Hit FM Top榜
|
||||
10: "60131", //日本Oricon周榜
|
||||
11: "3733003", //韩国Melon排行榜周榜
|
||||
12: "60255", //韩国Mnet排行榜周榜
|
||||
13: "46772709", //韩国Melon原声周榜
|
||||
14: "112504", //中国TOP排行榜(港台榜)
|
||||
15: "64016", //中国TOP排行榜(内地榜)
|
||||
16: "10169002", //香港电台中文歌曲龙虎榜
|
||||
17: "4395559", //华语金曲榜
|
||||
18: "1899724", //中国嘻哈榜
|
||||
19: "27135204", //法国 NRJ EuroHot 30周榜
|
||||
20: "112463", //台湾Hito排行榜
|
||||
21: "3812895", //Beatport全球电子舞曲榜
|
||||
22: "71385702", //云音乐ACG音乐榜
|
||||
23: "991319590" //云音乐嘻哈榜
|
||||
}
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
id: topList[query.idx],
|
||||
n: 10000
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v3/playlist/detail`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/top_mv.js
Normal file
13
module/top_mv.js
Normal file
@ -0,0 +1,13 @@
|
||||
// MV排行榜
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/mv/toplist`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
15
module/top_playlist.js
Normal file
15
module/top_playlist.js
Normal file
@ -0,0 +1,15 @@
|
||||
// 分类歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
cat: query.cat || '全部', // 全部,华语,欧美,日语,韩语,粤语,小语种,流行,摇滚,民谣,电子,舞曲,说唱,轻音乐,爵士,乡村,R&B/Soul,古典,民族,英伦,金属,朋克,蓝调,雷鬼,世界音乐,拉丁,另类/独立,New Age,古风,后摇,Bossa Nova,清晨,夜晚,学习,工作,午休,下午茶,地铁,驾车,运动,旅行,散步,酒吧,怀旧,清新,浪漫,性感,伤感,治愈,放松,孤独,感动,兴奋,快乐,安静,思念,影视原声,ACG,儿童,校园,游戏,70后,80后,90后,网络歌曲,KTV,经典,翻唱,吉他,钢琴,器乐,榜单,00后
|
||||
order: query.order || 'hot', // hot,new
|
||||
limit: query.limit || 50,
|
||||
offset: query.offset || 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/playlist/list`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/top_playlist_highquality.js
Normal file
14
module/top_playlist_highquality.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 精品歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
cat: query.cat || '全部', // 全部,华语,欧美,韩语,日语,粤语,小语种,运动,ACG,影视原声,流行,摇滚,后摇,古风,民谣,轻音乐,电子,器乐,说唱,古典,爵士
|
||||
limit: query.limit || 50,
|
||||
lasttime: query.before || 0, // 歌单updateTime
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/playlist/highquality/list`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/top_song.js
Normal file
8
module/top_song.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 最新单曲(暂时废弃?)
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/discovery/new/songs`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/toplist.js
Normal file
8
module/toplist.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 所有榜单介绍
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/toplist`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
14
module/toplist_artist.js
Normal file
14
module/toplist_artist.js
Normal file
@ -0,0 +1,14 @@
|
||||
// 歌手榜
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
type: 1,
|
||||
limit: 100,
|
||||
offset: 0,
|
||||
total: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/toplist/artist`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/toplist_detail.js
Normal file
8
module/toplist_detail.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 所有榜单内容摘要
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/toplist/detail`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
11
module/user_audio.js
Normal file
11
module/user_audio.js
Normal file
@ -0,0 +1,11 @@
|
||||
// 用户创建的电台
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
userId: query.uid
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/djradio/get/byuser`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/user_cloud.js
Normal file
12
module/user_cloud.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 云盘数据
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 200,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/cloud/get`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/user_cloud_search.js
Normal file
12
module/user_cloud_search.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 云盘数据详情?(暂时不要使用)
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
byids: query.id,
|
||||
id: query.id
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/cloud/get/byids`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/user_detail.js
Normal file
8
module/user_detail.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 用户详情
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/user/detail/${query.uid}`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/user_dj.js
Normal file
12
module/user_dj.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 用户电台节目
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/dj/program/${query.uid}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/user_event.js
Normal file
12
module/user_event.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 用户动态
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
time: -1,
|
||||
getcounts: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/event/get/${query.uid}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/user_followeds.js
Normal file
13
module/user_followeds.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 关注TA的人(粉丝)
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
userId: query.uid,
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/user/getfolloweds`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/user_follows.js
Normal file
13
module/user_follows.js
Normal file
@ -0,0 +1,13 @@
|
||||
// TA关注的人(关注)
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
offset: query.offset || 0,
|
||||
limit: query.limit || 30,
|
||||
order: true
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/user/getfollows/${query.uid}`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
13
module/user_playlist.js
Normal file
13
module/user_playlist.js
Normal file
@ -0,0 +1,13 @@
|
||||
// 用户歌单
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
uid: query.uid,
|
||||
limit: query.limit || 30,
|
||||
offset: query.offset || 0
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/user/playlist`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
12
module/user_record.js
Normal file
12
module/user_record.js
Normal file
@ -0,0 +1,12 @@
|
||||
// 听歌排行
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
uid: query.uid,
|
||||
type: query.type || 1 // 1: 最近一周, 0: 所有时间
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/v1/play/record`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
8
module/user_subcount.js
Normal file
8
module/user_subcount.js
Normal file
@ -0,0 +1,8 @@
|
||||
// 收藏计数
|
||||
|
||||
module.exports = (query, request) => {
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/subcount`, {},
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
17
module/user_update.js
Normal file
17
module/user_update.js
Normal file
@ -0,0 +1,17 @@
|
||||
// 编辑用户信息
|
||||
|
||||
module.exports = (query, request) => {
|
||||
const data = {
|
||||
avatarImgId: "0",
|
||||
birthday: query.birthday,
|
||||
city: query.city,
|
||||
gender: query.gender,
|
||||
nickname: query.nickname,
|
||||
province: query.province,
|
||||
signature: query.signature
|
||||
}
|
||||
return request(
|
||||
'POST', `http://music.163.com/weapi/user/profile/update`, data,
|
||||
{crypto: 'weapi', cookie: query.cookie, proxy: query.proxy}
|
||||
)
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user