diff --git a/app.js b/app.js index f2f5cdc..b356f7d 100644 --- a/app.js +++ b/app.js @@ -94,6 +94,45 @@ fs.readdirSync(path.resolve(__dirname, 'router')) app.use(route, Wrap(require('./router/' + file))) }) + const requestMod = require('./util/request') + let dev = express() + fs.readdirSync(path.resolve(__dirname, 'module')) + .reverse() + .forEach(file => { + if (/\.js$/i.test(file) === false) { + return + } + + let route + + if (typeof UnusualRouteFileMap[file] !== 'undefined') { + route = UnusualRouteFileMap[file] + } else { + route = + '/' + + file + .replace(/\.js$/i, '') + .replace(/_/g, '/') + } + + dev.use(route, (req, res) => { + let question = require('./module/' + file) + let query = {...req.query, cookie: req.headers.cookie} + question(query, requestMod) + .then(answer => { + console.log('[OK]', req.originalUrl) + res.append('Set-Cookie', answer.cookie) + res.status(answer.code).send(answer.body) + }) + .catch( answer => { + console.log('[ERROR]', req.originalUrl) + res.append('Set-Cookie', answer.cookie) + res.status(answer.code).send(answer.body) + }) + }) + }) + app.use('/dev', dev) + const port = process.env.PORT || 3000 app.server = app.listen(port, () => { diff --git a/module/album.js b/module/album.js new file mode 100644 index 0000000..638effd --- /dev/null +++ b/module/album.js @@ -0,0 +1,26 @@ +// 获取专辑内容 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// const id = req.query.id; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/album/${id}`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/v1/album/${query.id}`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/artist_album.js b/module/artist_album.js new file mode 100644 index 0000000..e2bdfff --- /dev/null +++ b/module/artist_album.js @@ -0,0 +1,32 @@ +// 获取歌手专辑列表 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.id; +// const data = { +// offset: req.query.offset || 0, +// total: true, +// limit: req.query.limit || 30, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/artist/albums/${id}`, +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + limit: query.limit || 30, + total: true + } + return request( + 'POST', `http://music.163.com/weapi/artist/albums/${query.id}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} diff --git a/module/artist_desc.js b/module/artist_desc.js new file mode 100644 index 0000000..22f805a --- /dev/null +++ b/module/artist_desc.js @@ -0,0 +1,27 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.id; +// const data = { +// id, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/artist/introduction`, +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} diff --git a/module/artist_list.js b/module/artist_list.js new file mode 100644 index 0000000..c933467 --- /dev/null +++ b/module/artist_list.js @@ -0,0 +1,58 @@ +// 歌手分类 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + +// // categoryCode 取值 + +// // 入驻歌手 5001 +// // 华语男歌手 1001 +// // 华语女歌手 1002 +// // 华语组合/乐队 1003 +// // 欧美男歌手 2001 +// // 欧美女歌手 2002 +// // 欧美组合/乐队 2003 +// // 日本男歌手 6001 +// // 日本女歌手 6002 +// // 日本组合/乐队 6003 +// // 韩国男歌手 7001 +// // 韩国女歌手 7002 +// // 韩国组合/乐队 7003 +// // 其他男歌手 4001 +// // 其他女歌手 4002 +// // 其他组合/乐队 4003 + +// // initial 取值a-z/A-Z + +// const data = { +// categoryCode: req.query.cat || "1001", +// offset: req.query.offset || 0, +// total: req.query.total ? "true" : "false", +// limit: req.query.limit || 30, +// initial: (req.query.initial || "").toUpperCase().charCodeAt() || "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/artist/list", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + categoryCode: query.cat || "1001", + offset: query.offset || 0, + total: query.total ? "true" : "false", + limit: query.limit || 30, + initial: (query.initial || "").toUpperCase().charCodeAt() || "" + } + return request( + 'POST', `http://music.163.com/weapi/artist/list`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/artist_mv.js b/module/artist_mv.js new file mode 100644 index 0000000..e72e134 --- /dev/null +++ b/module/artist_mv.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.id; +// const data = { +// artistId: id, +// total: true, +// offset: req.query.offset, +// limit: req.query.limit, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/artist/mvs`, +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + artistId: query.id, + total: true, + offset: query.offset, + limit: query.limit + } + return request( + 'POST', `http://music.163.com/weapi/artist/mvs`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} diff --git a/module/artist_sub.js b/module/artist_sub.js new file mode 100644 index 0000000..2c37b0a --- /dev/null +++ b/module/artist_sub.js @@ -0,0 +1,29 @@ +// 收藏歌手 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// artistId: `${req.query.id}` +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/artist/sub", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + artistId: query.id + } + return request( + 'POST', `http://music.163.com/weapi/artist/sub`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} + diff --git a/module/artist_sublist.js b/module/artist_sublist.js new file mode 100644 index 0000000..a26efa1 --- /dev/null +++ b/module/artist_sublist.js @@ -0,0 +1,33 @@ +// 已关注歌手 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + +// const data = { +// offset: req.query.offset || 0, +// total: req.query.total ? "true" : "false", +// limit: req.query.limit || 25 +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/artist/sublist", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + total: query.total ? "true" : "false", + limit: query.limit || 25 + } + return request( + 'POST', `http://music.163.com/weapi/artist/sublist`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/artist_unsub.js b/module/artist_unsub.js new file mode 100644 index 0000000..dfd6dba --- /dev/null +++ b/module/artist_unsub.js @@ -0,0 +1,30 @@ +// 取消收藏歌手 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// artistId: `${req.query.id}`, +// artistIds: `[${req.query.id}]` +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/artist/unsub", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + artistId: `${query.id}`, + artistIds: `[${query.id}]` + } + return request( + 'POST', `http://music.163.com/weapi/artist/unsub`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} diff --git a/module/artists.js b/module/artists.js new file mode 100644 index 0000000..1a1d837 --- /dev/null +++ b/module/artists.js @@ -0,0 +1,28 @@ +// 获取歌手单曲 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.id; + +// const data = { +// csrf_token: "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/artist/${id}`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/v1/artist/${query.id}`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} diff --git a/module/banner.js b/module/banner.js new file mode 100644 index 0000000..66b585e --- /dev/null +++ b/module/banner.js @@ -0,0 +1,41 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const options = { +// url: "http://music.163.com/discover", +// method: "GET", +// headers: { +// "Referer": "http://music.163.com", +// "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3380.0 Safari/537.36" +// } +// }; +// request(options, (error, response, body) => { +// if (error) { +// res.status(502).send("fetch error"); +// } else { +// try { +// const banners = /Gbanners\s*=\s*([^;]+);/.exec(body)[1]; +// res.send(JSON.stringify(eval(`({code:200,banners:${banners}})`))); +// } catch (error) { +// res.status(502).send("fetch error"); +// } +// } +// }); +// }; + +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.code = 500 + response.body = {code: 500, msg: err.stack} + return Promise.reject(response) + } + }) +} \ No newline at end of file diff --git a/module/check_music.js b/module/check_music.js new file mode 100644 index 0000000..a1f04f2 --- /dev/null +++ b/module/check_music.js @@ -0,0 +1,53 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const id = parseInt(req.query.id) +// const br = parseInt(req.query.br || 999000) +// const data = { +// ids: [id], +// br: br, +// csrf_token: '' +// } +// const cookie = req.get('Cookie') ? req.get('Cookie') : '' + +// createWebAPIRequest( +// 'music.163.com', +// '/weapi/song/enhance/player/url', +// 'POST', +// data, +// cookie, +// music_req => { +// music_req = JSON.parse(music_req) +// if (music_req.code == 200) { +// if (music_req.data[0].code == 200){ +// return res.send({ success: true, message: 'ok' }) +// } +// } +// return res.send({ success: false, message: '亲爱的,暂无版权' }) +// }, +// err => { +// res.status(502).send('fetch error') +// } +// ) +// } + +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 => { + let body = JSON.parse(response.body) + if (body.code == 200) { + if (body.data[0].code == 200){ + response.body = JSON.stringify({success: true, message: 'ok'}) + return response + } + } + response.code = 404 + response.body = JSON.stringify({success: false, message: '亲爱的,暂无版权'}) + return Promise.reject(response) + }) +} diff --git a/module/comment.js b/module/comment.js new file mode 100644 index 0000000..97e97bd --- /dev/null +++ b/module/comment.js @@ -0,0 +1,70 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// const id = req.query.id +// const action = req.query.action == 1 ? 'add' : 'delete' +// const typeMap = { +// 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_' // 视频 +// } +// const type = typeMap[req.query.type] + +// let data = { +// threadId: `${type}${id}`, +// csrf_token: '' +// } + +// if (action == 'add') { +// data = { +// ...data, +// content: req.query.content +// } +// } + +// if (action == 'delete') { +// data = { +// ...data, +// commentId: req.query.commentId +// } +// } + +// const url = `/weapi/resource/comments/${action}` + +// // console.log({ url, data }) +// createWebAPIRequest( +// 'music.163.com', +// url, +// 'POST', +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send('fetch error') +// ) +// } + +module.exports = (query, request) => { + query.cookie = 'os=pc;' + query.cookie + query.action = (query.action == 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(action == 'add') + data.content = query.content + else if(action == 'delete') + data.commentId = query.commentId + return request( + 'POST', `http://music.163.com/weapi/resource/comments/${query.action}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/comment_album.js b/module/comment_album.js new file mode 100644 index 0000000..caaa93b --- /dev/null +++ b/module/comment_album.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.id; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// offset: req.query.offset || 0, +// rid: rid, +// limit: req.query.limit || 20, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/resource/comments/R_AL_3_${rid}/?csrf_token=`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + rid: query.id, + limit: query.limit || 20, + } + 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} + ) +} \ No newline at end of file diff --git a/module/comment_dj.js b/module/comment_dj.js new file mode 100644 index 0000000..4634a83 --- /dev/null +++ b/module/comment_dj.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.id; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// offset: req.query.offset || 0, +// rid: rid, +// limit: req.query.limit || 20, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/resource/comments/A_DJ_1_${rid}/?csrf_token=`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + rid: query.id, + limit: query.limit || 20, + } + 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} + ) +} \ No newline at end of file diff --git a/module/comment_hot.js b/module/comment_hot.js new file mode 100644 index 0000000..dce5bb4 --- /dev/null +++ b/module/comment_hot.js @@ -0,0 +1,51 @@ +// module.exports = (req, res, createWebAPIRequest) => { +// let cookie = req.get('Cookie') ? req.get('Cookie') : '' +// cookie = 'os=pc;' + cookie +// const rid = req.query.id +// const typeMap = { +// 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_' // 视频 +// } +// const type = typeMap[req.query.type] +// const data = { +// offset: req.query.offset || 0, +// rid: rid, +// limit: req.query.limit || 20, +// csrf_token: '' +// } +// const url = `/weapi/v1/resource/hotcomments/${type}${rid}` +// createWebAPIRequest( +// 'music.163.com', +// url, +// 'POST', +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send('fetch error') +// ) +// } + +module.exports = (query, request) => { + query.cookie = 'os=pc;' + query.cookie + 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 = { + offset: query.offset || 0, + rid: query.id, + limit: query.limit || 20 + } + return request( + 'POST', `http://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/comment_like.js b/module/comment_like.js new file mode 100644 index 0000000..5f5908c --- /dev/null +++ b/module/comment_like.js @@ -0,0 +1,54 @@ +//comment like +// module.exports = (req, res, createWebAPIRequest, request) => { +// let cookie = req.get('Cookie') ? req.get('Cookie') : '' +// cookie = 'os=pc;' + cookie +// const cid = req.query.cid //评论 id +// const id = req.query.id +// const typeMap = { +// 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_' // 视频 +// } +// const type = typeMap[req.query.type] +// const data = { +// threadId: `${type}${id}`, +// commentId: cid, +// csrf_token: '' +// } +// const action = req.query.t == 1 ? 'like' : 'unlike' + +// const url = `/weapi/v1/comment/${action}` +// createWebAPIRequest( +// 'music.163.com', +// url, +// 'POST', +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send('fetch error') +// ) +// } + +module.exports = (query, request) => { + query.cookie = 'os=pc;' + query.cookie + 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} + ) +} \ No newline at end of file diff --git a/module/comment_music.js b/module/comment_music.js new file mode 100644 index 0000000..950a806 --- /dev/null +++ b/module/comment_music.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.id; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// offset: req.query.offset || 0, +// rid: rid, +// limit: req.query.limit || 20, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/resource/comments/R_SO_4_${rid}/?csrf_token=`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send(err.message) +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + rid: query.id, + limit: query.limit || 20 + } + 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} + ) +} \ No newline at end of file diff --git a/module/comment_mv.js b/module/comment_mv.js new file mode 100644 index 0000000..4ccbb04 --- /dev/null +++ b/module/comment_mv.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.id; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// offset: req.query.offset || 0, +// rid: rid, +// limit: req.query.limit || 20, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/resource/comments/R_MV_5_${rid}/?csrf_token=`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + rid: query.id, + limit: query.limit || 20 + } + 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} + ) +} \ No newline at end of file diff --git a/module/comment_playlist.js b/module/comment_playlist.js new file mode 100644 index 0000000..6417b50 --- /dev/null +++ b/module/comment_playlist.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.id; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// offset: req.query.offset || 0, +// rid: rid, +// limit: req.query.limit || 20, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/resource/comments/A_PL_0_${rid}/?csrf_token=`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + rid: query.id, + limit: query.limit || 20 + } + 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} + ) +} \ No newline at end of file diff --git a/module/comment_video.js b/module/comment_video.js new file mode 100644 index 0000000..bb7477e --- /dev/null +++ b/module/comment_video.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.id +// const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// const data = { +// offset: req.query.offset || 0, +// rid: rid, +// limit: req.query.limit || 20, +// csrf_token: '' +// } +// createWebAPIRequest( +// 'music.163.com', +// `/weapi/v1/resource/comments/R_VI_62_${rid}/?csrf_token=`, +// 'POST', +// data, +// cookie, +// music_req => { +// res.send(music_req) +// }, +// err => res.status(502).send('fetch error') +// ) +// } + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + rid: query.id, + limit: query.limit || 20 + } + 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} + ) +} \ No newline at end of file diff --git a/module/daily_signin.js b/module/daily_signin.js new file mode 100644 index 0000000..f87b964 --- /dev/null +++ b/module/daily_signin.js @@ -0,0 +1,32 @@ +// 签到 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// let type = req.query.type || 0; //0为安卓端签到 3点经验,1为网页签到,2点经验 +// const data = { +// csrf_token: "", +// type +// }; +// // {'android': {'point': 3, 'code': 200}, 'web': {'point': 2, 'code': 200}} +// // {'android': {'code': -2, 'msg': '重复签到'}, 'web': {'code': -2, 'msg': '重复签到'}} +// // 'android': {'code': 301}, 'web': {'code': 301}} + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/point/dailyTask", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/dj_catelist.js b/module/dj_catelist.js new file mode 100644 index 0000000..4544ac5 --- /dev/null +++ b/module/dj_catelist.js @@ -0,0 +1,24 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/category/get", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/djradio/category/get`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/dj_detail.js b/module/dj_detail.js new file mode 100644 index 0000000..dc2be45 --- /dev/null +++ b/module/dj_detail.js @@ -0,0 +1,30 @@ +//djradio detail +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.rid; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// id: rid, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/get", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/dj_hot.js b/module/dj_hot.js new file mode 100644 index 0000000..3664fed --- /dev/null +++ b/module/dj_hot.js @@ -0,0 +1,40 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// cat: req.query.type, +// cateId: req.query.type, +// type: req.query.type, +// categoryId: req.query.type, +// category: req.query.type, +// limit: req.query.limit, +// offset: req.query.offset, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/hot/v1", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/dj_paygift.js b/module/dj_paygift.js new file mode 100644 index 0000000..9cb1e2a --- /dev/null +++ b/module/dj_paygift.js @@ -0,0 +1,31 @@ +// 付费电台 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "", +// limit: req.query.limit || 10, +// offset: req.query.offset || 0, +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/home/paygift/list?_nmclfl=1", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/dj_program.js b/module/dj_program.js new file mode 100644 index 0000000..938ffc7 --- /dev/null +++ b/module/dj_program.js @@ -0,0 +1,36 @@ +//dj主播 radio +// module.exports = (req, res, createWebAPIRequest, request) => { +// const rid = req.query.rid; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// asc: req.query.asc, +// radioId: rid, +// limit: req.query.limit || 30, +// offset: req.query.offset || 0, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/dj/program/byradio", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + asc: query.asc, + radioId: query.rid, + limit: query.limit || 30, + offset: query.offset || 0 + } + return request( + 'POST', `http://music.163.com/weapi/dj/program/byradio`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/dj_program_detail.js b/module/dj_program_detail.js new file mode 100644 index 0000000..3e54754 --- /dev/null +++ b/module/dj_program_detail.js @@ -0,0 +1,28 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// id: req.query.id, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/dj/program/detail", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/dj_recommend.js b/module/dj_recommend.js new file mode 100644 index 0000000..7552da5 --- /dev/null +++ b/module/dj_recommend.js @@ -0,0 +1,25 @@ +// 精选电台 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/recommend/v1", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/djradio/recommend/v1`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} diff --git a/module/dj_recommend_type.js b/module/dj_recommend_type.js new file mode 100644 index 0000000..9d503ee --- /dev/null +++ b/module/dj_recommend_type.js @@ -0,0 +1,29 @@ +//精选电台-分类电台 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// cateId: req.query.type, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/recommend", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/dj_sub.js b/module/dj_sub.js new file mode 100644 index 0000000..cfca269 --- /dev/null +++ b/module/dj_sub.js @@ -0,0 +1,30 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// id: req.query.rid, +// csrf_token: "" +// }; +// const action = req.query.t == 1 ? "sub" : "unsub"; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/djradio/${action}`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/dj_sublist.js b/module/dj_sublist.js new file mode 100644 index 0000000..0782eae --- /dev/null +++ b/module/dj_sublist.js @@ -0,0 +1,32 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + +// const data = { +// offset: req.query.offset || 0, +// total: req.query.total ? "true" : "false", +// limit: req.query.limit || 30 +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/get/subed", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: query.offset || 0, + total: query.total ? "true" : "false", + limit: query.limit || 30 + } + return request( + 'POST', `http://music.163.com/weapi/djradio/get/subed`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/event.js b/module/event.js new file mode 100644 index 0000000..f369e48 --- /dev/null +++ b/module/event.js @@ -0,0 +1,23 @@ +//获取动态 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/event/get", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/v1/event/get`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/fm_trash.js b/module/fm_trash.js new file mode 100644 index 0000000..4d12166 --- /dev/null +++ b/module/fm_trash.js @@ -0,0 +1,31 @@ +//垃圾桶 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const songId = req.query.id; +// const alg = "RT"; +// const time = req.query.time || 25; +// const data = { +// csrf_token: "", +// songId +// }; + +// createWebAPIRequest( +// "music.163.com", +// `/weapi/radio/trash/add?alg=${alg}&songId=${songId}&time=${time}`, +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/follow.js b/module/follow.js new file mode 100644 index 0000000..e31f0ac --- /dev/null +++ b/module/follow.js @@ -0,0 +1,27 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// const url = req.query.type == "add" ? "follow" : "delfollow"; +// const id = req.query.id; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/user/${url}/${id}`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + query.type = (query.type == "add" ? "follow" : "delfollow") + return request( + 'POST', `http://music.163.com/weapi/user/${query.type}/${query.id}`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/like.js b/module/like.js new file mode 100644 index 0000000..821e6b8 --- /dev/null +++ b/module/like.js @@ -0,0 +1,33 @@ +// 喜欢歌曲 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const trackId = req.query.id; +// const like = req.query.like || true; +// const alg = req.query.alg || "itembased"; +// const time = req.query.time || 25; +// const data = { +// csrf_token: "", +// trackId, +// like +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/radio/like?alg=${alg}&trackId=${trackId}&like=${like}&time=${time}`, +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + trackId: query.id, + like: query.like || true + } + return request( + 'POST', `http://music.163.com/weapi/radio/like?alg=${query.alg || 'itembased'}&trackId=${query.id}&like=${data.like}&time=${query.time || 25}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/likelist.js b/module/likelist.js new file mode 100644 index 0000000..8ab9d9e --- /dev/null +++ b/module/likelist.js @@ -0,0 +1,28 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// uid: req.query.uid, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/song/like/get`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/login.js b/module/login.js new file mode 100644 index 0000000..5efe482 --- /dev/null +++ b/module/login.js @@ -0,0 +1,41 @@ +const crypto = require('crypto') + +//邮箱登录 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const email = req.query.email +// const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// const md5sum = crypto.createHash('md5') +// md5sum.update(req.query.password) +// const data = { +// username: email, +// password: md5sum.digest('hex'), +// rememberLogin: 'true' +// } +// console.log(email, req.query.password) + +// createWebAPIRequest( +// 'music.163.com', +// '/weapi/login', +// 'POST', +// data, +// cookie, +// (music_req, cookie) => { +// // console.log(music_req) +// res.append("Set-Cookie", cookie) +// res.send(music_req) +// }, +// err => res.status(502).send('fetch error') +// ) +// } + +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', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/login_cellphone.js b/module/login_cellphone.js new file mode 100644 index 0000000..426d536 --- /dev/null +++ b/module/login_cellphone.js @@ -0,0 +1,38 @@ +const crypto = require("crypto") + +//手机登录 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const phone = req.query.phone; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const md5sum = crypto.createHash("md5"); +// md5sum.update(req.query.password); +// const data = { +// phone: phone, +// password: md5sum.digest("hex"), +// rememberLogin: "true" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/login/cellphone", +// "POST", +// data, +// cookie, +// (music_req, cookie) => { +// res.append("Set-Cookie", cookie); +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/login_refresh.js b/module/login_refresh.js new file mode 100644 index 0000000..dd7221f --- /dev/null +++ b/module/login_refresh.js @@ -0,0 +1,26 @@ +//登录刷新 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/login/token/refresh`, +// "POST", +// data, +// cookie, +// (music_req, cookie) => { +// res.append("Set-Cookie", cookie); +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/login/token/refresh`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/login_status.js b/module/login_status.js new file mode 100644 index 0000000..d507cbf --- /dev/null +++ b/module/login_status.js @@ -0,0 +1,43 @@ +//登录状态 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// createWebAPIRequest( +// "music.163.com", +// "/", +// "GET", +// {}, +// cookie, +// music_req => { +// try { +// var profile = /GUser\s*=\s*([^;]+);/.exec(music_req)[1]; +// var bindings = /GBinds\s*=\s*([^;]+);/.exec(music_req)[1]; +// profile = eval(`(${profile})`); +// bindings = eval(`(${bindings})`); +// res.send({code: 200, profile: profile, bindings: bindings}); +// } catch (error) { +// res.status(502).send("fetch error"); +// } +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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.code = 301 + response.body = {code: 301} + return Promise.reject(response) + } + }) +} \ No newline at end of file diff --git a/module/logout.js b/module/logout.js new file mode 100644 index 0000000..e9e9b23 --- /dev/null +++ b/module/logout.js @@ -0,0 +1,23 @@ +//登出 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// createWebAPIRequest( +// 'music.163.com', +// '/weapi/logout', +// 'POST', +// {}, +// cookie, +// (music_req, cookie) => { +// res.append("Set-Cookie", cookie) +// res.send(music_req) +// }, +// err => res.status(502).send('fetch error') +// ) +// } + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/logout`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/lyric.js b/module/lyric.js new file mode 100644 index 0000000..4bf66be --- /dev/null +++ b/module/lyric.js @@ -0,0 +1,24 @@ +// 获取歌词 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = {}; +// const id = req.query.id; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/song/lyric?os=osx&id=" + id + "&lv=-1&kv=-1&tv=-1", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/music_url.js b/module/music_url.js new file mode 100644 index 0000000..95e0745 --- /dev/null +++ b/module/music_url.js @@ -0,0 +1,37 @@ +// 获取音乐 url +// module.exports = (req, res, createWebAPIRequest, request) => { +// const id = req.query.id; +// const br = req.query.br || 999000; +// const data = { +// ids: [id], +// br: br, +// csrf_token: "" +// }; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/song/enhance/player/url", +// "POST", +// data, +// cookie, +// music_req => { +// res.setHeader("Content-Type", "application/json"); +// res.send(music_req); +// }, +// err => { +// res.status(502).send("fetch error"); +// } +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/mv.js b/module/mv.js new file mode 100644 index 0000000..904f3ec --- /dev/null +++ b/module/mv.js @@ -0,0 +1,30 @@ +//mv +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const mvid = req.query.mvid; +// const data = { +// id: mvid +// }; + +// createWebAPIRequest( +// "music.163.com", +// `/weapi/mv/detail`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} diff --git a/module/mv_first.js b/module/mv_first.js new file mode 100644 index 0000000..9df6874 --- /dev/null +++ b/module/mv_first.js @@ -0,0 +1,33 @@ +//最新mv + +// type ALL, ZH,EA,KR,JP +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// // 'offset': req.query.offset || 0, +// total: true, +// limit: req.query.limit || 30, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/mv/first", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + // 'offset': req.query.offset || 0, + limit: req.query.limit || 30, + total: true + } + return request( + 'POST', `http://music.163.com/weapi/mv/first`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/mv_url.js b/module/mv_url.js new file mode 100644 index 0000000..8971e65 --- /dev/null +++ b/module/mv_url.js @@ -0,0 +1,18 @@ +module.exports = (req, res, createWebAPIRequest, request) => { + const url = req.query.url; + const headers = { + Referer: "http://music.163.com/", + Cookie: "appver=1.5.0.75771;", + "Content-Type": "video/mp4", + Location: url + }; + const options = { + header: headers, + url: url + }; + request(options) + .on("error", err => { + res.send({ err }); + }) + .pipe(res); +}; diff --git a/module/personal_fm.js b/module/personal_fm.js new file mode 100644 index 0000000..60482c1 --- /dev/null +++ b/module/personal_fm.js @@ -0,0 +1,23 @@ +// 私人 FM +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/radio/get", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/v1/radio/get`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/personalized.js b/module/personalized.js new file mode 100644 index 0000000..d4e7a8e --- /dev/null +++ b/module/personalized.js @@ -0,0 +1,35 @@ +//推荐歌单 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// limit: req.query.limit || 30, +// offset: req.query.limit || 0, +// total: true, +// n: 1000, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/personalized/playlist", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/personalized_djprogram.js b/module/personalized_djprogram.js new file mode 100644 index 0000000..e23dd75 --- /dev/null +++ b/module/personalized_djprogram.js @@ -0,0 +1,23 @@ +//推荐dj +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = {}; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/personalized/djprogram", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/personalized/djprogram`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/personalized_mv.js b/module/personalized_mv.js new file mode 100644 index 0000000..529a56d --- /dev/null +++ b/module/personalized_mv.js @@ -0,0 +1,23 @@ +//推荐mv +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = {}; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/personalized/mv", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/personalized/mv`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/personalized_newsong.js b/module/personalized_newsong.js new file mode 100644 index 0000000..ad4ae33 --- /dev/null +++ b/module/personalized_newsong.js @@ -0,0 +1,28 @@ +//推荐新音乐 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// type: "recommend" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/personalized/newsong", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/personalized_privatecontent.js b/module/personalized_privatecontent.js new file mode 100644 index 0000000..907c34a --- /dev/null +++ b/module/personalized_privatecontent.js @@ -0,0 +1,23 @@ +//独家放送 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = {}; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/personalized/privatecontent", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/personalized/privatecontent`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/playlist_catlist.js b/module/playlist_catlist.js new file mode 100644 index 0000000..cd236fd --- /dev/null +++ b/module/playlist_catlist.js @@ -0,0 +1,25 @@ +// 全部歌单分类 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/playlist/catalogue", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/playlist/catalogue`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/playlist_create.js b/module/playlist_create.js new file mode 100644 index 0000000..8984300 --- /dev/null +++ b/module/playlist_create.js @@ -0,0 +1,28 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// name: req.query.name, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/playlist/create", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + name: query.name + } + return request( + 'POST', `http://music.163.com/weapi/playlist/create`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/playlist_detail.js b/module/playlist_detail.js new file mode 100644 index 0000000..9a0db43 --- /dev/null +++ b/module/playlist_detail.js @@ -0,0 +1,38 @@ +// 获取歌单内列表 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// id: req.query.id, +// n: 100000, +// s: req.query.s || 8, +// csrf_token: "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v3/playlist/detail`, +// "POST", +// data, +// cookie, +// music_req => { +// // console.log(JSON.parse(music_req).playlist.tracks.length) +// // console.log(JSON.parse(music_req).playlist.trackIds.length) +// res.send(music_req); +// }, +// err => { +// res.status(502).send("fetch error"); +// } +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/playlist_hot.js b/module/playlist_hot.js new file mode 100644 index 0000000..b6cd3df --- /dev/null +++ b/module/playlist_hot.js @@ -0,0 +1,23 @@ +// 热门歌单分类 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = {}; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/playlist/hottags", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/playlist/hottags`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/playlist_subscribe.js b/module/playlist_subscribe.js new file mode 100644 index 0000000..54e408f --- /dev/null +++ b/module/playlist_subscribe.js @@ -0,0 +1,30 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// id: req.query.id, +// csrf_token: "" +// }; +// const action = req.query.t == 1 ? "subscribe" : "unsubscribe"; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/playlist/${action}`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/playlist_tracks.js b/module/playlist_tracks.js new file mode 100644 index 0000000..418a8a7 --- /dev/null +++ b/module/playlist_tracks.js @@ -0,0 +1,39 @@ +//收藏单曲到歌单,从歌单删除歌曲 op=del,add;pid=歌单id,tracks=歌曲id +// module.exports = (req, res, createWebAPIRequest, request) => { +// const op = req.query.op; +// const pid = req.query.pid; +// // const tracks = req.query.tracks.split(',') +// const tracks = req.query.tracks; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// // console.log('COOKIESS', cookie) +// const data = { +// op: op, +// pid: pid, +// // tracks: (tracks.length == 1) ? tracks[0] : Array.apply(null,{length:tracks.length}).map(()=>({})).join(','), +// // trackIds: (tracks.length == 1) ? JSON.stringify(tracks) : `[${tracks.join(',')}]` +// trackIds: `[${tracks}]`, +// csrf_token: "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/playlist/manipulate/tracks", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + op: query.op, + pid: query.pid, + trackIds: '[' + query.tracks + ']' + } + return request( + 'POST', `http://music.163.com/weapi/playlist/manipulate/tracks`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/playlist_update.js b/module/playlist_update.js new file mode 100644 index 0000000..3acb53c --- /dev/null +++ b/module/playlist_update.js @@ -0,0 +1,41 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const playlist_id = req.query.id; +// const desc_detail = req.query.desc || ""; +// const tags_detail = req.query.tags || ""; +// const name_detail = req.query.name; +// const data = { +// "/api/playlist/desc/update": +// '{"id":' + playlist_id + ',"desc":"' + desc_detail + '"}', +// "/api/playlist/tags/update": +// '{"id":' + playlist_id + ',"tags":"' + tags_detail + '"}', +// "/api/playlist/update/name": +// '{"id":' + playlist_id + ',"name":"' + name_detail + '"}', +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/batch", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + query.desc = query.desc || '' + query.tags = query.tags || '' + const data = { + "/api/playlist/desc/update": `{"id":${query.id},"desc":"${query.desc}"}`, + "/api/playlist/tags/update": `{"id":${query.id},"desc":"${query.tags}"}`, + "/api/playlist/update/name": `{"id":${query.id},"desc":"${query.name}"}` + } + return request( + 'POST', `http://music.163.com/weapi/batch`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/program_recommend.js b/module/program_recommend.js new file mode 100644 index 0000000..a3967a5 --- /dev/null +++ b/module/program_recommend.js @@ -0,0 +1,29 @@ +//推荐节目 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// cateId: req.query.type, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/program/recommend/v1", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + cateId: query.type + } + return request( + 'POST', `http://music.163.com/weapi/program/recommend/v1`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} diff --git a/module/recommend_dislike.js b/module/recommend_dislike.js new file mode 100644 index 0000000..72db86b --- /dev/null +++ b/module/recommend_dislike.js @@ -0,0 +1,24 @@ +//取消推荐 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/radio/get", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/v1/radio/get`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/recommend_resource.js b/module/recommend_resource.js new file mode 100644 index 0000000..0394231 --- /dev/null +++ b/module/recommend_resource.js @@ -0,0 +1,24 @@ +// 获取每日推荐歌单 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/discovery/recommend/resource", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + return request( + 'POST', `http://music.163.com/weapi/v1/discovery/recommend/resource`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/recommend_songs.js b/module/recommend_songs.js new file mode 100644 index 0000000..097ed4d --- /dev/null +++ b/module/recommend_songs.js @@ -0,0 +1,32 @@ +// 获取每日推荐歌曲 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// offset: 0, +// total: true, +// limit: 20, +// csrf_token: "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/discovery/recommend/songs", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + offset: 0, + limit: 20, + total: true + } + return request( + 'POST', `http://music.163.com/weapi/v1/discovery/recommend/resource`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/related_playlist.js b/module/related_playlist.js new file mode 100644 index 0000000..b11934f --- /dev/null +++ b/module/related_playlist.js @@ -0,0 +1,68 @@ +//related ,相关歌单 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const options = { +// url: "http://music.163.com/playlist?id=" + req.query.id, +// method: "GET", +// headers: { +// Referer: "http://music.163.com", +// "User-Agent": +// "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3380.0 Safari/537.36" +// } +// }; +// request(options, (error, response, body) => { +// if (error) { +// res.status(502).send("fetch error"); +// } else { +// try { +// const pattern = /