From 08b5d5af273fb9e944bc7819e171e9c4e724adda Mon Sep 17 00:00:00 2001 From: Nzix Date: Sun, 30 Sep 2018 20:45:10 +0800 Subject: [PATCH 1/7] change router export mode --- app.js | 39 ++++++++++++ module/album.js | 26 ++++++++ module/artist_album.js | 32 ++++++++++ module/artist_desc.js | 27 ++++++++ module/artist_list.js | 58 ++++++++++++++++++ module/artist_mv.js | 33 ++++++++++ module/artist_sub.js | 29 +++++++++ module/artist_sublist.js | 33 ++++++++++ module/artist_unsub.js | 30 +++++++++ module/artists.js | 28 +++++++++ module/banner.js | 41 +++++++++++++ module/check_music.js | 53 ++++++++++++++++ module/comment.js | 70 +++++++++++++++++++++ module/comment_album.js | 33 ++++++++++ module/comment_dj.js | 33 ++++++++++ module/comment_hot.js | 51 ++++++++++++++++ module/comment_like.js | 54 ++++++++++++++++ module/comment_music.js | 33 ++++++++++ module/comment_mv.js | 33 ++++++++++ module/comment_playlist.js | 33 ++++++++++ module/comment_video.js | 33 ++++++++++ module/daily_signin.js | 32 ++++++++++ module/dj_catelist.js | 24 ++++++++ module/dj_detail.js | 30 +++++++++ module/dj_hot.js | 40 ++++++++++++ module/dj_paygift.js | 31 ++++++++++ module/dj_program.js | 36 +++++++++++ module/dj_program_detail.js | 28 +++++++++ module/dj_recommend.js | 25 ++++++++ module/dj_recommend_type.js | 29 +++++++++ module/dj_sub.js | 30 +++++++++ module/dj_sublist.js | 32 ++++++++++ module/event.js | 23 +++++++ module/fm_trash.js | 31 ++++++++++ module/follow.js | 27 ++++++++ module/like.js | 33 ++++++++++ module/likelist.js | 28 +++++++++ module/login.js | 41 +++++++++++++ module/login_cellphone.js | 38 ++++++++++++ module/login_refresh.js | 26 ++++++++ module/login_status.js | 43 +++++++++++++ module/logout.js | 23 +++++++ module/lyric.js | 24 ++++++++ module/music_url.js | 37 +++++++++++ module/mv.js | 30 +++++++++ module/mv_first.js | 33 ++++++++++ module/mv_url.js | 18 ++++++ module/personal_fm.js | 23 +++++++ module/personalized.js | 35 +++++++++++ module/personalized_djprogram.js | 23 +++++++ module/personalized_mv.js | 23 +++++++ module/personalized_newsong.js | 28 +++++++++ module/personalized_privatecontent.js | 23 +++++++ module/playlist_catlist.js | 25 ++++++++ module/playlist_create.js | 28 +++++++++ module/playlist_detail.js | 38 ++++++++++++ module/playlist_hot.js | 23 +++++++ module/playlist_subscribe.js | 30 +++++++++ module/playlist_tracks.js | 39 ++++++++++++ module/playlist_update.js | 41 +++++++++++++ module/program_recommend.js | 29 +++++++++ module/recommend_dislike.js | 24 ++++++++ module/recommend_resource.js | 24 ++++++++ module/recommend_songs.js | 32 ++++++++++ module/related_playlist.js | 68 +++++++++++++++++++++ module/resource_like.js | 30 +++++++++ module/search.js | 39 ++++++++++++ module/search_hot.js | 29 +++++++++ module/search_multimatch.js | 32 ++++++++++ module/search_suggest.js | 30 +++++++++ module/send_playlist.js | 33 ++++++++++ module/send_text.js | 34 +++++++++++ module/simi_artist.js | 27 ++++++++ module/simi_mv.js | 26 ++++++++ module/simi_playlist.js | 28 +++++++++ module/simi_song.js | 28 +++++++++ module/simi_user.js | 28 +++++++++ module/song_detail.js | 34 +++++++++++ module/top_album.js | 38 ++++++++++++ module/top_artists.js | 33 ++++++++++ module/top_list.js | 88 +++++++++++++++++++++++++++ module/top_mv.js | 34 +++++++++++ module/top_playlist.js | 37 +++++++++++ module/top_playlist_highquality.js | 33 ++++++++++ module/top_song.js | 25 ++++++++ module/toplist.js | 25 ++++++++ module/toplist_artist.js | 19 ++++++ module/toplist_detail.js | 31 ++++++++++ module/user_audio.js | 34 +++++++++++ module/user_cloud.js | 34 +++++++++++ module/user_cloud_search.js | 34 +++++++++++ module/user_detail.js | 26 ++++++++ module/user_dj.js | 32 ++++++++++ module/user_event.js | 32 ++++++++++ module/user_followeds.js | 32 ++++++++++ module/user_follows.js | 32 ++++++++++ module/user_playlist.js | 33 ++++++++++ module/user_record.js | 32 ++++++++++ module/user_subcount.js | 22 +++++++ module/user_update.js | 43 +++++++++++++ module/video.js | 25 ++++++++ module/weblog.js | 24 ++++++++ util/init.js | 2 +- util/request.js | 83 +++++++++++++++++++++++++ 104 files changed, 3430 insertions(+), 1 deletion(-) create mode 100644 module/album.js create mode 100644 module/artist_album.js create mode 100644 module/artist_desc.js create mode 100644 module/artist_list.js create mode 100644 module/artist_mv.js create mode 100644 module/artist_sub.js create mode 100644 module/artist_sublist.js create mode 100644 module/artist_unsub.js create mode 100644 module/artists.js create mode 100644 module/banner.js create mode 100644 module/check_music.js create mode 100644 module/comment.js create mode 100644 module/comment_album.js create mode 100644 module/comment_dj.js create mode 100644 module/comment_hot.js create mode 100644 module/comment_like.js create mode 100644 module/comment_music.js create mode 100644 module/comment_mv.js create mode 100644 module/comment_playlist.js create mode 100644 module/comment_video.js create mode 100644 module/daily_signin.js create mode 100644 module/dj_catelist.js create mode 100644 module/dj_detail.js create mode 100644 module/dj_hot.js create mode 100644 module/dj_paygift.js create mode 100644 module/dj_program.js create mode 100644 module/dj_program_detail.js create mode 100644 module/dj_recommend.js create mode 100644 module/dj_recommend_type.js create mode 100644 module/dj_sub.js create mode 100644 module/dj_sublist.js create mode 100644 module/event.js create mode 100644 module/fm_trash.js create mode 100644 module/follow.js create mode 100644 module/like.js create mode 100644 module/likelist.js create mode 100644 module/login.js create mode 100644 module/login_cellphone.js create mode 100644 module/login_refresh.js create mode 100644 module/login_status.js create mode 100644 module/logout.js create mode 100644 module/lyric.js create mode 100644 module/music_url.js create mode 100644 module/mv.js create mode 100644 module/mv_first.js create mode 100644 module/mv_url.js create mode 100644 module/personal_fm.js create mode 100644 module/personalized.js create mode 100644 module/personalized_djprogram.js create mode 100644 module/personalized_mv.js create mode 100644 module/personalized_newsong.js create mode 100644 module/personalized_privatecontent.js create mode 100644 module/playlist_catlist.js create mode 100644 module/playlist_create.js create mode 100644 module/playlist_detail.js create mode 100644 module/playlist_hot.js create mode 100644 module/playlist_subscribe.js create mode 100644 module/playlist_tracks.js create mode 100644 module/playlist_update.js create mode 100644 module/program_recommend.js create mode 100644 module/recommend_dislike.js create mode 100644 module/recommend_resource.js create mode 100644 module/recommend_songs.js create mode 100644 module/related_playlist.js create mode 100644 module/resource_like.js create mode 100644 module/search.js create mode 100644 module/search_hot.js create mode 100644 module/search_multimatch.js create mode 100644 module/search_suggest.js create mode 100644 module/send_playlist.js create mode 100644 module/send_text.js create mode 100644 module/simi_artist.js create mode 100644 module/simi_mv.js create mode 100644 module/simi_playlist.js create mode 100644 module/simi_song.js create mode 100644 module/simi_user.js create mode 100644 module/song_detail.js create mode 100644 module/top_album.js create mode 100644 module/top_artists.js create mode 100644 module/top_list.js create mode 100644 module/top_mv.js create mode 100644 module/top_playlist.js create mode 100644 module/top_playlist_highquality.js create mode 100644 module/top_song.js create mode 100644 module/toplist.js create mode 100644 module/toplist_artist.js create mode 100644 module/toplist_detail.js create mode 100644 module/user_audio.js create mode 100644 module/user_cloud.js create mode 100644 module/user_cloud_search.js create mode 100644 module/user_detail.js create mode 100644 module/user_dj.js create mode 100644 module/user_event.js create mode 100644 module/user_followeds.js create mode 100644 module/user_follows.js create mode 100644 module/user_playlist.js create mode 100644 module/user_record.js create mode 100644 module/user_subcount.js create mode 100644 module/user_update.js create mode 100644 module/video.js create mode 100644 module/weblog.js create mode 100644 util/request.js 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 = /
[\s\S]*?[\s\S]*?]*>([^<]+?)<\/a>[\s\S]*?]*>([^<]+?)<\/a>/g; +// const data = {playlists:[],code:200}; +// let result; +// while ((result = pattern.exec(body)) != null) { +// data.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) +// }); +// } +// res.send(JSON.stringify(data)); +// } catch (error) { +// res.status(502).send("fetch error"); +// } +// } +// }); +// }; + +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 = /
[\s\S]*?[\s\S]*?]*>([^<]+?)<\/a>[\s\S]*?]*>([^<]+?)<\/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.code = 500 + response.body = {code: 500, msg: err.stack} + return Promise.reject(response) + } + }) +} diff --git a/module/resource_like.js b/module/resource_like.js new file mode 100644 index 0000000..ee83bb9 --- /dev/null +++ b/module/resource_like.js @@ -0,0 +1,30 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// threadId: req.query.id, +// csrf_token: "" +// }; +// const action = req.query.t == 1 ? "like" : "unlike"; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/resource/${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 ? "like" : "unlike") + const data = { + threadId: req.query.id + } + return request( + 'POST', `http://music.163.com/weapi/resource/${query.t}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/search.js b/module/search.js new file mode 100644 index 0000000..6aedb66 --- /dev/null +++ b/module/search.js @@ -0,0 +1,39 @@ +// 搜索 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// const keywords = req.query.keywords +// const type = req.query.type || 1 +// const limit = req.query.limit || 30 +// const offset = req.query.offset || 0 +// // *(type)* 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 +// const data = { +// csrf_token: '', +// limit, +// type, +// s: keywords, +// offset +// } + +// createWebAPIRequest( +// 'music.163.com', +// '/weapi/search/get', +// 'POST', +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send('fetch error') +// ) +// } + +module.exports = (query, request) => { + const data = { + s: query.keywords, + type: query.type || 1, + 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} + ) +} \ No newline at end of file diff --git a/module/search_hot.js b/module/search_hot.js new file mode 100644 index 0000000..5addc0a --- /dev/null +++ b/module/search_hot.js @@ -0,0 +1,29 @@ +// 热搜 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// type: 1111 +// }; +// const id = req.query.id; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/search/hot", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + type: 1111 + } + return request( + 'POST', `http://music.163.com/weapi/search/hot`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/search_multimatch.js b/module/search_multimatch.js new file mode 100644 index 0000000..ca11384 --- /dev/null +++ b/module/search_multimatch.js @@ -0,0 +1,32 @@ +//搜索 multimatch +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "", +// type: req.query.type || 1, +// s: req.query.keywords || "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/search/suggest/multimatch", +// "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 || 1, + s: query.keywords || '' + } + return request( + 'POST', `http://music.163.com/weapi/search/suggest/multimatch`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/search_suggest.js b/module/search_suggest.js new file mode 100644 index 0000000..7d19c76 --- /dev/null +++ b/module/search_suggest.js @@ -0,0 +1,30 @@ +// 搜索 suggest,搜索结果包含单曲,歌手,歌单,mv信息 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "", +// s: req.query.keywords || "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/search/suggest/web", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + s: req.query.keywords || '' + } + return request( + 'POST', `http://music.163.com/weapi/search/suggest/web`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/send_playlist.js b/module/send_playlist.js new file mode 100644 index 0000000..e90cf6e --- /dev/null +++ b/module/send_playlist.js @@ -0,0 +1,33 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const user_ids = req.query.user_ids; +// const data = { +// id: req.query.playlist, +// type: "playlist", +// msg: req.query.msg, +// userIds: "[" + user_ids + "]", +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/msg/private/send`, +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + id: query.playlist, + type: 'playlist', + msg: query.msg, + userIds: '[' + user_ids + ']' + } + return request( + 'POST', `http://music.163.com/weapi/msg/private/send`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/send_text.js b/module/send_text.js new file mode 100644 index 0000000..c61e79c --- /dev/null +++ b/module/send_text.js @@ -0,0 +1,34 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// // user_id must be [id] +// const user_ids = req.query.user_ids; +// const data = { +// type: "text", +// msg: req.query.msg, +// userIds: "[" + user_ids + "]", +// csrf_token: "" +// }; +// console.log(data); +// createWebAPIRequest( +// "music.163.com", +// `/weapi/msg/private/send`, +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + id: query.playlist, + type: 'text', + msg: query.msg, + userIds: '[' + user_ids + ']' + } + return request( + 'POST', `http://music.163.com/weapi/msg/private/send`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/simi_artist.js b/module/simi_artist.js new file mode 100644 index 0000000..1322248 --- /dev/null +++ b/module/simi_artist.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 = { +// artistid: id, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/discovery/simiArtist`, +// "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/discovery/simiArtist`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/simi_mv.js b/module/simi_mv.js new file mode 100644 index 0000000..5c188fa --- /dev/null +++ b/module/simi_mv.js @@ -0,0 +1,26 @@ +//相似 mv +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// mvid: req.query.mvid +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/discovery/simiMV", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/simi_playlist.js b/module/simi_playlist.js new file mode 100644 index 0000000..8f72078 --- /dev/null +++ b/module/simi_playlist.js @@ -0,0 +1,28 @@ +//simi ,相似歌单 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// songid: req.query.id +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/discovery/simiPlaylist", +// "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/discovery/simiPlaylist`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/simi_song.js b/module/simi_song.js new file mode 100644 index 0000000..bf87a47 --- /dev/null +++ b/module/simi_song.js @@ -0,0 +1,28 @@ +//simi ,相似歌曲 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// songid: req.query.id +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/discovery/simiSong", +// "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/v1/discovery/simiSong`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/simi_user.js b/module/simi_user.js new file mode 100644 index 0000000..80734c8 --- /dev/null +++ b/module/simi_user.js @@ -0,0 +1,28 @@ +//simi ,相似关注的用户 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// songid: req.query.id +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/discovery/simiUser", +// "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/discovery/simiUser`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/song_detail.js b/module/song_detail.js new file mode 100644 index 0000000..680bad4 --- /dev/null +++ b/module/song_detail.js @@ -0,0 +1,34 @@ +// 获取音乐详情 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = parseInt(req.query.ids); +// const data = { +// // "id": id, +// c: JSON.stringify([{ id: id }]), +// ids: "[" + id + "]", +// csrf_token: "" +// }; +// console.log(data); +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v3/song/detail", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + c: JSON.stringify([{ id: query.ids }]), + ids: '[' + query.ids + ']' + } + return request( + 'POST', `http://music.163.com/weapi/v3/song/detail`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/top_album.js b/module/top_album.js new file mode 100644 index 0000000..de418e8 --- /dev/null +++ b/module/top_album.js @@ -0,0 +1,38 @@ +//最新mv +// 新碟上架 http://music.163.com/#/discover/album/ + +// 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 || 50, +// area: req.query.type, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/album/new", +// "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 || 50, + area: query.type, + total: true + } + return request( + 'POST', `http://music.163.com/weapi/album/new`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/top_artists.js b/module/top_artists.js new file mode 100644 index 0000000..d08a1d5 --- /dev/null +++ b/module/top_artists.js @@ -0,0 +1,33 @@ +// 热门歌手 http://music.163.com/#/discover/artist/ +// 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 || 50, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/artist/top`, +// "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 || 50, + total: true + } + return request( + 'POST', `http://music.163.com/weapi/artist/top`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/top_list.js b/module/top_list.js new file mode 100644 index 0000000..7680a5c --- /dev/null +++ b/module/top_list.js @@ -0,0 +1,88 @@ +// const top_list_all = { +// "0": ["云音乐新歌榜", "3779629"], +// "1": ["云音乐热歌榜", "3778678"], +// "2": ["网易原创歌曲榜", "2884035"], +// "3": ["云音乐飙升榜", "19723756"], +// "4": ["云音乐电音榜", "10520166"], +// "5": ["UK排行榜周榜", "180106"], +// "6": ["美国Billboard周榜", "60198"], +// "7": ["KTV嗨榜", "21845217"], +// "8": ["iTunes榜", "11641012"], +// "9": ["Hit FM Top榜", "120001"], +// "10": ["日本Oricon周榜", "60131"], +// "11": ["韩国Melon排行榜周榜", "3733003"], +// "12": ["韩国Mnet排行榜周榜", "60255"], +// "13": ["韩国Melon原声周榜", "46772709"], +// "14": ["中国TOP排行榜(港台榜)", "112504"], +// "15": ["中国TOP排行榜(内地榜)", "64016"], +// "16": ["香港电台中文歌曲龙虎榜", "10169002"], +// "17": ["华语金曲榜", "4395559"], +// "18": ["中国嘻哈榜", "1899724"], +// "19": ["法国 NRJ EuroHot 30周榜", "27135204"], +// "20": ["台湾Hito排行榜", "112463"], +// "21": ["Beatport全球电子舞曲榜", "3812895"], +// "22": ["云音乐ACG音乐榜", "71385702"], +// "23": ["云音乐嘻哈榜", "991319590"] +// }; +// module.exports = (req, res, createWebAPIRequest, request) => { +// const idx = req.query.idx; +// const id = top_list_all[idx][1]; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const action = "/weapi/v3/playlist/detail"; +// const data = { +// id, +// n: 10000, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// action, +// "POST", +// data, +// cookie, +// music_req => { +// res.setHeader("Content-Type", "application/json"); +// // 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") +// ); +// }; +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} + ) +} \ No newline at end of file diff --git a/module/top_mv.js b/module/top_mv.js new file mode 100644 index 0000000..2abbf60 --- /dev/null +++ b/module/top_mv.js @@ -0,0 +1,34 @@ +// 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/toplist", +// "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 = { + offset: query.offset || 0, + limit: query.limit || 30, + total: true + } + return request( + 'POST', `http://music.163.com/weapi/mv/toplist`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/top_playlist.js b/module/top_playlist.js new file mode 100644 index 0000000..e438290 --- /dev/null +++ b/module/top_playlist.js @@ -0,0 +1,37 @@ +//分类歌单 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// // order可为 'hot' 可为 'new' +// const data = { +// cat: req.query.cat || "全部", +// order: req.query.order || "hot", +// offset: req.query.offset || 0, +// total: req.query.total ? "true" : "false", +// limit: req.query.limit || 50 +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/playlist/list", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + cat: query.cat || '全部', + order: query.order || 'hot', + offset: query.offset || 0, + total: query.total ? 'true' : 'false', + limit: query.limit || 50 + } + return request( + 'POST', `http://music.163.com/weapi/playlist/list`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/top_playlist_highquality.js b/module/top_playlist_highquality.js new file mode 100644 index 0000000..1407411 --- /dev/null +++ b/module/top_playlist_highquality.js @@ -0,0 +1,33 @@ +//精品歌单 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// cat: req.query.cat || "全部", +// offset: req.query.offset || 0, +// limit: req.query.limit || 20, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/playlist/highquality/list", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + cat: query.cat || '全部', + offset: query.offset || 0, + limit: query.limit || 20 + } + return request( + 'POST', `http://music.163.com/weapi/playlist/highquality/list`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/top_song.js b/module/top_song.js new file mode 100644 index 0000000..534ffd2 --- /dev/null +++ b/module/top_song.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/v1/discovery/new/songs", +// "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/new/songs`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/toplist.js b/module/toplist.js new file mode 100644 index 0000000..2d2d5cf --- /dev/null +++ b/module/toplist.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/toplist", +// "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/toplist`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/toplist_artist.js b/module/toplist_artist.js new file mode 100644 index 0000000..2604a25 --- /dev/null +++ b/module/toplist_artist.js @@ -0,0 +1,19 @@ +//歌手榜 +module.exports = (req, res, createWebAPIRequest, request) => { + const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + const data = { + type: req.query.type, + csrf_token: "" + }; + createWebAPIRequest( + "music.163.com", + "/eapi/toplist/artist?params=B5CAE4715306477C2EFA74D383640F01BF227BF8E889F80E2E2A442958463A7E589CC99878CFCE88D165B64712332AF39EC61B7E68903B2F9F079E8D1AB99FC61049A6D5B97AF8E6FFE8DA16ED540D2CFA80205B889ACA39F8B05AE593FDF5A094F118FF4600C2025094ECF6EB58F6D424B7A97B21A8C1D7CF0609AF2FBE9FDD88826E1667C889757BA920684C5C425FF01B5514AF1EB08AB7D298DB4D65187829E315F9FFBBEB43C2AE3DC21222B31CEC6FF337957AC122FBCB3E793FC1960151B0BDEBB1565BFD835E7A7D6A2D034A5591070D42C32DA4B69E0061C46D61239221A1C64EF676D891B44D7B855E27C82A7EB376F0B0C27952F2006E302B47DA1DE86C3488D53FD98ED9FDC6AA341DF0ECF92BA2E8F77E41811BF9447973C5C34FFED13E28AC544347F9E6ADF4B0008C371FC41C4490D3C9E1A225791D2170326231C40662633AA93D5CEF9AABC777AF268A4B13C560157339478DFAD5D910C966B43E1F017410DBF06D189E2BD6D0CD2682F343A83994E66CA73B5E2A67A122842BF945F2B434CBDE4C5A589A3A90F70DF1A8B63E7BAFBEB624956C62CFB1114AB841379541E5BB4625F2C28CAEA6A67E77A7EEAA1149D9D0F7E190D3A3408DF88B62FBF27996ABC925A93E5A67B4B0D1D931214BB07064F2BA4DCBA2E548E5A110E9B992C21E3930EB488172929C02C06D76BB193EF923D1906E0A0C4D75F5EB909AE77B0A2E55539A182D0B2533C654F2C90A038406B8850BFC022639F2B3FB7EDF40FD74AEA0B9119E9987D2909C01C587794F53459DB8EE83AA8D15FBEAC71EB3A00D8E40E78FE9A9A4068495D9257B39D8F825086F391FD5E7A48AACA96BC261E334A1929C81633234A0B22C573AEAD05BC8B4216283ACFD9E022950AEC812F554B913B4457FDF68AA2CC5E476922C2670D49154BC1DEB6D464F60DBFAD2BB4144762CD3721F52D42FDAE56DB9C529EDB6FB946CD725B3E2EA2AFDCF3F759D384B4F7F75AAA6F01F8093C8A140B3B388FF57272A6A7E10274290A79CDCA69E37BC066CE8CCD5B4BB4E12DA841B", + "POST", + data, + cookie, + music_req => { + res.send(music_req); + }, + err => res.status(502).send("fetch error") + ); +}; diff --git a/module/toplist_detail.js b/module/toplist_detail.js new file mode 100644 index 0000000..9185ca2 --- /dev/null +++ b/module/toplist_detail.js @@ -0,0 +1,31 @@ +// 排行榜详情 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// id: req.query.id, +// limit: 20, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/toplist/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, + limit: 20 + } + return request( + 'POST', `http://music.163.com/weapi/toplist/detail`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_audio.js b/module/user_audio.js new file mode 100644 index 0000000..1a92864 --- /dev/null +++ b/module/user_audio.js @@ -0,0 +1,34 @@ +// 获取用户电台 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const data = { +// userId: req.query.uid, +// csrf_token: "" +// }; +// console.log(data); +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/djradio/get/byuser", +// "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 = { + userId: req.query.uid + } + return request( + 'POST', `http://music.163.com/weapi/djradio/get/byuser`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_cloud.js b/module/user_cloud.js new file mode 100644 index 0000000..2bb203d --- /dev/null +++ b/module/user_cloud.js @@ -0,0 +1,34 @@ +//云盘数据 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const data = { +// limit: req.query.limit || 10, +// offset: req.query.offset || 0, +// csrf_token: "" +// }; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/cloud/get", +// "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 = { + limit: query.limit || 10, + offset: query.offset || 0 + } + return request( + 'POST', `http://music.163.com/weapi/v1/cloud/get`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_cloud_search.js b/module/user_cloud_search.js new file mode 100644 index 0000000..a8f7a12 --- /dev/null +++ b/module/user_cloud_search.js @@ -0,0 +1,34 @@ +//云盘数据详情? 暂时不要使用 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const data = { +// byids: req.query.id, +// id: req.query.id, +// csrf_token: "" +// }; +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/v1/cloud/get/byids", +// "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 = { + 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} + ) +} \ No newline at end of file diff --git a/module/user_detail.js b/module/user_detail.js new file mode 100644 index 0000000..6793448 --- /dev/null +++ b/module/user_detail.js @@ -0,0 +1,26 @@ +// 用户详情 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.uid; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/v1/user/detail/${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/user/detail/${query.id}`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_dj.js b/module/user_dj.js new file mode 100644 index 0000000..14dc6eb --- /dev/null +++ b/module/user_dj.js @@ -0,0 +1,32 @@ +// 用户电台 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.uid; +// const data = { +// offset: req.query.offset || "0", +// limit: req.query.limit || 30, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/dj/program/${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, + } + return request( + 'POST', `http://music.163.com/weapi/dj/program/${query.uid}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_event.js b/module/user_event.js new file mode 100644 index 0000000..b4eb8fa --- /dev/null +++ b/module/user_event.js @@ -0,0 +1,32 @@ +//用户动态 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.uid; +// const data = { +// time: -1, +// getcounts: true, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/event/get/${id}`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/user_followeds.js b/module/user_followeds.js new file mode 100644 index 0000000..1d51347 --- /dev/null +++ b/module/user_followeds.js @@ -0,0 +1,32 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// userId: req.query.uid, +// offset: req.query.offset || "0", +// limit: req.query.limit || 30, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/user/getfolloweds/`, +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + userId: query.uid, + offset: query.offset || 0, + limit: query.limit || 30, + } + return request( + 'POST', `http://music.163.com/weapi/user/getfolloweds`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_follows.js b/module/user_follows.js new file mode 100644 index 0000000..4dbfba8 --- /dev/null +++ b/module/user_follows.js @@ -0,0 +1,32 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const id = req.query.uid; +// const data = { +// offset: req.query.offset || "0", +// limit: req.query.limit || 30, +// order: true +// }; +// createWebAPIRequest( +// "music.163.com", +// `/weapi/user/getfollows/${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, + order: true + } + return request( + 'POST', `http://music.163.com/weapi/user/getfollows/${query.uid}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_playlist.js b/module/user_playlist.js new file mode 100644 index 0000000..6d204e8 --- /dev/null +++ b/module/user_playlist.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, +// uid: req.query.uid, +// limit: req.query.limit || 30, //貌似无效 +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/user/playlist", +// "POST", +// data, +// cookie, +// music_req => { +// res.send(music_req); +// // console.log(JSON.parse(music_req)) +// }, +// err => res.status(502).send("fetch error") +// ); +// }; + +module.exports = (query, request) => { + const data = { + uid: query.uid, + offset: query.offset || 0, + } + return request( + 'POST', `http://music.163.com/weapi/user/playlist`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_record.js b/module/user_record.js new file mode 100644 index 0000000..7412ba5 --- /dev/null +++ b/module/user_record.js @@ -0,0 +1,32 @@ +//播放记录 +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; + +// // type=1时只返回weekData, type=0时返回allData +// const data = { +// type: req.query.type || 0, +// uid: req.query.uid, //用户 id, +// csrf_token: "" +// }; +// const action = `/weapi/v1/play/record`; +// createWebAPIRequest( +// "music.163.com", +// action, +// "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, + uid: query.uid, + } + return request( + 'POST', `http://music.163.com/weapi/v1/play/record`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_subcount.js b/module/user_subcount.js new file mode 100644 index 0000000..fb483cf --- /dev/null +++ b/module/user_subcount.js @@ -0,0 +1,22 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/subcount", +// "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/subcount`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/user_update.js b/module/user_update.js new file mode 100644 index 0000000..6ce49c5 --- /dev/null +++ b/module/user_update.js @@ -0,0 +1,43 @@ +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// // 暂时不提供更换头像接口 +// // gender为0表示保密,1为男性,2为女性 +// const gender_type = req.query.gender; +// // birthday 为unix13位时间戳 +// // province_number and city_number +// const data = { +// avatarImgId: "0", +// birthday: req.query.birthday, +// city: req.query.city, +// gender: gender_type, +// nickname: req.query.nickname, +// province: req.query.province, +// signature: req.query.signature, +// csrf_token: "" +// }; +// createWebAPIRequest( +// "music.163.com", +// "/weapi/user/profile/update", +// "POST", +// data, +// cookie, +// music_req => res.send(music_req), +// err => res.status(502).send("fetch error") +// ); +// }; + +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} + ) +} \ No newline at end of file diff --git a/module/video.js b/module/video.js new file mode 100644 index 0000000..9d06c36 --- /dev/null +++ b/module/video.js @@ -0,0 +1,25 @@ +// video +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get('Cookie') ? req.get('Cookie') : '' +// const videoId = req.query.id +// const data = {} + +// createWebAPIRequest( +// 'music.163.com', +// `/api/cloudvideo/playurl?ids=['${videoId}']&resolution=720`, +// '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/api/cloudvideo/playurl?ids=['${query.id}']&resolution=720`, {}, + {cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/weblog.js b/module/weblog.js new file mode 100644 index 0000000..f8ee320 --- /dev/null +++ b/module/weblog.js @@ -0,0 +1,24 @@ +// 不明 api +// module.exports = (req, res, createWebAPIRequest, request) => { +// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; +// const data = { +// csrf_token: "" +// }; + +// createWebAPIRequest( +// "music.163.com", +// "/weapi/feedback/weblog", +// "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/feedback/weblog`, {}, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/util/init.js b/util/init.js index bf36199..1aa3a74 100644 --- a/util/init.js +++ b/util/init.js @@ -4,7 +4,7 @@ function randomString(pattern, length){ function completeCookie(cookie){ let origin = (cookie || '').split(/;\s*/).map(element => (element.split('=')[0])), extra = [] - let now = (new Date).getTime() + let now = Date.now() if(!origin.includes('JSESSIONID-WYYY')){ let expire = new Date(now + 1800000) //30 minutes diff --git a/util/request.js b/util/request.js new file mode 100644 index 0000000..7b65d77 --- /dev/null +++ b/util/request.js @@ -0,0 +1,83 @@ +const encrypt = require('./crypto.js') +const request = require('request') +const queryString = require('querystring') + +request.debug = false + +function chooseUserAgent(ua) { + const userAgentList = [ + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1', + 'Mozilla/5.0 (Linux; Android 5.0; SM-G900P Build/LRX21T) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36', + 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36', + 'Mozilla/5.0 (Linux; Android 5.1.1; Nexus 6 Build/LYZ28E) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Mobile Safari/537.36', + 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_2 like Mac OS X) AppleWebKit/603.2.4 (KHTML, like Gecko) Mobile/14F89;GameHelper', + 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1', + 'Mozilla/5.0 (iPad; CPU OS 10_0 like Mac OS X) AppleWebKit/602.1.38 (KHTML, like Gecko) Version/10.0 Mobile/14A300 Safari/602.1', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:46.0) Gecko/20100101 Firefox/46.0', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36', + 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/603.2.4 (KHTML, like Gecko) Version/10.1.1 Safari/603.2.4', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:46.0) Gecko/20100101 Firefox/46.0', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36', + 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/13.10586' + ] + let index = 0 + if(typeof(ua) == 'undefined') + index = Math.floor(Math.random() * userAgentList.length) + else if(ua == 'mobile') + index = Math.floor(Math.random() * 7) + else if(ua == 'pc') + index = Math.floor(Math.random() * 5) + 8 + else + return ua + return userAgentList[index] +} + +function createRequest(method, url, data, options){ + return new Promise((resolve, reject) => { + + if(options.crypto == 'weapi'){ + const csrfToken = (options.cookie || '').match(/_csrf=([^(;|$)]+)/) + data.csrf_token = (csrfToken ? csrfToken[1] : '') + data = encrypt(data) + } + + let headers = {'User-Agent': chooseUserAgent(options.ua)} + if(options.cookie) headers['Cookie'] = options.cookie + if(method.toUpperCase() == 'POST') headers['Content-Type'] = 'application/x-www-form-urlencoded' + if(url.indexOf('music.163.com') != -1) headers['Referer'] = 'http://music.163.com' + + const answer = { + code: 500, + body: {code: 500}, + cookie: [] + } + + request( + {method: method, url: url, headers: headers, body: queryString.stringify(data), proxy: options.proxy}, + (err, res, body) => { + if(err){ + answer.body = {code: 500, msg: err.stack} + reject(answer) + } + else{ + answer.cookie = (res.headers['set-cookie'] || []).map(x => x.replace(/\s*Domain=[^(;|$)]+;*/, '')) + try{ + answer.body = JSON.parse(body) + answer.code = answer.body.code || res.statusCode + } + catch(e){ + answer.body = body + answer.code = res.statusCode + } + if(answer.code == 200) + resolve(answer) + else + reject(answer) + } + } + ) + }) +} + +module.exports = createRequest From b84fb38a7d20bf01ecdf44344174958329678252 Mon Sep 17 00:00:00 2001 From: Nzix Date: Sun, 30 Sep 2018 21:31:01 +0800 Subject: [PATCH 2/7] fix copy faults --- module/check_music.js | 17 +++++++++-------- module/mv_first.js | 4 ++-- module/resource_like.js | 2 +- module/search_suggest.js | 2 +- module/user_audio.js | 2 +- util/request.js | 9 +++++---- 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/module/check_music.js b/module/check_music.js index a1f04f2..fc53e47 100644 --- a/module/check_music.js +++ b/module/check_music.js @@ -39,15 +39,16 @@ module.exports = (query, request) => { {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'}) + if (response.body.code == 200) { + if (response.body.data[0].code == 200){ + response.body = {success: true, message: 'ok'} return response } } - response.code = 404 - response.body = JSON.stringify({success: false, message: '亲爱的,暂无版权'}) - return Promise.reject(response) + else{ + response.code = 404 + response.body = {success: false, message: '亲爱的,暂无版权'} + return Promise.reject(response) + } }) -} +} \ No newline at end of file diff --git a/module/mv_first.js b/module/mv_first.js index 9df6874..79103ec 100644 --- a/module/mv_first.js +++ b/module/mv_first.js @@ -22,8 +22,8 @@ module.exports = (query, request) => { const data = { - // 'offset': req.query.offset || 0, - limit: req.query.limit || 30, + // 'offset': query.offset || 0, + limit: query.limit || 30, total: true } return request( diff --git a/module/resource_like.js b/module/resource_like.js index ee83bb9..9e8a9df 100644 --- a/module/resource_like.js +++ b/module/resource_like.js @@ -21,7 +21,7 @@ module.exports = (query, request) => { query.t = (query.t == 1 ? "like" : "unlike") const data = { - threadId: req.query.id + threadId: query.id } return request( 'POST', `http://music.163.com/weapi/resource/${query.t}`, data, diff --git a/module/search_suggest.js b/module/search_suggest.js index 7d19c76..c734693 100644 --- a/module/search_suggest.js +++ b/module/search_suggest.js @@ -21,7 +21,7 @@ module.exports = (query, request) => { const data = { - s: req.query.keywords || '' + s: query.keywords || '' } return request( 'POST', `http://music.163.com/weapi/search/suggest/web`, data, diff --git a/module/user_audio.js b/module/user_audio.js index 1a92864..879cbfc 100644 --- a/module/user_audio.js +++ b/module/user_audio.js @@ -25,7 +25,7 @@ module.exports = (query, request) => { const data = { - userId: req.query.uid + userId: query.uid } return request( 'POST', `http://music.163.com/weapi/djradio/get/byuser`, data, diff --git a/util/request.js b/util/request.js index 7b65d77..1467340 100644 --- a/util/request.js +++ b/util/request.js @@ -48,8 +48,8 @@ function createRequest(method, url, data, options){ if(url.indexOf('music.163.com') != -1) headers['Referer'] = 'http://music.163.com' const answer = { - code: 500, - body: {code: 500}, + code: 502, + body: {code: 502}, cookie: [] } @@ -57,7 +57,7 @@ function createRequest(method, url, data, options){ {method: method, url: url, headers: headers, body: queryString.stringify(data), proxy: options.proxy}, (err, res, body) => { if(err){ - answer.body = {code: 500, msg: err.stack} + answer.body = {code: 502, msg: err.stack} reject(answer) } else{ @@ -70,9 +70,10 @@ function createRequest(method, url, data, options){ answer.body = body answer.code = res.statusCode } + answer.code = (answer.code < 100 || answer.code > 600) ? 400 : answer.code if(answer.code == 200) resolve(answer) - else + else reject(answer) } } From a37c34092fba386bbe1cb0a1d530b61ce47518a8 Mon Sep 17 00:00:00 2001 From: Nzix Date: Thu, 4 Oct 2018 16:02:28 +0800 Subject: [PATCH 3/7] check every module --- module/album.js | 20 +------- module/artist_album.js | 25 ++-------- module/artist_desc.js | 20 +------- module/artist_list.js | 67 +++++++++------------------ module/artist_mv.js | 27 ++--------- module/artist_sub.js | 28 +++-------- module/artist_sublist.js | 26 ++--------- module/artist_unsub.js | 30 ------------ module/artists.js | 24 +--------- module/banner.js | 25 +--------- module/check_music.js | 33 +------------ module/comment.js | 61 ++++-------------------- module/comment_album.js | 24 +--------- module/comment_dj.js | 24 +--------- module/comment_hot.js | 39 ++-------------- module/comment_like.js | 40 ++-------------- module/comment_music.js | 26 ++--------- module/comment_mv.js | 26 ++--------- module/comment_playlist.js | 26 ++--------- module/comment_video.js | 26 ++--------- module/daily_signin.js | 26 +++-------- module/dj_catelist.js | 18 +------ module/dj_detail.js | 21 +-------- module/dj_hot.js | 25 +--------- module/dj_paygift.js | 19 -------- module/dj_program.js | 28 ++--------- module/dj_program_detail.js | 19 +------- module/dj_recommend.js | 17 ------- module/dj_recommend_type.js | 45 ++++++++++-------- module/dj_sub.js | 24 ++-------- module/dj_sublist.js | 27 ++--------- module/event.js | 17 +------ module/fm_trash.js | 22 +-------- module/follow.js | 24 ++-------- module/like.js | 30 ++---------- module/likelist.js | 21 +-------- module/login.js | 38 +++------------ module/login_cellphone.js | 35 +++----------- module/login_refresh.js | 22 +-------- module/login_status.js | 26 +---------- module/logout.js | 19 +------- module/lyric.js | 18 +------ module/music_url.js | 27 +---------- module/mv.js | 30 ------------ module/mv_detail.js | 11 +++++ module/mv_first.js | 22 +-------- module/mv_sub.js | 13 ++++++ module/mv_url.js | 30 +++++------- module/personal_fm.js | 17 +------ module/personalized.js | 23 +-------- module/personalized_djprogram.js | 17 +------ module/personalized_mv.js | 17 +------ module/personalized_newsong.js | 19 +------- module/personalized_privatecontent.js | 17 +------ module/playlist_catlist.js | 17 ------- module/playlist_create.js | 20 +------- module/playlist_detail.js | 27 +---------- module/playlist_hot.js | 15 ------ module/playlist_subscribe.js | 22 +-------- module/playlist_tracks.js | 34 ++------------ module/playlist_update.js | 35 ++------------ module/program_recommend.js | 26 ++--------- module/recommend_dislike.js | 24 ---------- module/recommend_resource.js | 18 +------ module/recommend_songs.js | 25 ++-------- module/related_allvideo.js | 12 +++++ module/related_playlist.js | 40 +--------------- module/resource_like.js | 29 ++++-------- module/search.js | 27 +---------- module/search_hot.js | 22 +-------- module/search_multimatch.js | 22 +-------- module/search_suggest.js | 21 +-------- module/send_playlist.js | 23 +-------- module/send_text.js | 24 +--------- module/simi_artist.js | 18 +------ module/simi_mv.js | 17 +------ module/simi_playlist.js | 23 ++------- module/simi_song.js | 23 ++------- module/simi_user.js | 23 ++------- module/song_detail.js | 27 ++--------- module/top_album.js | 30 ++---------- module/top_artists.js | 24 +--------- module/top_list.js | 55 ++-------------------- module/top_mv.js | 25 +--------- module/top_playlist.js | 32 ++----------- module/top_playlist_highquality.js | 29 ++---------- module/top_song.js | 19 +------- module/toplist.js | 19 +------- module/toplist_artist.js | 33 ++++++------- module/toplist_detail.js | 27 +---------- module/user_audio.js | 25 +--------- module/user_cloud.js | 24 +--------- module/user_cloud_search.js | 24 +--------- module/user_detail.js | 20 +------- module/user_dj.js | 24 +--------- module/user_event.js | 24 +--------- module/user_followeds.js | 23 +-------- module/user_follows.js | 21 +-------- module/user_playlist.js | 26 ++--------- module/user_record.js | 24 +--------- module/user_subcount.js | 16 +------ module/user_update.js | 28 +---------- module/video.js | 25 ---------- module/video_detail.js | 11 +++++ module/video_sub.js | 12 +++++ module/video_url.js | 12 +++++ module/weblog.js | 18 +------ 107 files changed, 364 insertions(+), 2301 deletions(-) delete mode 100644 module/artist_unsub.js delete mode 100644 module/mv.js create mode 100644 module/mv_detail.js create mode 100644 module/mv_sub.js delete mode 100644 module/recommend_dislike.js create mode 100644 module/related_allvideo.js delete mode 100644 module/video.js create mode 100644 module/video_detail.js create mode 100644 module/video_sub.js create mode 100644 module/video_url.js diff --git a/module/album.js b/module/album.js index 638effd..d8d0ecd 100644 --- a/module/album.js +++ b/module/album.js @@ -1,22 +1,4 @@ -// 获取专辑内容 -// 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( diff --git a/module/artist_album.js b/module/artist_album.js index e2bdfff..8964c2a 100644 --- a/module/artist_album.js +++ b/module/artist_album.js @@ -1,32 +1,13 @@ -// 获取歌手专辑列表 -// 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, + 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} ) -} +} \ No newline at end of file diff --git a/module/artist_desc.js b/module/artist_desc.js index 22f805a..37677a3 100644 --- a/module/artist_desc.js +++ b/module/artist_desc.js @@ -1,20 +1,4 @@ -// 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 = { @@ -24,4 +8,4 @@ module.exports = (query, request) => { 'POST', `http://music.163.com/weapi/artist/introduction`, data, {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} ) -} +} \ No newline at end of file diff --git a/module/artist_list.js b/module/artist_list.js index c933467..7fbce65 100644 --- a/module/artist_list.js +++ b/module/artist_list.js @@ -1,55 +1,34 @@ // 歌手分类 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// // categoryCode 取值 +/* + categoryCode 取值 + 入驻歌手 5001 + 华语男歌手 1001 + 华语女歌手 1002 + 华语组合/乐队 1003 + 欧美男歌手 2001 + 欧美女歌手 2002 + 欧美组合/乐队 2003 + 日本男歌手 6001 + 日本女歌手 6002 + 日本组合/乐队 6003 + 韩国男歌手 7001 + 韩国女歌手 7002 + 韩国组合/乐队 7003 + 其他男歌手 4001 + 其他女歌手 4002 + 其他组合/乐队 4003 -// // 入驻歌手 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") -// ); -// }; + initial 取值 a-z/A-Z +*/ module.exports = (query, request) => { const data = { - categoryCode: query.cat || "1001", + categoryCode: query.cat || '1001', + initial: (query.initial || '').toUpperCase().charCodeAt() || '', offset: query.offset || 0, - total: query.total ? "true" : "false", limit: query.limit || 30, - initial: (query.initial || "").toUpperCase().charCodeAt() || "" + total: true } return request( 'POST', `http://music.163.com/weapi/artist/list`, data, diff --git a/module/artist_mv.js b/module/artist_mv.js index e72e134..8eb953c 100644 --- a/module/artist_mv.js +++ b/module/artist_mv.js @@ -1,33 +1,14 @@ -// 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") -// ); -// }; +// 歌手相关MV module.exports = (query, request) => { const data = { artistId: query.id, - total: true, + limit: query.limit, offset: query.offset, - limit: query.limit + total: true } return request( 'POST', `http://music.163.com/weapi/artist/mvs`, data, {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} ) -} +} \ No newline at end of file diff --git a/module/artist_sub.js b/module/artist_sub.js index 2c37b0a..05bc4cf 100644 --- a/module/artist_sub.js +++ b/module/artist_sub.js @@ -1,29 +1,13 @@ -// 收藏歌手 -// 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) => { + query.t = (query.t == 1 ? 'sub' : 'unsub') const data = { - artistId: query.id + artistId: query.id, + artistIds: '[' + query.id + ']' } return request( - 'POST', `http://music.163.com/weapi/artist/sub`, data, + 'POST', `http://music.163.com/weapi/artist/${query.t}`, data, {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} ) -} - +} \ No newline at end of file diff --git a/module/artist_sublist.js b/module/artist_sublist.js index a26efa1..d4d8096 100644 --- a/module/artist_sublist.js +++ b/module/artist_sublist.js @@ -1,30 +1,10 @@ -// 已关注歌手 -// 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 = { + limit: query.limit || 25, offset: query.offset || 0, - total: query.total ? "true" : "false", - limit: query.limit || 25 + total: true } return request( 'POST', `http://music.163.com/weapi/artist/sublist`, data, diff --git a/module/artist_unsub.js b/module/artist_unsub.js deleted file mode 100644 index dfd6dba..0000000 --- a/module/artist_unsub.js +++ /dev/null @@ -1,30 +0,0 @@ -// 取消收藏歌手 -// 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 index 1a1d837..a9efd17 100644 --- a/module/artists.js +++ b/module/artists.js @@ -1,28 +1,8 @@ -// 获取歌手单曲 -// 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} ) -} +} \ No newline at end of file diff --git a/module/banner.js b/module/banner.js index 66b585e..869bd2a 100644 --- a/module/banner.js +++ b/module/banner.js @@ -1,25 +1,4 @@ -// 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( @@ -33,7 +12,7 @@ module.exports = (query, request) => { return response } catch(err){ - response.code = 500 + response.status = 500 response.body = {code: 500, msg: err.stack} return Promise.reject(response) } diff --git a/module/check_music.js b/module/check_music.js index fc53e47..8d11dff 100644 --- a/module/check_music.js +++ b/module/check_music.js @@ -1,33 +1,4 @@ -// 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 = { @@ -46,7 +17,7 @@ module.exports = (query, request) => { } } else{ - response.code = 404 + response.status = 404 response.body = {success: false, message: '亲爱的,暂无版权'} return Promise.reject(response) } diff --git a/module/comment.js b/module/comment.js index 97e97bd..5f163d0 100644 --- a/module/comment.js +++ b/module/comment.js @@ -1,70 +1,25 @@ -// 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.cookie = 'os=pc; ' + query.cookie + query.t = (query.t == 1 ? 'add' : 'delete') query.type = { 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // mv + 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}` + threadId: query.type + query.id } - if(action == 'add') + if(query.t == 'add') data.content = query.content - else if(action == 'delete') + else if(query.t == 'delete') data.commentId = query.commentId return request( - 'POST', `http://music.163.com/weapi/resource/comments/${query.action}`, data, + 'POST', `http://music.163.com/weapi/resource/comments/${query.t}`, 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 index caaa93b..da56f03 100644 --- a/module/comment_album.js +++ b/module/comment_album.js @@ -1,30 +1,10 @@ -// 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, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, data, diff --git a/module/comment_dj.js b/module/comment_dj.js index 4634a83..c436a35 100644 --- a/module/comment_dj.js +++ b/module/comment_dj.js @@ -1,30 +1,10 @@ -// 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, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, data, diff --git a/module/comment_hot.js b/module/comment_hot.js index dce5bb4..7a08bfc 100644 --- a/module/comment_hot.js +++ b/module/comment_hot.js @@ -1,48 +1,19 @@ -// 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.cookie = 'os=pc; ' + query.cookie query.type = { 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // mv + 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 + limit: query.limit || 20, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, data, diff --git a/module/comment_like.js b/module/comment_like.js index 5f5908c..ddcc12c 100644 --- a/module/comment_like.js +++ b/module/comment_like.js @@ -1,50 +1,18 @@ -//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.cookie = 'os=pc; ' + query.cookie query.t = (query.t == 1 ? 'like' : 'unlike') query.type = { 0: 'R_SO_4_', // 歌曲 - 1: 'R_MV_5_', // mv + 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}`, + threadId: query.type + query.id, commentId: query.cid } return request( diff --git a/module/comment_music.js b/module/comment_music.js index 950a806..afb3315 100644 --- a/module/comment_music.js +++ b/module/comment_music.js @@ -1,30 +1,10 @@ -// 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 + 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, diff --git a/module/comment_mv.js b/module/comment_mv.js index 4ccbb04..57133bf 100644 --- a/module/comment_mv.js +++ b/module/comment_mv.js @@ -1,30 +1,10 @@ -// 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") -// ); -// }; +// MV评论 module.exports = (query, request) => { const data = { - offset: query.offset || 0, rid: query.id, - limit: query.limit || 20 + 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, diff --git a/module/comment_playlist.js b/module/comment_playlist.js index 6417b50..1431483 100644 --- a/module/comment_playlist.js +++ b/module/comment_playlist.js @@ -1,30 +1,10 @@ -// 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 + 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, diff --git a/module/comment_video.js b/module/comment_video.js index bb7477e..7df4221 100644 --- a/module/comment_video.js +++ b/module/comment_video.js @@ -1,30 +1,10 @@ -// 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 + 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, diff --git a/module/daily_signin.js b/module/daily_signin.js index f87b964..f0ba150 100644 --- a/module/daily_signin.js +++ b/module/daily_signin.js @@ -1,25 +1,11 @@ // 签到 -// 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") -// ); -// }; +/* + 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 = { diff --git a/module/dj_catelist.js b/module/dj_catelist.js index 4544ac5..d64709f 100644 --- a/module/dj_catelist.js +++ b/module/dj_catelist.js @@ -1,20 +1,4 @@ -// 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( diff --git a/module/dj_detail.js b/module/dj_detail.js index dc2be45..35fe0c4 100644 --- a/module/dj_detail.js +++ b/module/dj_detail.js @@ -1,23 +1,4 @@ -//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 = { diff --git a/module/dj_hot.js b/module/dj_hot.js index 3664fed..175294d 100644 --- a/module/dj_hot.js +++ b/module/dj_hot.js @@ -1,27 +1,4 @@ -// 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 = { diff --git a/module/dj_paygift.js b/module/dj_paygift.js index 9cb1e2a..2f4680b 100644 --- a/module/dj_paygift.js +++ b/module/dj_paygift.js @@ -1,23 +1,4 @@ // 付费电台 -// 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 = { diff --git a/module/dj_program.js b/module/dj_program.js index 938ffc7..9ed4020 100644 --- a/module/dj_program.js +++ b/module/dj_program.js @@ -1,33 +1,11 @@ -//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 + offset: query.offset || 0, + asc: query.asc } return request( 'POST', `http://music.163.com/weapi/dj/program/byradio`, data, diff --git a/module/dj_program_detail.js b/module/dj_program_detail.js index 3e54754..838d9b3 100644 --- a/module/dj_program_detail.js +++ b/module/dj_program_detail.js @@ -1,21 +1,4 @@ -// 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 = { diff --git a/module/dj_recommend.js b/module/dj_recommend.js index 7552da5..43e7f4e 100644 --- a/module/dj_recommend.js +++ b/module/dj_recommend.js @@ -1,21 +1,4 @@ // 精选电台 -// 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( diff --git a/module/dj_recommend_type.js b/module/dj_recommend_type.js index 9d503ee..b39720b 100644 --- a/module/dj_recommend_type.js +++ b/module/dj_recommend_type.js @@ -1,25 +1,30 @@ -//精选电台-分类电台 -// 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") -// ); -// }; +// 精选电台分类 + +/* + 有声书 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 = { + const data = { cateId: query.type } return request( diff --git a/module/dj_sub.js b/module/dj_sub.js index cfca269..8a2523e 100644 --- a/module/dj_sub.js +++ b/module/dj_sub.js @@ -1,26 +1,8 @@ -// 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 = { + query.t = (query.t == 1 ? 'sub' : 'unsub') + const data = { id: query.rid } return request( diff --git a/module/dj_sublist.js b/module/dj_sublist.js index 0782eae..d42c830 100644 --- a/module/dj_sublist.js +++ b/module/dj_sublist.js @@ -1,29 +1,10 @@ -// 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 = { + const data = { + limit: query.limit || 30, offset: query.offset || 0, - total: query.total ? "true" : "false", - limit: query.limit || 30 + total: true } return request( 'POST', `http://music.163.com/weapi/djradio/get/subed`, data, diff --git a/module/event.js b/module/event.js index f369e48..de941b3 100644 --- a/module/event.js +++ b/module/event.js @@ -1,19 +1,4 @@ -//获取动态 -// 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( diff --git a/module/fm_trash.js b/module/fm_trash.js index 4d12166..38aa28a 100644 --- a/module/fm_trash.js +++ b/module/fm_trash.js @@ -1,27 +1,7 @@ //垃圾桶 -// 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 = { + const data = { songId: query.id } return request( diff --git a/module/follow.js b/module/follow.js index e31f0ac..460d76b 100644 --- a/module/follow.js +++ b/module/follow.js @@ -1,27 +1,9 @@ -// 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") + query.t = (query.t == 1 ? 'follow' : 'delfollow') return request( - 'POST', `http://music.163.com/weapi/user/${query.type}/${query.id}`, {}, + 'POST', `http://music.163.com/weapi/user/${query.t}/${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 index 821e6b8..3e29699 100644 --- a/module/like.js +++ b/module/like.js @@ -1,33 +1,13 @@ -// 喜欢歌曲 -// 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 = { + query.like = (query.like ? true : false) + const data = { trackId: query.id, - like: query.like || true + like: query.like } 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, + '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} ) } \ No newline at end of file diff --git a/module/likelist.js b/module/likelist.js index 8ab9d9e..6dbd62f 100644 --- a/module/likelist.js +++ b/module/likelist.js @@ -1,24 +1,7 @@ -// 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 = { + const data = { uid: query.uid } return request( diff --git a/module/login.js b/module/login.js index 5efe482..d3c2345 100644 --- a/module/login.js +++ b/module/login.js @@ -1,41 +1,15 @@ +// 邮箱登录 + 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 = { + const data = { username: query.email, - password: crypto.createHash("md5").update(query.password).digest("hex"), - rememberLogin: "true" + 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} + {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/login_cellphone.js b/module/login_cellphone.js index 426d536..71beb88 100644 --- a/module/login_cellphone.js +++ b/module/login_cellphone.js @@ -1,38 +1,15 @@ -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") -// ); -// }; +const crypto = require('crypto') module.exports = (query, request) => { - const data = { + const data = { phone: query.phone, - password: crypto.createHash("md5").update(query.password).digest("hex"), - rememberLogin: "true" + 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} + {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/login_refresh.js b/module/login_refresh.js index dd7221f..fa83612 100644 --- a/module/login_refresh.js +++ b/module/login_refresh.js @@ -1,26 +1,8 @@ -//登录刷新 -// 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} + {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/login_status.js b/module/login_status.js index d507cbf..edd21ab 100644 --- a/module/login_status.js +++ b/module/login_status.js @@ -1,26 +1,4 @@ -//登录状态 -// 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( @@ -35,7 +13,7 @@ module.exports = (query, request) => { return response } catch(err){ - response.code = 301 + response.status = 301 response.body = {code: 301} return Promise.reject(response) } diff --git a/module/logout.js b/module/logout.js index e9e9b23..8063e1d 100644 --- a/module/logout.js +++ b/module/logout.js @@ -1,23 +1,8 @@ -//登出 -// 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} + {crypto: 'weapi', ua: 'pc', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/lyric.js b/module/lyric.js index 4bf66be..02d9f8c 100644 --- a/module/lyric.js +++ b/module/lyric.js @@ -1,20 +1,4 @@ -// 获取歌词 -// 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( diff --git a/module/music_url.js b/module/music_url.js index 95e0745..f290cae 100644 --- a/module/music_url.js +++ b/module/music_url.js @@ -1,29 +1,4 @@ -// 获取音乐 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 = { diff --git a/module/mv.js b/module/mv.js deleted file mode 100644 index 904f3ec..0000000 --- a/module/mv.js +++ /dev/null @@ -1,30 +0,0 @@ -//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_detail.js b/module/mv_detail.js new file mode 100644 index 0000000..0c69478 --- /dev/null +++ b/module/mv_detail.js @@ -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} + ) +} \ No newline at end of file diff --git a/module/mv_first.js b/module/mv_first.js index 79103ec..59af71a 100644 --- a/module/mv_first.js +++ b/module/mv_first.js @@ -1,24 +1,4 @@ -//最新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") -// ); -// }; +// 最新MV module.exports = (query, request) => { const data = { diff --git a/module/mv_sub.js b/module/mv_sub.js new file mode 100644 index 0000000..b87e99b --- /dev/null +++ b/module/mv_sub.js @@ -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} + ) +} \ No newline at end of file diff --git a/module/mv_url.js b/module/mv_url.js index 8971e65..496c93f 100644 --- a/module/mv_url.js +++ b/module/mv_url.js @@ -1,18 +1,12 @@ -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); -}; +// 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} + ) +} \ No newline at end of file diff --git a/module/personal_fm.js b/module/personal_fm.js index 60482c1..128c3f3 100644 --- a/module/personal_fm.js +++ b/module/personal_fm.js @@ -1,19 +1,4 @@ -// 私人 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") -// ); -// }; +// 私人FM module.exports = (query, request) => { return request( diff --git a/module/personalized.js b/module/personalized.js index d4e7a8e..67b9296 100644 --- a/module/personalized.js +++ b/module/personalized.js @@ -1,25 +1,4 @@ -//推荐歌单 -// 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 = { diff --git a/module/personalized_djprogram.js b/module/personalized_djprogram.js index e23dd75..9a3de44 100644 --- a/module/personalized_djprogram.js +++ b/module/personalized_djprogram.js @@ -1,19 +1,4 @@ -//推荐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( diff --git a/module/personalized_mv.js b/module/personalized_mv.js index 529a56d..2381871 100644 --- a/module/personalized_mv.js +++ b/module/personalized_mv.js @@ -1,19 +1,4 @@ -//推荐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") -// ); -// }; +// 推荐MV module.exports = (query, request) => { return request( diff --git a/module/personalized_newsong.js b/module/personalized_newsong.js index ad4ae33..7b8ae31 100644 --- a/module/personalized_newsong.js +++ b/module/personalized_newsong.js @@ -1,21 +1,4 @@ -//推荐新音乐 -// 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 = { diff --git a/module/personalized_privatecontent.js b/module/personalized_privatecontent.js index 907c34a..8d130c5 100644 --- a/module/personalized_privatecontent.js +++ b/module/personalized_privatecontent.js @@ -1,19 +1,4 @@ -//独家放送 -// 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( diff --git a/module/playlist_catlist.js b/module/playlist_catlist.js index cd236fd..3d4b557 100644 --- a/module/playlist_catlist.js +++ b/module/playlist_catlist.js @@ -1,21 +1,4 @@ // 全部歌单分类 -// 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( diff --git a/module/playlist_create.js b/module/playlist_create.js index 8984300..ab92bc5 100644 --- a/module/playlist_create.js +++ b/module/playlist_create.js @@ -1,23 +1,7 @@ -// 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) => { + query.cookie = 'os=pc; ' + query.cookie const data = { name: query.name } diff --git a/module/playlist_detail.js b/module/playlist_detail.js index 9a0db43..306c8f0 100644 --- a/module/playlist_detail.js +++ b/module/playlist_detail.js @@ -1,29 +1,4 @@ -// 获取歌单内列表 -// 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 = { diff --git a/module/playlist_hot.js b/module/playlist_hot.js index b6cd3df..bda73b5 100644 --- a/module/playlist_hot.js +++ b/module/playlist_hot.js @@ -1,19 +1,4 @@ // 热门歌单分类 -// 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( diff --git a/module/playlist_subscribe.js b/module/playlist_subscribe.js index 54e408f..be2ac35 100644 --- a/module/playlist_subscribe.js +++ b/module/playlist_subscribe.js @@ -1,25 +1,7 @@ -// 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") + query.t = (query.t == 1 ? 'subscribe' : 'unsubscribe') const data = { id: query.id } diff --git a/module/playlist_tracks.js b/module/playlist_tracks.js index 418a8a7..a612232 100644 --- a/module/playlist_tracks.js +++ b/module/playlist_tracks.js @@ -1,36 +1,10 @@ -//收藏单曲到歌单,从歌单删除歌曲 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 + ']' + 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, diff --git a/module/playlist_update.js b/module/playlist_update.js index 3acb53c..29dab73 100644 --- a/module/playlist_update.js +++ b/module/playlist_update.js @@ -1,38 +1,13 @@ -// 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) => { +module.exports = (query, request) => { + query.cookie = 'os=pc; ' + query.cookie 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}"}` + "/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, diff --git a/module/program_recommend.js b/module/program_recommend.js index a3967a5..55f7a6e 100644 --- a/module/program_recommend.js +++ b/module/program_recommend.js @@ -1,29 +1,13 @@ -//推荐节目 -// 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 + 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} ) -} +} \ No newline at end of file diff --git a/module/recommend_dislike.js b/module/recommend_dislike.js deleted file mode 100644 index 72db86b..0000000 --- a/module/recommend_dislike.js +++ /dev/null @@ -1,24 +0,0 @@ -//取消推荐 -// 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 index 0394231..d66913f 100644 --- a/module/recommend_resource.js +++ b/module/recommend_resource.js @@ -1,20 +1,4 @@ -// 获取每日推荐歌单 -// 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( diff --git a/module/recommend_songs.js b/module/recommend_songs.js index 097ed4d..8804e50 100644 --- a/module/recommend_songs.js +++ b/module/recommend_songs.js @@ -1,32 +1,13 @@ -// 获取每日推荐歌曲 -// 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, + offset: 0, total: true } return request( - 'POST', `http://music.163.com/weapi/v1/discovery/recommend/resource`, data, + 'POST', `http://music.163.com/weapi/v1/discovery/recommend/songs`, data, {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/related_allvideo.js b/module/related_allvideo.js new file mode 100644 index 0000000..1d6e635 --- /dev/null +++ b/module/related_allvideo.js @@ -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} + ) +} \ No newline at end of file diff --git a/module/related_playlist.js b/module/related_playlist.js index b11934f..c7431ee 100644 --- a/module/related_playlist.js +++ b/module/related_playlist.js @@ -1,40 +1,4 @@ -//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 = /
[\s\S]*?[\s\S]*?]*>([^<]+?)<\/a>[\s\S]*?]*>([^<]+?)<\/a>/g; -// const data = {playlists:[],code:200}; -// let result; -// while ((result = pattern.exec(body)) != null) { -// data.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) -// }); -// } -// res.send(JSON.stringify(data)); -// } catch (error) { -// res.status(502).send("fetch error"); -// } -// } -// }); -// }; +// 相关歌单 module.exports = (query, request) => { return request( @@ -60,7 +24,7 @@ module.exports = (query, request) => { return response } catch(err){ - response.code = 500 + response.status = 500 response.body = {code: 500, msg: err.stack} return Promise.reject(response) } diff --git a/module/resource_like.js b/module/resource_like.js index 9e8a9df..9b3c0dc 100644 --- a/module/resource_like.js +++ b/module/resource_like.js @@ -1,27 +1,14 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// threadId: req.query.id, -// csrf_token: "" -// }; -// const action = req.query.t == 1 ? "like" : "unlike"; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/resource/${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 ? "like" : "unlike") + 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.id + threadId: query.type + query.id } return request( 'POST', `http://music.163.com/weapi/resource/${query.t}`, data, diff --git a/module/search.js b/module/search.js index 6aedb66..544aacb 100644 --- a/module/search.js +++ b/module/search.js @@ -1,34 +1,9 @@ // 搜索 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get('Cookie') ? req.get('Cookie') : '' -// const keywords = req.query.keywords -// const type = req.query.type || 1 -// const limit = req.query.limit || 30 -// const offset = req.query.offset || 0 -// // *(type)* 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 -// const data = { -// csrf_token: '', -// limit, -// type, -// s: keywords, -// offset -// } - -// createWebAPIRequest( -// 'music.163.com', -// '/weapi/search/get', -// 'POST', -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send('fetch error') -// ) -// } module.exports = (query, request) => { const data = { s: query.keywords, - type: query.type || 1, + type: query.type || 1, // 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频 limit: query.limit || 30, offset: query.offset || 0 } diff --git a/module/search_hot.js b/module/search_hot.js index 5addc0a..8e9736c 100644 --- a/module/search_hot.js +++ b/module/search_hot.js @@ -1,22 +1,4 @@ -// 热搜 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// type: 1111 -// }; -// const id = req.query.id; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/search/hot", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 热门搜索 module.exports = (query, request) => { const data = { @@ -24,6 +6,6 @@ module.exports = (query, request) => { } return request( 'POST', `http://music.163.com/weapi/search/hot`, data, - {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + {crypto: 'weapi', ua: 'mobile', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/search_multimatch.js b/module/search_multimatch.js index ca11384..402720a 100644 --- a/module/search_multimatch.js +++ b/module/search_multimatch.js @@ -1,24 +1,4 @@ -//搜索 multimatch -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// csrf_token: "", -// type: req.query.type || 1, -// s: req.query.keywords || "" -// }; - -// createWebAPIRequest( -// "music.163.com", -// "/weapi/search/suggest/multimatch", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 多类型搜索 module.exports = (query, request) => { const data = { diff --git a/module/search_suggest.js b/module/search_suggest.js index c734693..276de74 100644 --- a/module/search_suggest.js +++ b/module/search_suggest.js @@ -1,23 +1,4 @@ -// 搜索 suggest,搜索结果包含单曲,歌手,歌单,mv信息 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// csrf_token: "", -// s: req.query.keywords || "" -// }; - -// createWebAPIRequest( -// "music.163.com", -// "/weapi/search/suggest/web", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 搜索建议 module.exports = (query, request) => { const data = { diff --git a/module/send_playlist.js b/module/send_playlist.js index e90cf6e..1d9a3ba 100644 --- a/module/send_playlist.js +++ b/module/send_playlist.js @@ -1,30 +1,11 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const user_ids = req.query.user_ids; -// const data = { -// id: req.query.playlist, -// type: "playlist", -// msg: req.query.msg, -// userIds: "[" + user_ids + "]", -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/msg/private/send`, -// "POST", -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send("fetch error") -// ); -// }; +// 私信歌单 module.exports = (query, request) => { const data = { id: query.playlist, type: 'playlist', msg: query.msg, - userIds: '[' + user_ids + ']' + userIds: '[' + query.user_ids + ']' } return request( 'POST', `http://music.163.com/weapi/msg/private/send`, data, diff --git a/module/send_text.js b/module/send_text.js index c61e79c..6cd8715 100644 --- a/module/send_text.js +++ b/module/send_text.js @@ -1,31 +1,11 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// // user_id must be [id] -// const user_ids = req.query.user_ids; -// const data = { -// type: "text", -// msg: req.query.msg, -// userIds: "[" + user_ids + "]", -// csrf_token: "" -// }; -// console.log(data); -// createWebAPIRequest( -// "music.163.com", -// `/weapi/msg/private/send`, -// "POST", -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send("fetch error") -// ); -// }; +// 私信 module.exports = (query, request) => { const data = { id: query.playlist, type: 'text', msg: query.msg, - userIds: '[' + user_ids + ']' + userIds: '[' + query.user_ids + ']' } return request( 'POST', `http://music.163.com/weapi/msg/private/send`, data, diff --git a/module/simi_artist.js b/module/simi_artist.js index 1322248..9f616ac 100644 --- a/module/simi_artist.js +++ b/module/simi_artist.js @@ -1,20 +1,4 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const id = req.query.id; -// const data = { -// artistid: id, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/discovery/simiArtist`, -// "POST", -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send("fetch error") -// ); -// }; +// 相似歌手 module.exports = (query, request) => { const data = { diff --git a/module/simi_mv.js b/module/simi_mv.js index 5c188fa..6a1eb5c 100644 --- a/module/simi_mv.js +++ b/module/simi_mv.js @@ -1,19 +1,4 @@ -//相似 mv -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// mvid: req.query.mvid -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/discovery/simiMV", -// "POST", -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send("fetch error") -// ); -// }; +// 相似MV module.exports = (query, request) => { const data = { diff --git a/module/simi_playlist.js b/module/simi_playlist.js index 8f72078..3e8ad4b 100644 --- a/module/simi_playlist.js +++ b/module/simi_playlist.js @@ -1,25 +1,10 @@ -//simi ,相似歌单 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// songid: req.query.id -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/discovery/simiPlaylist", -// "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 + songid: query.id, + limit: query.limit || 50, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/discovery/simiPlaylist`, data, diff --git a/module/simi_song.js b/module/simi_song.js index bf87a47..7212615 100644 --- a/module/simi_song.js +++ b/module/simi_song.js @@ -1,25 +1,10 @@ -//simi ,相似歌曲 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// songid: req.query.id -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/v1/discovery/simiSong", -// "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 + songid: query.id, + limit: query.limit || 50, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/v1/discovery/simiSong`, data, diff --git a/module/simi_user.js b/module/simi_user.js index 80734c8..b6a7f19 100644 --- a/module/simi_user.js +++ b/module/simi_user.js @@ -1,25 +1,10 @@ -//simi ,相似关注的用户 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// songid: req.query.id -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/discovery/simiUser", -// "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 + songid: query.id, + limit: query.limit || 50, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/discovery/simiUser`, data, diff --git a/module/song_detail.js b/module/song_detail.js index 680bad4..430efa3 100644 --- a/module/song_detail.js +++ b/module/song_detail.js @@ -1,31 +1,10 @@ // 获取音乐详情 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const id = parseInt(req.query.ids); -// const data = { -// // "id": id, -// c: JSON.stringify([{ id: id }]), -// ids: "[" + id + "]", -// csrf_token: "" -// }; -// console.log(data); -// createWebAPIRequest( -// "music.163.com", -// "/weapi/v3/song/detail", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; module.exports = (query, request) => { + query.ids = query.ids.split(/\s*,\s*/) const data = { - c: JSON.stringify([{ id: query.ids }]), - ids: '[' + query.ids + ']' + c: '[' + query.ids.map(id => ('{"id":' + id + '}')).join(',') + ']', + ids: '[' + query.ids.join(',') + ']' } return request( 'POST', `http://music.163.com/weapi/v3/song/detail`, data, diff --git a/module/top_album.js b/module/top_album.js index de418e8..841fa3e 100644 --- a/module/top_album.js +++ b/module/top_album.js @@ -1,34 +1,10 @@ -//最新mv -// 新碟上架 http://music.163.com/#/discover/album/ - -// 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 || 50, -// area: req.query.type, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/album/new", -// "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, + area: query.type || 'ALL', // ALL,ZH,EA,KR,JP limit: query.limit || 50, - area: query.type, + offset: query.offset || 0, total: true } return request( diff --git a/module/top_artists.js b/module/top_artists.js index d08a1d5..86e43ac 100644 --- a/module/top_artists.js +++ b/module/top_artists.js @@ -1,29 +1,9 @@ -// 热门歌手 http://music.163.com/#/discover/artist/ -// 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 || 50, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/artist/top`, -// "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 || 50, + offset: query.offset || 0, total: true } return request( diff --git a/module/top_list.js b/module/top_list.js index 7680a5c..e738aeb 100644 --- a/module/top_list.js +++ b/module/top_list.js @@ -1,58 +1,9 @@ -// const top_list_all = { -// "0": ["云音乐新歌榜", "3779629"], -// "1": ["云音乐热歌榜", "3778678"], -// "2": ["网易原创歌曲榜", "2884035"], -// "3": ["云音乐飙升榜", "19723756"], -// "4": ["云音乐电音榜", "10520166"], -// "5": ["UK排行榜周榜", "180106"], -// "6": ["美国Billboard周榜", "60198"], -// "7": ["KTV嗨榜", "21845217"], -// "8": ["iTunes榜", "11641012"], -// "9": ["Hit FM Top榜", "120001"], -// "10": ["日本Oricon周榜", "60131"], -// "11": ["韩国Melon排行榜周榜", "3733003"], -// "12": ["韩国Mnet排行榜周榜", "60255"], -// "13": ["韩国Melon原声周榜", "46772709"], -// "14": ["中国TOP排行榜(港台榜)", "112504"], -// "15": ["中国TOP排行榜(内地榜)", "64016"], -// "16": ["香港电台中文歌曲龙虎榜", "10169002"], -// "17": ["华语金曲榜", "4395559"], -// "18": ["中国嘻哈榜", "1899724"], -// "19": ["法国 NRJ EuroHot 30周榜", "27135204"], -// "20": ["台湾Hito排行榜", "112463"], -// "21": ["Beatport全球电子舞曲榜", "3812895"], -// "22": ["云音乐ACG音乐榜", "71385702"], -// "23": ["云音乐嘻哈榜", "991319590"] -// }; -// module.exports = (req, res, createWebAPIRequest, request) => { -// const idx = req.query.idx; -// const id = top_list_all[idx][1]; -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const action = "/weapi/v3/playlist/detail"; -// const data = { -// id, -// n: 10000, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// action, -// "POST", -// data, -// cookie, -// music_req => { -// res.setHeader("Content-Type", "application/json"); -// // 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") -// ); -// }; +// 排行榜 + const topList = { 0: "3779629", //云音乐新歌榜 1: "3778678", //云音乐热歌榜 - 2: "2884035", //网易原创歌曲榜 + 2: "2884035", ///云音乐原创榜 3: "19723756", //云音乐飙升榜 4: "10520166", //云音乐电音榜 5: "180106", //UK排行榜周榜 diff --git a/module/top_mv.js b/module/top_mv.js index 2abbf60..f54d1a3 100644 --- a/module/top_mv.js +++ b/module/top_mv.js @@ -1,30 +1,9 @@ -// 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/toplist", -// "POST", -// data, -// cookie, -// music_req => { -// res.setHeader("Content-Type", "application/json"); -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// MV排行榜 module.exports = (query, request) => { const data = { - offset: query.offset || 0, limit: query.limit || 30, + offset: query.offset || 0, total: true } return request( diff --git a/module/top_playlist.js b/module/top_playlist.js index e438290..d7bdbd9 100644 --- a/module/top_playlist.js +++ b/module/top_playlist.js @@ -1,34 +1,12 @@ -//分类歌单 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// // order可为 'hot' 可为 'new' -// const data = { -// cat: req.query.cat || "全部", -// order: req.query.order || "hot", -// offset: req.query.offset || 0, -// total: req.query.total ? "true" : "false", -// limit: req.query.limit || 50 -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/playlist/list", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 分类歌单 module.exports = (query, request) => { const data = { - cat: query.cat || '全部', - order: query.order || 'hot', + 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: query.total ? 'true' : 'false', - limit: query.limit || 50 + total: true } return request( 'POST', `http://music.163.com/weapi/playlist/list`, data, diff --git a/module/top_playlist_highquality.js b/module/top_playlist_highquality.js index 1407411..beb73a3 100644 --- a/module/top_playlist_highquality.js +++ b/module/top_playlist_highquality.js @@ -1,30 +1,11 @@ -//精品歌单 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// cat: req.query.cat || "全部", -// offset: req.query.offset || 0, -// limit: req.query.limit || 20, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/playlist/highquality/list", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 精品歌单 module.exports = (query, request) => { const data = { - cat: query.cat || '全部', - offset: query.offset || 0, - limit: query.limit || 20 + 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, diff --git a/module/top_song.js b/module/top_song.js index 534ffd2..304d94e 100644 --- a/module/top_song.js +++ b/module/top_song.js @@ -1,21 +1,4 @@ -//暂时废弃 -// 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/new/songs", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 最新单曲(暂时废弃?) module.exports = (query, request) => { return request( diff --git a/module/toplist.js b/module/toplist.js index 2d2d5cf..2d16185 100644 --- a/module/toplist.js +++ b/module/toplist.js @@ -1,21 +1,4 @@ -// 排行榜 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/toplist", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 所有榜单介绍 module.exports = (query, request) => { return request( diff --git a/module/toplist_artist.js b/module/toplist_artist.js index 2604a25..7bcad97 100644 --- a/module/toplist_artist.js +++ b/module/toplist_artist.js @@ -1,19 +1,14 @@ -//歌手榜 -module.exports = (req, res, createWebAPIRequest, request) => { - const cookie = req.get("Cookie") ? req.get("Cookie") : ""; - const data = { - type: req.query.type, - csrf_token: "" - }; - createWebAPIRequest( - "music.163.com", - "/eapi/toplist/artist?params=B5CAE4715306477C2EFA74D383640F01BF227BF8E889F80E2E2A442958463A7E589CC99878CFCE88D165B64712332AF39EC61B7E68903B2F9F079E8D1AB99FC61049A6D5B97AF8E6FFE8DA16ED540D2CFA80205B889ACA39F8B05AE593FDF5A094F118FF4600C2025094ECF6EB58F6D424B7A97B21A8C1D7CF0609AF2FBE9FDD88826E1667C889757BA920684C5C425FF01B5514AF1EB08AB7D298DB4D65187829E315F9FFBBEB43C2AE3DC21222B31CEC6FF337957AC122FBCB3E793FC1960151B0BDEBB1565BFD835E7A7D6A2D034A5591070D42C32DA4B69E0061C46D61239221A1C64EF676D891B44D7B855E27C82A7EB376F0B0C27952F2006E302B47DA1DE86C3488D53FD98ED9FDC6AA341DF0ECF92BA2E8F77E41811BF9447973C5C34FFED13E28AC544347F9E6ADF4B0008C371FC41C4490D3C9E1A225791D2170326231C40662633AA93D5CEF9AABC777AF268A4B13C560157339478DFAD5D910C966B43E1F017410DBF06D189E2BD6D0CD2682F343A83994E66CA73B5E2A67A122842BF945F2B434CBDE4C5A589A3A90F70DF1A8B63E7BAFBEB624956C62CFB1114AB841379541E5BB4625F2C28CAEA6A67E77A7EEAA1149D9D0F7E190D3A3408DF88B62FBF27996ABC925A93E5A67B4B0D1D931214BB07064F2BA4DCBA2E548E5A110E9B992C21E3930EB488172929C02C06D76BB193EF923D1906E0A0C4D75F5EB909AE77B0A2E55539A182D0B2533C654F2C90A038406B8850BFC022639F2B3FB7EDF40FD74AEA0B9119E9987D2909C01C587794F53459DB8EE83AA8D15FBEAC71EB3A00D8E40E78FE9A9A4068495D9257B39D8F825086F391FD5E7A48AACA96BC261E334A1929C81633234A0B22C573AEAD05BC8B4216283ACFD9E022950AEC812F554B913B4457FDF68AA2CC5E476922C2670D49154BC1DEB6D464F60DBFAD2BB4144762CD3721F52D42FDAE56DB9C529EDB6FB946CD725B3E2EA2AFDCF3F759D384B4F7F75AAA6F01F8093C8A140B3B388FF57272A6A7E10274290A79CDCA69E37BC066CE8CCD5B4BB4E12DA841B", - "POST", - data, - cookie, - music_req => { - res.send(music_req); - }, - err => res.status(502).send("fetch error") - ); -}; +// 歌手榜 + +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} + ) +} \ No newline at end of file diff --git a/module/toplist_detail.js b/module/toplist_detail.js index 9185ca2..c4ddb07 100644 --- a/module/toplist_detail.js +++ b/module/toplist_detail.js @@ -1,31 +1,8 @@ -// 排行榜详情 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// id: req.query.id, -// limit: 20, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/toplist/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, - limit: 20 - } return request( - 'POST', `http://music.163.com/weapi/toplist/detail`, data, + 'POST', `http://music.163.com/weapi/toplist/detail`, {}, {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/user_audio.js b/module/user_audio.js index 879cbfc..3b22707 100644 --- a/module/user_audio.js +++ b/module/user_audio.js @@ -1,27 +1,4 @@ -// 获取用户电台 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const data = { -// userId: req.query.uid, -// csrf_token: "" -// }; -// console.log(data); -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; - -// createWebAPIRequest( -// "music.163.com", -// "/weapi/djradio/get/byuser", -// "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 = { diff --git a/module/user_cloud.js b/module/user_cloud.js index 2bb203d..6c0c7e1 100644 --- a/module/user_cloud.js +++ b/module/user_cloud.js @@ -1,26 +1,4 @@ -//云盘数据 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const data = { -// limit: req.query.limit || 10, -// offset: req.query.offset || 0, -// csrf_token: "" -// }; -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/v1/cloud/get", -// "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 = { diff --git a/module/user_cloud_search.js b/module/user_cloud_search.js index a8f7a12..12e786b 100644 --- a/module/user_cloud_search.js +++ b/module/user_cloud_search.js @@ -1,26 +1,4 @@ -//云盘数据详情? 暂时不要使用 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const data = { -// byids: req.query.id, -// id: req.query.id, -// csrf_token: "" -// }; -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/v1/cloud/get/byids", -// "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 = { diff --git a/module/user_detail.js b/module/user_detail.js index 6793448..967f804 100644 --- a/module/user_detail.js +++ b/module/user_detail.js @@ -1,26 +1,8 @@ // 用户详情 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const id = req.query.uid; -// const data = { -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/v1/user/detail/${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/user/detail/${query.id}`, {}, + 'POST', `http://music.163.com/weapi/v1/user/detail/${query.uid}`, {}, {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} ) } \ No newline at end of file diff --git a/module/user_dj.js b/module/user_dj.js index 14dc6eb..a6205d7 100644 --- a/module/user_dj.js +++ b/module/user_dj.js @@ -1,29 +1,9 @@ -// 用户电台 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const id = req.query.uid; -// const data = { -// offset: req.query.offset || "0", -// limit: req.query.limit || 30, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/dj/program/${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, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/dj/program/${query.uid}`, data, diff --git a/module/user_event.js b/module/user_event.js index b4eb8fa..5dea33f 100644 --- a/module/user_event.js +++ b/module/user_event.js @@ -1,29 +1,9 @@ -//用户动态 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const id = req.query.uid; -// const data = { -// time: -1, -// getcounts: true, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/event/get/${id}`, -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 用户动态 module.exports = (query, request) => { const data = { time: -1, - getcounts: true, + getcounts: true } return request( 'POST', `http://music.163.com/weapi/event/get/${query.uid}`, data, diff --git a/module/user_followeds.js b/module/user_followeds.js index 1d51347..b451e91 100644 --- a/module/user_followeds.js +++ b/module/user_followeds.js @@ -1,29 +1,10 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// userId: req.query.uid, -// offset: req.query.offset || "0", -// limit: req.query.limit || 30, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/user/getfolloweds/`, -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 关注TA的人(粉丝) module.exports = (query, request) => { const data = { userId: query.uid, - offset: query.offset || 0, limit: query.limit || 30, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/user/getfolloweds`, data, diff --git a/module/user_follows.js b/module/user_follows.js index 4dbfba8..db69ee4 100644 --- a/module/user_follows.js +++ b/module/user_follows.js @@ -1,23 +1,4 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const id = req.query.uid; -// const data = { -// offset: req.query.offset || "0", -// limit: req.query.limit || 30, -// order: true -// }; -// createWebAPIRequest( -// "music.163.com", -// `/weapi/user/getfollows/${id}`, -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// TA关注的人(关注) module.exports = (query, request) => { const data = { diff --git a/module/user_playlist.js b/module/user_playlist.js index 6d204e8..8df830c 100644 --- a/module/user_playlist.js +++ b/module/user_playlist.js @@ -1,30 +1,10 @@ -// 获取用户歌单 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// offset: req.query.offset || 0, -// uid: req.query.uid, -// limit: req.query.limit || 30, //貌似无效 -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/user/playlist", -// "POST", -// data, -// cookie, -// music_req => { -// res.send(music_req); -// // console.log(JSON.parse(music_req)) -// }, -// err => res.status(502).send("fetch error") -// ); -// }; +// 用户歌单 module.exports = (query, request) => { const data = { uid: query.uid, - offset: query.offset || 0, + limit: query.limit || 30, + offset: query.offset || 0 } return request( 'POST', `http://music.163.com/weapi/user/playlist`, data, diff --git a/module/user_record.js b/module/user_record.js index 7412ba5..4b73476 100644 --- a/module/user_record.js +++ b/module/user_record.js @@ -1,29 +1,9 @@ -//播放记录 -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; - -// // type=1时只返回weekData, type=0时返回allData -// const data = { -// type: req.query.type || 0, -// uid: req.query.uid, //用户 id, -// csrf_token: "" -// }; -// const action = `/weapi/v1/play/record`; -// createWebAPIRequest( -// "music.163.com", -// action, -// "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, uid: query.uid, + type: query.type || 1 // 1: 最近一周, 0: 所有时间 } return request( 'POST', `http://music.163.com/weapi/v1/play/record`, data, diff --git a/module/user_subcount.js b/module/user_subcount.js index fb483cf..b214d13 100644 --- a/module/user_subcount.js +++ b/module/user_subcount.js @@ -1,18 +1,4 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/subcount", -// "POST", -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send("fetch error") -// ); -// }; +// 收藏计数 module.exports = (query, request) => { return request( diff --git a/module/user_update.js b/module/user_update.js index 6ce49c5..e0ce885 100644 --- a/module/user_update.js +++ b/module/user_update.js @@ -1,30 +1,4 @@ -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// // 暂时不提供更换头像接口 -// // gender为0表示保密,1为男性,2为女性 -// const gender_type = req.query.gender; -// // birthday 为unix13位时间戳 -// // province_number and city_number -// const data = { -// avatarImgId: "0", -// birthday: req.query.birthday, -// city: req.query.city, -// gender: gender_type, -// nickname: req.query.nickname, -// province: req.query.province, -// signature: req.query.signature, -// csrf_token: "" -// }; -// createWebAPIRequest( -// "music.163.com", -// "/weapi/user/profile/update", -// "POST", -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send("fetch error") -// ); -// }; +// 编辑用户信息 module.exports = (query, request) => { const data = { diff --git a/module/video.js b/module/video.js deleted file mode 100644 index 9d06c36..0000000 --- a/module/video.js +++ /dev/null @@ -1,25 +0,0 @@ -// video -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get('Cookie') ? req.get('Cookie') : '' -// const videoId = req.query.id -// const data = {} - -// createWebAPIRequest( -// 'music.163.com', -// `/api/cloudvideo/playurl?ids=['${videoId}']&resolution=720`, -// '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/api/cloudvideo/playurl?ids=['${query.id}']&resolution=720`, {}, - {cookie: query.cookie, proxy: query.proxy} - ) -} \ No newline at end of file diff --git a/module/video_detail.js b/module/video_detail.js new file mode 100644 index 0000000..0c938b5 --- /dev/null +++ b/module/video_detail.js @@ -0,0 +1,11 @@ +// 视频详情 + +module.exports = (query, request) => { + const data = { + id: query.id + } + return request( + 'POST', `http://music.163.com/weapi/cloudvideo/v1/video/detail`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/video_sub.js b/module/video_sub.js new file mode 100644 index 0000000..9499eb3 --- /dev/null +++ b/module/video_sub.js @@ -0,0 +1,12 @@ +// 收藏与取消收藏视频 + +module.exports = (query, request) => { + query.t = (query.t == 1 ? 'sub' : 'unsub') + const data = { + id: query.id + } + return request( + 'POST', `http://music.163.com/weapi/cloudvideo/video/${query.t}`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/video_url.js b/module/video_url.js new file mode 100644 index 0000000..7aaf17c --- /dev/null +++ b/module/video_url.js @@ -0,0 +1,12 @@ +// 视频链接 + +module.exports = (query, request) => { + const data = { + ids: '["' + query.id + '"]', + resolution: query.res || 1080 + } + return request( + 'POST', `http://music.163.com/weapi/cloudvideo/playurl`, data, + {crypto: 'weapi', cookie: query.cookie, proxy: query.proxy} + ) +} \ No newline at end of file diff --git a/module/weblog.js b/module/weblog.js index f8ee320..73f2147 100644 --- a/module/weblog.js +++ b/module/weblog.js @@ -1,20 +1,4 @@ -// 不明 api -// module.exports = (req, res, createWebAPIRequest, request) => { -// const cookie = req.get("Cookie") ? req.get("Cookie") : ""; -// const data = { -// csrf_token: "" -// }; - -// createWebAPIRequest( -// "music.163.com", -// "/weapi/feedback/weblog", -// "POST", -// data, -// cookie, -// music_req => res.send(music_req), -// err => res.status(502).send("fetch error") -// ); -// }; +// 操作记录 module.exports = (query, request) => { return request( From 2bcccd46df8173031bddfc130531541ebcdad566 Mon Sep 17 00:00:00 2001 From: Nzix Date: Thu, 4 Oct 2018 23:46:49 +0800 Subject: [PATCH 4/7] modify callback data format --- util/request.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/request.js b/util/request.js index 1467340..709fad8 100644 --- a/util/request.js +++ b/util/request.js @@ -64,14 +64,14 @@ function createRequest(method, url, data, options){ answer.cookie = (res.headers['set-cookie'] || []).map(x => x.replace(/\s*Domain=[^(;|$)]+;*/, '')) try{ answer.body = JSON.parse(body) - answer.code = answer.body.code || res.statusCode + answer.status = answer.body.code || res.statusCode } catch(e){ answer.body = body - answer.code = res.statusCode + answer.status = res.statusCode } - answer.code = (answer.code < 100 || answer.code > 600) ? 400 : answer.code - if(answer.code == 200) + answer.status = (100 < answer.status && answer.status < 600) ? answer.status : 400 + if(answer.status == 200) resolve(answer) else reject(answer) From 71d832384c99c3f79d2898bb6ffcd018cc5dd7f3 Mon Sep 17 00:00:00 2001 From: Nzix Date: Fri, 5 Oct 2018 15:57:50 +0800 Subject: [PATCH 5/7] redo cookie modification with cookie parser --- module/comment.js | 2 +- module/comment_hot.js | 2 +- module/comment_like.js | 4 ++-- module/fm_trash.js | 2 +- module/mv_url.js | 16 ++++++++-------- module/playlist_create.js | 2 +- module/playlist_update.js | 2 +- module/song_detail.js | 2 +- module/{music_url.js => song_url.js} | 5 ++++- module/user_cloud.js | 2 +- module/user_cloud_search.js | 2 +- 11 files changed, 22 insertions(+), 19 deletions(-) rename module/{music_url.js => song_url.js} (67%) diff --git a/module/comment.js b/module/comment.js index 5f163d0..bac7ce3 100644 --- a/module/comment.js +++ b/module/comment.js @@ -1,7 +1,7 @@ // 发送与删除评论 module.exports = (query, request) => { - query.cookie = 'os=pc; ' + query.cookie + query.cookie.os = 'pc' query.t = (query.t == 1 ? 'add' : 'delete') query.type = { 0: 'R_SO_4_', // 歌曲 diff --git a/module/comment_hot.js b/module/comment_hot.js index 7a08bfc..e03d959 100644 --- a/module/comment_hot.js +++ b/module/comment_hot.js @@ -1,7 +1,7 @@ // 热门评论 module.exports = (query, request) => { - query.cookie = 'os=pc; ' + query.cookie + query.cookie.os = 'pc' query.type = { 0: 'R_SO_4_', // 歌曲 1: 'R_MV_5_', // MV diff --git a/module/comment_like.js b/module/comment_like.js index ddcc12c..98c0cf4 100644 --- a/module/comment_like.js +++ b/module/comment_like.js @@ -1,7 +1,7 @@ -// 评论点赞与取消 +// 点赞与取消点赞评论 module.exports = (query, request) => { - query.cookie = 'os=pc; ' + query.cookie + query.cookie.os = 'pc' query.t = (query.t == 1 ? 'like' : 'unlike') query.type = { 0: 'R_SO_4_', // 歌曲 diff --git a/module/fm_trash.js b/module/fm_trash.js index 38aa28a..35a4ee9 100644 --- a/module/fm_trash.js +++ b/module/fm_trash.js @@ -1,4 +1,4 @@ -//垃圾桶 +// 垃圾桶 module.exports = (query, request) => { const data = { diff --git a/module/mv_url.js b/module/mv_url.js index 496c93f..1338861 100644 --- a/module/mv_url.js +++ b/module/mv_url.js @@ -1,12 +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} - ) + 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} + ) } \ No newline at end of file diff --git a/module/playlist_create.js b/module/playlist_create.js index ab92bc5..da818e4 100644 --- a/module/playlist_create.js +++ b/module/playlist_create.js @@ -1,7 +1,7 @@ // 创建歌单 module.exports = (query, request) => { - query.cookie = 'os=pc; ' + query.cookie + query.cookie.os = 'pc' const data = { name: query.name } diff --git a/module/playlist_update.js b/module/playlist_update.js index 29dab73..ade75be 100644 --- a/module/playlist_update.js +++ b/module/playlist_update.js @@ -1,7 +1,7 @@ // 编辑歌单 module.exports = (query, request) => { - query.cookie = 'os=pc; ' + query.cookie + query.cookie.os = 'pc' query.desc = query.desc || '' query.tags = query.tags || '' const data = { diff --git a/module/song_detail.js b/module/song_detail.js index 430efa3..541b97e 100644 --- a/module/song_detail.js +++ b/module/song_detail.js @@ -1,4 +1,4 @@ -// 获取音乐详情 +// 歌曲详情 module.exports = (query, request) => { query.ids = query.ids.split(/\s*,\s*/) diff --git a/module/music_url.js b/module/song_url.js similarity index 67% rename from module/music_url.js rename to module/song_url.js index f290cae..da24713 100644 --- a/module/music_url.js +++ b/module/song_url.js @@ -1,6 +1,9 @@ -// 音乐链接 +// 歌曲链接 + +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) diff --git a/module/user_cloud.js b/module/user_cloud.js index 6c0c7e1..d60b583 100644 --- a/module/user_cloud.js +++ b/module/user_cloud.js @@ -2,7 +2,7 @@ module.exports = (query, request) => { const data = { - limit: query.limit || 10, + limit: query.limit || 200, offset: query.offset || 0 } return request( diff --git a/module/user_cloud_search.js b/module/user_cloud_search.js index 12e786b..d17b5b9 100644 --- a/module/user_cloud_search.js +++ b/module/user_cloud_search.js @@ -1,4 +1,4 @@ -// 云盘数据详情? 暂时不要使用 +// 云盘数据详情?(暂时不要使用) module.exports = (query, request) => { const data = { From d1ae7f4b56a9cccfaac19cbac5810656eb434b7b Mon Sep 17 00:00:00 2001 From: Nzix Date: Fri, 5 Oct 2018 16:12:52 +0800 Subject: [PATCH 6/7] no intrusive with legacy code --- app.js | 113 +++++++++++++++++++++--------------------------- util/init.js | 2 +- util/request.js | 27 ++++++------ 3 files changed, 64 insertions(+), 78 deletions(-) diff --git a/app.js b/app.js index b356f7d..8191e06 100644 --- a/app.js +++ b/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,66 +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(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))) - }) - - 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) - }) +// 改写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) +}) +app.use('/dev', dev) const port = process.env.PORT || 3000 diff --git a/util/init.js b/util/init.js index 1aa3a74..c6c10f8 100644 --- a/util/init.js +++ b/util/init.js @@ -1,5 +1,5 @@ function randomString(pattern, length){ - return Array.apply(null, {length: length}).map(() => (pattern[Math.floor(Math.random() * pattern.length)])).join('') + return Array.apply(null, {length: length}).map(() => (pattern[Math.floor(Math.random() * pattern.length)])).join('') } function completeCookie(cookie){ diff --git a/util/request.js b/util/request.js index 709fad8..3ff5f0a 100644 --- a/util/request.js +++ b/util/request.js @@ -2,7 +2,7 @@ const encrypt = require('./crypto.js') const request = require('request') const queryString = require('querystring') -request.debug = false +// request.debug = false function chooseUserAgent(ua) { const userAgentList = [ @@ -36,27 +36,28 @@ function chooseUserAgent(ua) { function createRequest(method, url, data, options){ return new Promise((resolve, reject) => { + let headers = {'User-Agent': chooseUserAgent(options.ua)} + if(method.toUpperCase() == 'POST') headers['Content-Type'] = 'application/x-www-form-urlencoded' + if(url.indexOf('music.163.com') != -1) headers['Referer'] = 'http://music.163.com' + // headers['X-Real-IP'] = '118.88.88.88' + + if(typeof(options.cookie) === 'object') + headers['Cookie'] = Object.keys(options.cookie).map(key => (encodeURIComponent(key) + '=' + encodeURIComponent(options.cookie[key]))).join('; ') + else if(options.cookie) + headers['Cookie'] = options.cookie + if(options.crypto == 'weapi'){ - const csrfToken = (options.cookie || '').match(/_csrf=([^(;|$)]+)/) + const csrfToken = (headers['Cookie'] || '').match(/_csrf=([^(;|$)]+)/) data.csrf_token = (csrfToken ? csrfToken[1] : '') data = encrypt(data) } - let headers = {'User-Agent': chooseUserAgent(options.ua)} - if(options.cookie) headers['Cookie'] = options.cookie - if(method.toUpperCase() == 'POST') headers['Content-Type'] = 'application/x-www-form-urlencoded' - if(url.indexOf('music.163.com') != -1) headers['Referer'] = 'http://music.163.com' - - const answer = { - code: 502, - body: {code: 502}, - cookie: [] - } - + const answer = {status: 500, body: {}, cookie: []} request( {method: method, url: url, headers: headers, body: queryString.stringify(data), proxy: options.proxy}, (err, res, body) => { if(err){ + answer.status = 502 answer.body = {code: 502, msg: err.stack} reject(answer) } From 8fb18f030bdc2418a7b8ad17e885d179f12d1139 Mon Sep 17 00:00:00 2001 From: Nzix Date: Fri, 5 Oct 2018 16:15:54 +0800 Subject: [PATCH 7/7] error fixed --- app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app.js b/app.js index 8191e06..dd2e422 100644 --- a/app.js +++ b/app.js @@ -87,7 +87,7 @@ fs.readdirSync(path.join(__dirname, 'router')) .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(path.join(__dirname, 'router', file))) + app.use(route, Wrap(require(path.join(__dirname, 'router', file)))) })