diff --git a/.gitignore b/.gitignore index c9b6dc7..e02847c 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ pnpm-debug.log* *.sw? .vercel +/netease_api #Electron-builder output /dist_electron diff --git a/netease_api/.editorconfig b/netease_api/.editorconfig deleted file mode 100644 index 6c725ce..0000000 --- a/netease_api/.editorconfig +++ /dev/null @@ -1,34 +0,0 @@ - -# EditorConfig is awesome: http://EditorConfig.org - -# top-most EditorConfig file -root = true - -# Unix-style newlines with a newline ending every file -[*] -end_of_line = lf -insert_final_newline = true - -# Matches multiple files with brace expansion notation -# Set default charset -[*.{js,py}] -charset = utf-8 - -# 4 space indentation -[*.py] -indent_style = space -indent_size = 4 - -# Tab indentation (no size specified) -[Makefile] -indent_style = tab - -# Indentation override for all JS under lib directory -[*.{js,ts}] -indent_style = space -indent_size = 2 - -# Matches the exact files either package.json or .travis.yml -[{package.json,.travis.yml}] -indent_style = space -indent_size = 2 \ No newline at end of file diff --git a/netease_api/.eslintrc.js b/netease_api/.eslintrc.js deleted file mode 100644 index e4b2246..0000000 --- a/netease_api/.eslintrc.js +++ /dev/null @@ -1,49 +0,0 @@ -module.exports = { - root: true, - parserOptions: { - parser: 'babel-eslint', - ecmaVersion: 2018, - sourceType: 'module', - }, - plugins: ['html'], - extends: ['plugin:prettier/recommended'], - env: { - browser: true, - node: true, - }, - - rules: { - indent: ['error', 2, { SwitchCase: 1 }], - 'space-infix-ops': ['error', { int32Hint: false }], - 'key-spacing': [ - 2, - { - beforeColon: false, - afterColon: true, - }, - ], - 'no-octal': 2, - 'no-redeclare': 2, - 'comma-spacing': 2, - 'no-new-object': 2, - 'arrow-spacing': 2, - quotes: [ - 2, - 'single', - { - avoidEscape: true, - allowTemplateLiterals: true, - }, - ], - }, - overrides: [ - { - files: ['**/*.ts'], - parser: '@typescript-eslint/parser', - extends: [ - 'plugin:@typescript-eslint/recommended', // Uses the recommended rules from the @typescript-eslint/eslint-plugin - 'prettier/@typescript-eslint', - ], - }, - ], -}; diff --git a/netease_api/.gitignore b/netease_api/.gitignore deleted file mode 100644 index f284b53..0000000 --- a/netease_api/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -.DS_Store -node_modules -*.log -.idea -.vscode \ No newline at end of file diff --git a/netease_api/.npmignore b/netease_api/.npmignore deleted file mode 100644 index 3f24434..0000000 --- a/netease_api/.npmignore +++ /dev/null @@ -1,3 +0,0 @@ -static -docs -node_modules \ No newline at end of file diff --git a/netease_api/.prettierrc b/netease_api/.prettierrc deleted file mode 100644 index aea847c..0000000 --- a/netease_api/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "semi": true, - "trailingComma": "all", - "singleQuote": true -} diff --git a/netease_api/README.MD b/netease_api/README.MD deleted file mode 100644 index 679cf3e..0000000 --- a/netease_api/README.MD +++ /dev/null @@ -1,312 +0,0 @@ -# 网易云音乐 API - -网易云音乐 Node.js API service - -
- -## 灵感来自 - -[disoul/electron-cloud-music](https://github.com/disoul/electron-cloud-music) - -[darknessomi/musicbox](https://github.com/darknessomi/musicbox) - -[sqaiyan/netmusic-node](https://github.com/sqaiyan/netmusic-node) - - -## 环境要求 - -需要 NodeJS 8.12+ 环境 - -## 安装 - -```shell - -$ git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git - -$ npm install -``` - -或者 -```shell -$ git clone https://github.com/Binaryify/NeteaseCloudMusicApi.git - -$ npm install -``` - -## 运行 - -```shell -$ node app.js -``` - -服务器启动默认端口为 3000,若不想使用 3000 端口,可使用以下命令: Mac/Linux - -```shell -$ PORT=4000 node app.js -``` - -windows 下使用 git-bash 或者 cmder 等终端执行以下命令: - -```shell -$ set PORT=4000 && node app.js -``` - -## 可以在Node.js调用 -v3.31.0后支持Node.js调用,导入的方法为`module`内的文件名,返回内容包含`status`和`body`,`status`为状态码,`body`为请求返回内容,参考`module_example` 文件夹下的 `test.js` -```js -const { login_cellphone, user_cloud } = require('NeteaseCloudMusicApi') -async function main() { - try { - const result = await login_cellphone({ - phone: '手机号', - password: '密码' - }) - console.log(result) - const result2 = await user_cloud({ - cookie: result.body.cookie // 凭证 - }) - console.log(result2.body) - - } catch (error) { - console.log(error) - } -} -main() -``` - -## 支持 TypeScript -```ts -// test.ts -import { banner } from 'NeteaseCloudMusicApi' -banner({ type:0 }).then(res=>{ - console.log(res) -}) -``` - - -## 使用文档 - -[文档地址](https://binaryify.github.io/NeteaseCloudMusicApi) - -[文档地址2](https://neteasecloudmusicapi.vercel.app) - - - - -## 功能特性 -1. 登录 -2. 刷新登录 -3. 发送验证码 -4. 校验验证码 -5. 注册(修改密码) -6. 获取用户信息 , 歌单,收藏,mv, dj 数量 -7. 获取用户歌单 -8. 获取用户电台 -9. 获取用户关注列表 -10. 获取用户粉丝列表 -11. 获取用户动态 -12. 获取用户播放记录 -13. 获取精品歌单 -14. 获取歌单详情 -15. 搜索 -16. 搜索建议 -17. 获取歌词 -18. 歌曲评论 -19. 收藏单曲到歌单 -20. 专辑评论 -21. 歌单评论 -22. mv 评论 -23. 电台节目评论 -24. banner -25. 获取歌曲详情 -26. 获取专辑内容 -27. 获取歌手单曲 -28. 获取歌手 mv -29. 获取歌手专辑 -30. 获取歌手描述 -31. 获取相似歌手 -32. 获取相似歌单 -33. 相似 mv -34. 获取相似音乐 -35. 获取最近 5 个听了这首歌的用户 -36. 获取每日推荐歌单 -37. 获取每日推荐歌曲 -38. 私人 FM -39. 签到 -40. 喜欢音乐 -41. 垃圾桶 -42. 歌单 ( 网友精选碟 ) -43. 新碟上架 -44. 热门歌手 -45. 最新 mv -46. 推荐 mv -47. 推荐歌单 -48. 推荐新音乐 -49. 推荐电台 -50. 推荐节目 -51. 独家放送 -52. mv 排行 -53. 获取 mv 数据 -54. 播放 mv/视频 -55. 排行榜 -56. 歌手榜 -57. 云盘 -58. 电台 - 推荐 -59. 电台 - 分类 -60. 电台 - 分类推荐 -61. 电台 - 订阅 -62. 电台 - 详情 -63. 电台 - 节目 -64. 给评论点赞 -65. 获取动态 -66. 热搜列表(简略) -67. 发送私信 -68. 发送私信歌单 -69. 新建歌单 -70. 收藏/取消收藏歌单 -71. 歌单分类 -72. 收藏的歌手列表 -73. 订阅的电台列表 -74. 相关歌单推荐 -75. 付费精选接口 -76. 音乐是否可用检查接口 -77. 登录状态 -78. 获取视频播放地址 -79. 发送/删除评论 -80. 热门评论 -81. 视频评论 -82. 退出登录 -83. 所有榜单 -84. 所有榜单内容摘要 -85. 收藏视频 -86. 收藏 MV -87. 视频详情 -88. 相关视频 -89. 关注用户 -90. 新歌速递 -91. 喜欢音乐列表(无序) -92. 收藏的 MV 列表 -93. 获取最新专辑 -94. 听歌打卡 -95. 获取视频标签/分类下的视频 -96. 已收藏专辑列表 -97. 获取动态评论 -98. 歌单收藏者列表 -99. 云盘歌曲删除 -100. 热门话题 -101. 电台 - 推荐类型 -102. 电台 - 非热门类型 -103. 电台 - 今日优选 -104. 心动模式/智能播放 -105. 转发动态 -106. 删除动态 -107. 分享歌曲、歌单、mv、电台、电台节目到动态 -108. 通知-私信 -109. 通知-评论 -110. 通知-@我 -111. 通知-通知 -112. 设置 -113. 云盘数据详情 -114. 私信内容 -115. 我的数字专辑 -116. batch批量请求接口 -117. 获取视频标签列表 -118. 全部mv -119. 网易出品mv -120. 收藏/取消收藏专辑 -121. 专辑动态信息 -122. 热搜列表(详细) -123. 更换绑定手机 -124. 检测手机号码是否已注册 -125. 初始化昵称 -126. 更新歌单描述 -127. 更新歌单名 -128. 更新歌单标签 -129. 默认搜索关键词 -130. 删除歌单 -131. 电台banner -132. 用户电台 -133. 热门电台 -134. 电台 - 节目详情 -135. 电台 - 节目榜 -136. 电台 - 新晋电台榜/热门电台榜 -137. 类别热门电台 -138. 云村热评 -139. 电台24小时节目榜 -140. 电台24小时主播榜 -141. 电台最热主播榜 -142. 电台主播新人榜 -143. 电台付费精品榜 -144. 歌手热门50首歌曲 -145. 购买数字专辑 -146. 获取 mv 点赞转发评论数数据 -147. 获取视频点赞转发评论数数据 -148. 调整歌单顺序 -149. 调整歌曲顺序 -150. 独家放送列表 -151. 获取推荐视频 -152. 获取视频分类列表 -153. 获取全部视频列表接口 -154. 获取历史日推可用日期列表 -155. 获取历史日推详细数据 -156. 国家编码列表 -157. 首页-发现 -158. 首页-发现-圆形图标入口列表 -159. 数字专辑-全部新碟 -160. 数字专辑-热门新碟 -161. 数字专辑&数字单曲-榜单 -162. 数字专辑-语种风格馆 -163. 数字专辑详情 -164. 更新头像 -165. 歌单封面上传 -166. 楼层评论 -167. 歌手全部歌曲 -168. 精品歌单标签列表 -169. 用户等级信息 -170. 电台个性推荐 -171. 用户绑定信息 -172. 用户绑定手机 -173. 新版评论 -174. 点赞过的视频 -175. 收藏视频到视频歌单 -176. 删除视频歌单里的视频 -177. 最近播放的视频 -178. 音乐日历 -179. 电台订阅者列表 -180. 云贝签到信息 -181. 云贝签到 -182. 云贝所有任务 -183. 云贝todo任务 -184. 云贝今日签到信息 -185. 云贝完成任务 -186. 云贝收入 -187. 云贝支出 -188. 云贝账户信息 -189. 账号信息 - -## 更新日志 - -[changelog](https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/CHANGELOG.MD) - -## 单元测试 - -```shell -$ npm test -``` - - - - -## 贡献者 - - - -## License - -[The MIT License (MIT)](https://github.com/Binaryify/NeteaseCloudMusicApi/blob/master/LICENSE) diff --git a/netease_api/app.js b/netease_api/app.js deleted file mode 100644 index b1f3294..0000000 --- a/netease_api/app.js +++ /dev/null @@ -1,117 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const express = require('express'); -const bodyParser = require('body-parser'); -const request = require('./util/request'); -const packageJSON = require('./package.json'); -const exec = require('child_process').exec; -const cache = require('./util/apicache').middleware; -const { cookieToJson } = require('./util/index'); -const fileUpload = require('express-fileupload'); -// version check -exec('npm info NeteaseCloudMusicApi version', (err, stdout, stderr) => { - if (!err) { - let version = stdout.trim(); - if (packageJSON.version < version) { - console.log( - `最新版本: ${version}, 当前版本: ${packageJSON.version}, 请及时更新`, - ); - } - } -}); - -const app = express(); - -// CORS & Preflight request -app.use((req, res, next) => { - if (req.path !== '/' && !req.path.includes('.')) { - res.set({ - 'Access-Control-Allow-Credentials': true, - 'Access-Control-Allow-Origin': req.headers.origin || '*', - 'Access-Control-Allow-Headers': 'X-Requested-With,Content-Type', - 'Access-Control-Allow-Methods': 'PUT,POST,GET,DELETE,OPTIONS', - 'Content-Type': 'application/json; charset=utf-8', - }); - } - req.method === 'OPTIONS' ? res.status(204).end() : next(); -}); - -// cookie parser -app.use((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(); -}); - -// body parser -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({ extended: false })); - -app.use(fileUpload()); - -// static -app.use(express.static(path.join(__dirname, 'public'))); - -// cache -app.use(cache('2 minutes', (req, res) => res.statusCode === 200)); -// router -const special = { - 'daily_signin.js': '/daily_signin', - 'fm_trash.js': '/fm_trash', - 'personal_fm.js': '/personal_fm', -}; - -fs.readdirSync(path.join(__dirname, 'module')) - .reverse() - .forEach((file) => { - if (!file.endsWith('.js')) return; - let route = - file in special - ? special[file] - : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/'); - let question = require(path.join(__dirname, 'module', file)); - - app.use(route, (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - - question(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }); - }); - -const port = process.env.PORT || 3000; -const host = process.env.HOST || ''; - -app.server = app.listen(port, host, () => { - console.log(`server running @ http://${host ? host : 'localhost'}:${port}`); -}); - -module.exports = app; diff --git a/netease_api/buildScript.js b/netease_api/buildScript.js deleted file mode 100644 index e557384..0000000 --- a/netease_api/buildScript.js +++ /dev/null @@ -1,60 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const express = require('express'); -const request = require('./util/request'); -const strip = require('strip-comments'); -var router = express.Router(); -const special = { - 'daily_signin.js': '/daily_signin', - 'fm_trash.js': '/fm_trash', - 'personal_fm.js': '/personal_fm', -}; - -const app = express(); -const temp = {}; - -fs.readdirSync(path.join(__dirname, 'module')) - .reverse() - .forEach((file) => { - if (!file.endsWith('.js')) return; - let route = - file in special - ? special[file] - : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/'); - let question = require(path.join(__dirname, 'module', file)); - // console.log(question.toString()) - const func = `(req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const ${file.replace(/\.js$/i, '')} = ${strip(question.toString())}; - ${file.replace(/\.js$/i, '')}(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }) - }`; - temp[route] = func; - }); - -fs.writeFileSync( - path.resolve(__dirname, './test_result.json'), - JSON.stringify(temp), -); diff --git a/netease_api/interface.d.ts b/netease_api/interface.d.ts deleted file mode 100644 index 548768d..0000000 --- a/netease_api/interface.d.ts +++ /dev/null @@ -1,1311 +0,0 @@ -export interface RequestBaseConfig { - cookie?: string; - realIP?: string; // IPv4/IPv6 filled in X-Real-IP - proxy?: string; // HTTP proxy -} - -export interface MultiPageConfig { - limit?: string | number; - offset?: string | number; -} - -export interface ImageUploadConfig { - imgFile: { - name: string; - data: string | Buffer; - }; - imgSize?: number; - imgX?: number; - imgY?: number; -} - -export interface APIBaseResponse { - code: number; - cookie: string; - [index: string]: unknown; -} - -export interface Response { - status: number; // The Http Response Code - body: APIBaseResponse; // API Response body - cookie: string[]; -} - -export const enum SubAction { - sub = 1, - unsub = 0, -} - -export function activate_init_profile( - params: { nickname: string } & RequestBaseConfig, -): Promise请在控制台看结果
- - - - - diff --git a/netease_api/renovate.json b/netease_api/renovate.json deleted file mode 100644 index 4f39080..0000000 --- a/netease_api/renovate.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["config:base"] -} diff --git a/netease_api/routes/index.js b/netease_api/routes/index.js deleted file mode 100644 index 4014cd0..0000000 --- a/netease_api/routes/index.js +++ /dev/null @@ -1,8811 +0,0 @@ -const { cookieToJson } = require('../util/index'); -const crypto = require('crypto'); -const request = require('../util/request'); -module.exports = { - '/yunbei/today': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_today = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/point/today/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_today(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/tasks/todo': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_tasks_todo = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/usertool/task/todo/query`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_tasks_todo(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/tasks': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_tasks = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/usertool/task/list/all`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_tasks(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/task/finish': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_task_finish = (query, request) => { - const data = { - userTaskId: query.userTaskId, - depositCode: query.depositCode || '0', - }; - return request( - 'POST', - `https://music.163.com/api/usertool/task/point/receive`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_task_finish(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/sign': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_sign = (query, request) => { - const data = { type: '0' }; - return request( - 'POST', - `https://music.163.com/api/point/dailyTask`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_sign(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/receipt': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_receipt = (query, request) => { - const data = { limit: query.limit || 10, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/store/api/point/receipt`, - data, - { - crypto: 'api', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_receipt(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/info': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_info = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/v1/user/info`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - yunbei_info(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei/expense': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei_expense = (query, request) => { - const data = { limit: query.limit || 10, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/store/api/point/expense`, - data, - { - crypto: 'api', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei_expense(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/yunbei': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const yunbei = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/point/signed/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - yunbei(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/weblog': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const weblog = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/feedback/weblog`, - query.data || {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - weblog(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/url': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_url = (query, request) => { - const data = { - ids: '["' + query.id + '"]', - resolution: query.res || 1080, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/playurl`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_url(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/timeline/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_timeline_recommend = (query, request) => { - const data = { - offset: query.offset || 0, - filterLives: '[]', - withProgramInfo: 'true', - needUrl: '1', - resolution: '480', - }; - return request( - 'POST', - `https://music.163.com/api/videotimeline/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_timeline_recommend(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/timeline/all': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_timeline_all = (query, request) => { - const data = { - groupId: 0, - offset: query.offset || 0, - need_preview_url: 'true', - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/videotimeline/otherclient/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_timeline_all(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/video/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_sub(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/group/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_group_list = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/cloudvideo/group/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_group_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/group': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_group = (query, request) => { - const data = { - groupId: query.id, - offset: query.offset || 0, - need_preview_url: 'true', - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/videotimeline/videogroup/otherclient/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_group(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/detail/info': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_detail_info = (query, request) => { - const data = { threadid: `R_VI_62_${query.vid}`, composeliked: true }; - return request( - 'POST', - `https://music.163.com/api/comment/commentthread/info`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_detail_info(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_detail = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/v1/video/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/video/category/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const video_category_list = (query, request) => { - const data = { - offset: query.offset || 0, - total: 'true', - limit: query.limit || 99, - }; - return request( - 'POST', - `https://music.163.com/api/cloudvideo/category/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - video_category_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_update = (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', - `https://music.163.com/weapi/user/profile/update`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/subcount': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_subcount = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/subcount`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_subcount(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/replacephone': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_replacephone = (query, request) => { - const data = { - phone: query.phone, - captcha: query.captcha, - oldcaptcha: query.oldcaptcha, - countrycode: query.countrycode || '86', - }; - return request( - 'POST', - `https://music.163.com/api/user/replaceCellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_replacephone(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/record': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_record = (query, request) => { - const data = { uid: query.uid, type: query.type || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/v1/play/record`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_record(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_playlist = (query, request) => { - const data = { - uid: query.uid, - limit: query.limit || 30, - offset: query.offset || 0, - includeVideo: true, - }; - return request('POST', `https://music.163.com/api/user/playlist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_playlist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/level': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_level = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/weapi/user/level`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_level(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/follows': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_follows = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - order: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/user/getfollows/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_follows(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/followeds': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_followeds = (query, request) => { - const data = { - userId: query.uid, - time: query.lasttime || -1, - limit: query.limit || 30, - }; - return request( - 'POST', - `https://music.163.com/eapi/user/getfolloweds/${query.uid}`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/user/getfolloweds', - realIP: query.realIP, - }, - ); - }; - user_followeds(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/event': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_event = (query, request) => { - const data = { - getcounts: true, - time: query.lasttime || -1, - limit: query.limit || 30, - total: false, - }; - return request( - 'POST', - `https://music.163.com/weapi/event/get/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_event(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/dj': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_dj = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/dj/program/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_dj(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_detail = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/user/detail/${query.uid}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/cloud/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_cloud_detail = (query, request) => { - const id = query.id.replace(/\s/g, '').split(','); - const data = { songIds: id }; - return request( - 'POST', - `https://music.163.com/weapi/v1/cloud/get/byids`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_cloud_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/cloud/del': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_cloud_del = (query, request) => { - const data = { songIds: [query.id] }; - return request('POST', `https://music.163.com/weapi/cloud/del`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_cloud_del(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/cloud': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_cloud = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request('POST', `https://music.163.com/weapi/v1/cloud/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - user_cloud(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/binding': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_binding = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/v1/user/bindings/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_binding(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/audio': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_audio = (query, request) => { - const data = { userId: query.uid }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/get/byuser`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_audio(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/user/account': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const user_account = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/nuser/account/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - user_account(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/toplist/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const toplist_detail = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/toplist/detail`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - toplist_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/toplist/artist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const toplist_artist = (query, request) => { - const data = { - type: query.type || 1, - limit: 100, - offset: 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/toplist/artist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - toplist_artist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/toplist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const toplist = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/toplist`, - {}, - { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - toplist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/song': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_song = (query, request) => { - const data = { areaId: query.type || 0, total: true }; - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/new/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_song(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/playlist/highquality': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_playlist_highquality = (query, request) => { - const data = { - cat: query.cat || '全部', - limit: query.limit || 50, - lasttime: query.before || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/playlist/highquality/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_playlist_highquality(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_playlist = (query, request) => { - const data = { - cat: query.cat || '全部', - order: query.order || 'hot', - limit: query.limit || 50, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_playlist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_mv = (query, request) => { - const data = { - area: query.area || '', - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/mv/toplist`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - top_mv(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_list = (query, request) => { - query.cookie.os = 'pc'; - if (query.idx) { - return Promise.resolve({ - status: 500, - body: { code: 500, msg: '不支持此方式调用,只支持id调用' }, - }); - } - const data = { id: query.id, n: '500', s: '0' }; - return request( - 'POST', - `https://interface3.music.163.com/api/playlist/v4/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/artists': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_artists = (query, request) => { - const data = { - limit: query.limit || 50, - offset: query.offset || 0, - total: true, - }; - return request('POST', `https://music.163.com/weapi/artist/top`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - top_artists(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/top/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const top_album = (query, request) => { - const date = new Date(); - const data = { - area: query.area || 'ALL', - limit: query.limit || 50, - offset: query.offset || 0, - type: query.type || 'new', - year: query.year || date.getFullYear(), - month: query.month || date.getMonth() + 1, - total: false, - rcmd: true, - }; - return request( - 'POST', - `https://music.163.com/api/discovery/new/albums/area`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - top_album(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/song/url': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const song_url = (query, request) => { - if (!('MUSIC_U' in query.cookie)) - query.cookie._ntes_nuid = crypto.randomBytes(16).toString('hex'); - query.cookie.os = 'pc'; - const data = { - ids: '[' + query.id + ']', - br: parseInt(query.br || 999000), - }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/song/enhance/player/url`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/song/enhance/player/url', - }, - ); - }; - song_url(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/song/order/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const song_order_update = (query, request) => { - const data = { pid: query.pid, trackIds: query.ids, op: 'update' }; - return request( - 'POST', - `http://interface.music.163.com/api/playlist/manipulate/tracks`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/desc/update', - realIP: query.realIP, - }, - ); - }; - song_order_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/song/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const song_detail = (query, request) => { - query.ids = query.ids.split(/\s*,\s*/); - const data = { - c: '[' + query.ids.map((id) => '{"id":' + id + '}').join(',') + ']', - ids: '[' + query.ids.join(',') + ']', - }; - return request( - 'POST', - `https://music.163.com/weapi/v3/song/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - song_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/user': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_user = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiUser`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_user(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/song': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_song = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/simiSong`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_song(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_playlist = (query, request) => { - const data = { - songid: query.id, - limit: query.limit || 50, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiPlaylist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_playlist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_mv = (query, request) => { - const data = { mvid: query.mvid }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiMV`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_mv(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/simi/artist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const simi_artist = (query, request) => { - const data = { artistid: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/discovery/simiArtist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - simi_artist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/share/resource': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const share_resource = (query, request) => { - const data = { - type: query.type || 'song', - msg: query.msg || '', - id: query.id || '', - }; - return request( - 'POST', - `https://music.163.com/weapi/share/friends/resource`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - share_resource(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/setting': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const setting = (query, request) => { - const data = {}; - return request('POST', `https://music.163.com/api/user/setting`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - setting(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/send/text': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const send_text = (query, request) => { - query.cookie.os = 'pc'; - const data = { - type: 'text', - msg: query.msg, - userIds: '[' + query.user_ids + ']', - }; - return request( - 'POST', - `https://music.163.com/weapi/msg/private/send`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - send_text(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/send/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const send_playlist = (query, request) => { - query.cookie.os = 'pc'; - const data = { - id: query.playlist, - type: 'playlist', - msg: query.msg, - userIds: '[' + query.user_ids + ']', - }; - return request( - 'POST', - `https://music.163.com/weapi/msg/private/send`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - send_playlist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/suggest': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_suggest = (query, request) => { - const data = { s: query.keywords || '' }; - let type = query.type == 'mobile' ? 'keyword' : 'web'; - return request( - 'POST', - `https://music.163.com/weapi/search/suggest/` + type, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - search_suggest(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/multimatch': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_multimatch = (query, request) => { - const data = { type: query.type || 1, s: query.keywords || '' }; - return request( - 'POST', - `https://music.163.com/weapi/search/suggest/multimatch`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - search_multimatch(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/hot/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_hot_detail = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/weapi/hotsearchlist/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - search_hot_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_hot = (query, request) => { - const data = { type: 1111 }; - return request('POST', `https://music.163.com/weapi/search/hot`, data, { - crypto: 'weapi', - ua: 'mobile', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - search_hot(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search/default': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search_default = (query, request) => { - return request( - 'POST', - `https://interface3.music.163.com/eapi/search/defaultkeyword/get`, - {}, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/search/defaultkeyword/get', - realIP: query.realIP, - }, - ); - }; - search_default(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/search': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const search = (query, request) => { - const data = { - s: query.keywords, - type: query.type || 1, - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/weapi/search/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - search(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/scrobble': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const scrobble = (query, request) => { - const data = { - logs: JSON.stringify([ - { - action: 'play', - json: { - download: 0, - end: 'playend', - id: query.id, - sourceId: query.sourceid, - time: query.time, - type: 'song', - wifi: 0, - }, - }, - ]), - }; - return request( - 'POST', - `https://music.163.com/weapi/feedback/weblog`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - scrobble(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/resource/like': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const resource_like = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'like' : 'unlike'; - query.type = { 1: 'R_MV_5_', 4: 'A_DJ_1_', 5: 'R_VI_62_', 6: 'A_EV_2_' }[ - query.type - ]; - const data = { threadId: query.type + query.id }; - if (query.type === 'A_EV_2_') { - data.threadId = query.threadId; - } - return request( - 'POST', - `https://music.163.com/weapi/resource/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - resource_like(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/related/allvideo': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const related_allvideo = (query, request) => { - const data = { id: query.id, type: /^\\d+$/.test(query.id) ? 0 : 1 }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/v1/allvideo/rcmd`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - related_allvideo(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/register/cellphone': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const register_cellphone = (query, request) => { - query.cookie.os = 'pc'; - const data = { - captcha: query.captcha, - phone: query.phone, - password: crypto.createHash('md5').update(query.password).digest('hex'), - nickname: query.nickname, - }; - return request( - 'POST', - `https://music.163.com/api/register/cellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - register_cellphone(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/recommend/songs': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const recommend_songs = (query, request) => { - query.cookie.os = 'ios'; - const data = {}; - return request( - 'POST', - `https://music.163.com/api/v3/discovery/recommend/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - recommend_songs(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/recommend/resource': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const recommend_resource = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/discovery/recommend/resource`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - recommend_resource(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/rebind': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const rebind = (query, request) => { - const data = { - captcha: query.captcha, - phone: query.phone, - oldcaptcha: query.oldcaptcha, - ctcode: query.ctcode || '86', - }; - return request( - 'POST', - `https://music.163.com/api/user/replaceCellphone`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - rebind(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/program/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const program_recommend = (query, request) => { - const data = { - cateId: query.type, - limit: query.limit || 10, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/program/recommend/v1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - program_recommend(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playmode/intelligence/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playmode_intelligence_list = (query, request) => { - const data = { - songId: query.id, - type: 'fromPlayOne', - playlistId: query.pid, - startMusicId: query.sid || query.id, - count: query.count || 1, - }; - return request( - 'POST', - `https://music.163.com/weapi/playmode/intelligence/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playmode_intelligence_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/video/recent': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_video_recent = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/playlist/video/recent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_video_recent(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_update = (query, request) => { - query.cookie.os = 'pc'; - query.desc = query.desc || ''; - query.tags = query.tags || ''; - const data = { - '/api/playlist/desc/update': `{\"id\":${query.id},\"desc\":\"${query.desc}\"}`, - '/api/playlist/tags/update': `{\"id\":${query.id},\"tags\":\"${query.tags}\"}`, - '/api/playlist/update/name': `{\"id\":${query.id},\"name\":\"${query.name}\"}`, - }; - return request('POST', `https://music.163.com/weapi/batch`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - playlist_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/tracks': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_tracks = async (query, request) => { - query.cookie.os = 'pc'; - const tracks = query.tracks.split(','); - const data = { - op: query.op, - pid: query.pid, - trackIds: JSON.stringify(tracks), - imme: 'true', - }; - try { - const res = await request( - 'POST', - `https://music.163.com/api/playlist/manipulate/tracks`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { status: 200, body: { ...res } }; - } catch (error) { - if (error.body.code === 512) { - return request( - 'POST', - `https://music.163.com/api/playlist/manipulate/tracks`, - { - op: query.op, - pid: query.pid, - trackIds: JSON.stringify([...tracks, ...tracks]), - imme: 'true', - }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - } - } - }; - playlist_tracks(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/track/delete': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_track_delete = async (query, request) => { - query.cookie.os = 'pc'; - query.ids = query.ids || ''; - const data = { - id: query.id, - tracks: JSON.stringify( - query.ids.split(',').map((item) => { - return { type: 3, id: item }; - }), - ), - }; - return request( - 'POST', - `https://music.163.com/api/playlist/track/delete`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_track_delete(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/track/add': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_track_add = async (query, request) => { - query.cookie.os = 'pc'; - query.ids = query.ids || ''; - const data = { - id: query.pid, - tracks: JSON.stringify( - query.ids.split(',').map((item) => { - return { type: 3, id: item }; - }), - ), - }; - console.log(data); - return request( - 'POST', - `https://music.163.com/api/playlist/track/add`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_track_add(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/tags/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_tags_update = (query, request) => { - const data = { id: query.id, tags: query.tags }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/tags/update`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/tags/update', - realIP: query.realIP, - }, - ); - }; - playlist_tags_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/subscribers': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_subscribers = (query, request) => { - const data = { - id: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/subscribers`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_subscribers(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/subscribe': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_subscribe = (query, request) => { - query.t = query.t == 1 ? 'subscribe' : 'unsubscribe'; - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_subscribe(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/order/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_order_update = (query, request) => { - query.cookie.os = 'pc'; - const data = { ids: query.ids }; - return request( - 'POST', - `https://music.163.com/api/playlist/order/update`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_order_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/name/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_name_update = (query, request) => { - const data = { id: query.id, name: query.name }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/update/name`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/update/name', - realIP: query.realIP, - }, - ); - }; - playlist_name_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/mylike': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_mylike = (query, request) => { - const data = { time: query.time || '-1', limit: query.limit || '12' }; - return request( - 'POST', - `https://music.163.com/api/mlog/playlist/mylike/bytime/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_mylike(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_hot = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/playlist/hottags`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_hot(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/highquality/tags': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_highquality_tags = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/playlist/highquality/tags`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_highquality_tags(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_detail = (query, request) => { - const data = { id: query.id, n: 100000, s: query.s || 8 }; - return request( - 'POST', - `https://music.163.com/api/v6/playlist/detail`, - data, - { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/desc/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_desc_update = (query, request) => { - const data = { id: query.id, desc: query.desc }; - return request( - 'POST', - `https://interface3.music.163.com/eapi/playlist/desc/update`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/playlist/desc/update', - realIP: query.realIP, - }, - ); - }; - playlist_desc_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/delete': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_delete = (query, request) => { - query.cookie.os = 'pc'; - const data = { ids: '[' + query.id + ']' }; - return request( - 'POST', - `https://music.163.com/weapi/playlist/remove`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_delete(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/create': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_create = (query, request) => { - query.cookie.os = 'pc'; - const data = { - name: query.name, - privacy: query.privacy, - type: query.type || 'NORMAL', - }; - return request( - 'POST', - `https://music.163.com/api/playlist/create`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_create(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/cover/update': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_cover_update = async (query, request) => { - const uploadInfo = await uploadPlugin(query, request); - const res = await request( - 'POST', - `https://music.163.com/weapi/playlist/cover/update`, - { id: query.id, coverImgId: uploadInfo.imgId }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { - status: 200, - body: { code: 200, data: { ...uploadInfo, ...res.body } }, - }; - }; - playlist_cover_update(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/playlist/catlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const playlist_catlist = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/playlist/catalogue`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - playlist_catlist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/privatecontent/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_privatecontent_list = (query, request) => { - const data = { - offset: query.offset || 0, - total: 'true', - limit: query.limit || 60, - }; - return request( - 'POST', - `https://music.163.com/api/v2/privatecontent/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_privatecontent_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/privatecontent': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_privatecontent = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/privatecontent`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_privatecontent(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/newsong': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_newsong = (query, request) => { - const data = { - type: 'recommend', - limit: query.limit || 10, - areaId: query.areaId || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/personalized/newsong`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_newsong(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_mv = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/mv`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_mv(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized/djprogram': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized_djprogram = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/personalized/djprogram`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized_djprogram(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personalized': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personalized = (query, request) => { - const data = { limit: query.limit || 30, total: true, n: 1000 }; - return request( - 'POST', - `https://music.163.com/weapi/personalized/playlist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personalized(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/personal_fm': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const personal_fm = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/radio/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - personal_fm(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/url': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_url = (query, request) => { - const data = { id: query.id, r: query.r || 1080 }; - return request( - 'POST', - `https://music.163.com/weapi/song/enhance/play/mv/url`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_url(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_sublist = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudvideo/allvideo/sublist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_sublist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { mvId: query.mvid, mvIds: '["' + query.mvid + '"]' }; - return request( - 'POST', - `https://music.163.com/weapi/mv/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_sub(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/first': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_first = (query, request) => { - const data = { - area: query.area || '', - limit: query.limit || 30, - total: true, - }; - return request( - 'POST', - `https://interface.music.163.com/weapi/mv/first`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_first(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/exclusive/rcmd': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_exclusive_rcmd = (query, request) => { - const data = { offset: query.offset || 0, limit: query.limit || 30 }; - return request( - 'POST', - `https://interface.music.163.com/api/mv/exclusive/rcmd`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_exclusive_rcmd(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/detail/info': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_detail_info = (query, request) => { - const data = { threadid: `R_MV_5_${query.mvid}`, composeliked: true }; - return request( - 'POST', - `https://music.163.com/api/comment/commentthread/info`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_detail_info(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_detail = (query, request) => { - const data = { id: query.mvid }; - return request('POST', `https://music.163.com/api/v1/mv/detail`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - mv_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/mv/all': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const mv_all = (query, request) => { - const data = { - tags: JSON.stringify({ - 地区: query.area || '全部', - 类型: query.type || '全部', - 排序: query.order || '上升最快', - }), - offset: query.offset || 0, - total: 'true', - limit: query.limit || 30, - }; - return request( - 'POST', - `https://interface.music.163.com/api/mv/all`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - mv_all(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/private/history': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_private_history = (query, request) => { - const data = { - userId: query.uid, - limit: query.limit || 30, - time: query.before || 0, - total: 'true', - }; - return request( - 'POST', - `https://music.163.com/api/msg/private/history`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - msg_private_history(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/private': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_private = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - total: 'true', - }; - return request( - 'POST', - `https://music.163.com/api/msg/private/users`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - msg_private(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/notices': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_notices = (query, request) => { - const data = { limit: query.limit || 30, time: query.lasttime || -1 }; - return request('POST', `https://music.163.com/api/msg/notices`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - msg_notices(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/forwards': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_forwards = (query, request) => { - const data = { - offset: query.offset || 0, - limit: query.limit || 30, - total: 'true', - }; - return request('POST', `https://music.163.com/api/forwards/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - msg_forwards(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/msg/comments': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const msg_comments = (query, request) => { - const data = { - beforeTime: query.before || '-1', - limit: query.limit || 30, - total: 'true', - uid: query.uid, - }; - return request( - 'POST', - `https://music.163.com/api/v1/user/comments/${query.uid}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - msg_comments(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/lyric': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const lyric = (query, request) => { - query.cookie.os = 'pc'; - const data = { id: query.id, lv: -1, kv: -1, tv: -1 }; - return request('POST', `https://music.163.com/api/song/lyric`, data, { - crypto: 'linuxapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - lyric(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/logout': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const logout = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/logout`, - {}, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - logout(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login/status': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login_status = (query, request) => { - return request( - 'GET', - `https://music.163.com`, - {}, - { cookie: query.cookie, proxy: query.proxy, realIP: query.realIP }, - ).then((response) => { - try { - let profile = eval( - `(${/GUser\\s*=\\s*([^;]+);/.exec(response.body)[1]})`, - ); - let bindings = eval( - `(${/GBinds\\s*=\\s*([^;]+);/.exec(response.body)[1]})`, - ); - response.body = { code: 200, profile: profile, bindings: bindings }; - return response; - } catch (err) { - response.status = 301; - response.body = { code: 301 }; - return Promise.reject(response); - } - }); - }; - login_status(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login/refresh': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login_refresh = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/login/token/refresh`, - {}, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - login_refresh(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login/cellphone': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login_cellphone = async (query, request) => { - query.cookie.os = 'pc'; - const data = { - phone: query.phone, - countrycode: query.countrycode || '86', - password: - query.md5_password || - crypto.createHash('md5').update(query.password).digest('hex'), - rememberLogin: 'true', - }; - let result = await request( - 'POST', - `https://music.163.com/weapi/login/cellphone`, - data, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - if (result.body.code === 200) { - result = { - status: 200, - body: { ...result.body, cookie: result.cookie.join(';') }, - cookie: result.cookie, - }; - } - return result; - }; - login_cellphone(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/login': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const login = async (query, request) => { - query.cookie.os = 'pc'; - const data = { - username: query.email, - password: - query.md5_password || - crypto.createHash('md5').update(query.password).digest('hex'), - rememberLogin: 'true', - }; - let result = await request( - 'POST', - `https://music.163.com/weapi/login`, - data, - { - crypto: 'weapi', - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - if (result.body.code === 502) { - return { - status: 200, - body: { msg: '账号或密码错误', code: 502, message: '账号或密码错误' }, - }; - } - if (result.body.code === 200) { - result = { - status: 200, - body: { ...result.body, cookie: result.cookie.join(';') }, - cookie: result.cookie, - }; - } - return result; - }; - login(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/likelist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const likelist = (query, request) => { - const data = { uid: query.uid }; - return request( - 'POST', - `https://music.163.com/weapi/song/like/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - likelist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/like': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const like = (query, request) => { - query.like = query.like == 'false' ? false : true; - const data = { trackId: query.id, like: query.like }; - return request( - 'POST', - `https://music.163.com/weapi/radio/like?alg=${ - query.alg || 'itembased' - }&trackId=${query.id}&time=${query.time || 25}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - like(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/hot/topic': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const hot_topic = (query, request) => { - const data = { limit: query.limit || 20, offset: query.offset || 0 }; - return request('POST', `https://music.163.com/weapi/act/hot`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - hot_topic(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/homepage/dragon/ball': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const homepage_dragon_ball = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/eapi/homepage/dragon/ball/static`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/homepage/dragon/ball/static', - realIP: query.realIP, - }, - ); - }; - homepage_dragon_ball(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/homepage/block/page': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const homepage_block_page = (query, request) => { - const data = { refresh: query.refresh || true }; - return request( - 'POST', - `https://music.163.com/api/homepage/block/page`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - homepage_block_page(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/history/recommend/songs/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const history_recommend_songs_detail = (query, request) => { - query.cookie.os = 'ios'; - const data = { date: query.date || '' }; - return request( - 'POST', - `https://music.163.com/api/discovery/recommend/songs/history/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - history_recommend_songs_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/history/recommend/songs': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const history_recommend_songs = (query, request) => { - query.cookie.os = 'ios'; - const data = {}; - return request( - 'POST', - `https://music.163.com/api/discovery/recommend/songs/history/recent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - history_recommend_songs(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/follow': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const follow = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'follow' : 'delfollow'; - return request( - 'POST', - `https://music.163.com/weapi/user/${query.t}/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - follow(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/fm_trash': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const fm_trash = (query, request) => { - const data = { songId: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/radio/trash/add?alg=RT&songId=${ - query.id - }&time=${query.time || 25}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - fm_trash(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/event/forward': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const event_forward = (query, request) => { - query.cookie.os = 'pc'; - const data = { - forwards: query.forwards, - id: query.evId, - eventUserId: query.uid, - }; - return request( - 'POST', - `https://music.163.com/weapi/event/forward`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - event_forward(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/event/del': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const event_del = (query, request) => { - const data = { id: query.evId }; - return request('POST', `https://music.163.com/eapi/event/delete`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - event_del(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/event': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const event = (query, request) => { - const data = { - pagesize: query.pagesize || 20, - lasttime: query.lasttime || -1, - }; - return request('POST', `https://music.163.com/weapi/v1/event/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - event(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/popular': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_popular = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/dj/toplist/popular`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_popular(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/pay': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_pay = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/djradio/toplist/pay`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_pay(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/newcomer': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_newcomer = (query, request) => { - const data = { limit: query.limit || 100, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/api/dj/toplist/newcomer`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_newcomer(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist/hours': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist_hours = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/dj/toplist/hours`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist_hours(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/toplist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_toplist = (query, request) => { - const data = { - limit: query.limit || 100, - offset: query.offset || 0, - type: typeMap[query.type || 'new'] || '0', - }; - return request( - 'POST', - `https://music.163.com/api/djradio/toplist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_toplist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/today/perfered': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_today_perfered = (query, request) => { - const data = { page: query.page || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/today/perfered`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_today_perfered(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/subscriber': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_subscriber = (query, request) => { - const data = { - time: query.time || '-1', - id: query.id, - limit: query.limit || '20', - total: 'true', - }; - return request( - 'POST', - `https://music.163.com/api/djradio/subscriber`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_subscriber(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_sublist = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/get/subed`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_sublist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { id: query.rid }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_sub(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/recommend/type': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_recommend_type = (query, request) => { - const data = { cateId: query.type }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/recommend`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_recommend_type(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_recommend = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/recommend/v1`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_recommend(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/radio/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_radio_hot = (query, request) => { - const data = { - cateId: query.cateId, - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request('POST', `https://music.163.com/api/djradio/hot`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - dj_radio_hot(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program/toplist/hours': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program_toplist_hours = (query, request) => { - const data = { limit: query.limit || 100 }; - return request( - 'POST', - `https://music.163.com/api/djprogram/toplist/hours`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program_toplist_hours(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program/toplist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program_toplist = (query, request) => { - const data = { limit: query.limit || 100, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/api/program/toplist/v1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program_toplist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program_detail = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/dj/program/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/program': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_program = (query, request) => { - const data = { - radioId: query.rid, - limit: query.limit || 30, - offset: query.offset || 0, - asc: toBoolean(query.asc), - }; - return request( - 'POST', - `https://music.163.com/weapi/dj/program/byradio`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_program(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/personalize/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_personalize_recommend = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/djradio/personalize/rcmd`, - { limit: query.limit || 6 }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_personalize_recommend(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/paygift': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_paygift = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/paygift/list?_nmclfl=1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_paygift(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_hot = (query, request) => { - const data = { limit: query.limit || 30, offset: query.offset || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/djradio/hot/v1`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_hot(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_detail = (query, request) => { - const data = { id: query.rid }; - return request('POST', `https://music.163.com/api/djradio/v2/get`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - dj_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/catelist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_catelist = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/category/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_catelist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/category/recommend': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_category_recommend = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/home/category/recommend`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_category_recommend(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/category/excludehot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_category_excludehot = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/djradio/category/excludehot`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_category_excludehot(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/dj/banner': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const dj_banner = (query, request) => { - const data = {}; - query.cookie.os = 'pc'; - return request( - 'POST', - `https://music.163.com/weapi/djradio/banner/get`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - dj_banner(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/digitalAlbum/purchased': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const digitalAlbum_purchased = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/api/digitalAlbum/purchased`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - digitalAlbum_purchased(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/digitalAlbum/ordering': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const digitalAlbum_ordering = (query, request) => { - const data = { - business: 'Album', - paymentMethod: query.payment, - digitalResources: JSON.stringify([ - { business: 'Album', resourceID: query.id, quantity: query.quantity }, - ]), - from: 'web', - }; - return request( - 'POST', - `https://music.163.com/api/ordering/web/digital`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - digitalAlbum_ordering(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/daily_signin': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const daily_signin = (query, request) => { - const data = { type: query.type || 0 }; - return request( - 'POST', - `https://music.163.com/weapi/point/dailyTask`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - daily_signin(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/countries/code/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const countries_code_list = (query, request) => { - const data = {}; - return request( - 'POST', - `https://interface3.music.163.com/eapi/lbs/countries/v1`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/lbs/countries/v1', - realIP: query.realIP, - }, - ); - }; - countries_code_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/video': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_video = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_VI_62_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_video(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_playlist = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/A_PL_0_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_playlist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/new': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_new = (query, request) => { - query.cookie.os = 'pc'; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - 6: 'A_EV_2_', - }[query.type]; - const threadId = query.type + query.id; - const pageSize = query.pageSize || 20; - const pageNo = query.pageNo || 1; - const data = { - threadId: threadId, - pageNo, - showInner: query.showInner || true, - pageSize, - cursor: - +query.sortType === 3 ? query.cursor || '0' : (pageNo - 1) * pageSize, - sortType: query.sortType || 1, - }; - return request( - 'POST', - `https://music.163.com/api/v2/resource/comments`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/v2/resource/comments', - }, - ); - }; - comment_new(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_mv = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_MV_5_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_mv(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/music': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_music = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/api/v1/resource/comments/R_SO_4_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_music(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/like': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_like = (query, request) => { - query.cookie.os = 'pc'; - query.t = query.t == 1 ? 'like' : 'unlike'; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - 6: 'A_EV_2_', - }[query.type]; - const data = { threadId: query.type + query.id, commentId: query.cid }; - if (query.type == 'A_EV_2_') { - data.threadId = query.threadId; - } - return request( - 'POST', - `https://music.163.com/weapi/v1/comment/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_like(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/hotwall/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_hotwall_list = (query, request) => { - const data = {}; - return request( - 'POST', - `https://music.163.com/api/comment/hotwall/list/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_hotwall_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/hot': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_hot = (query, request) => { - query.cookie.os = 'pc'; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - }[query.type]; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/hotcomments/${query.type}${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_hot(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/floor': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_floor = (query, request) => { - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - }[query.type]; - const data = { - parentCommentId: query.parentCommentId, - threadId: query.type + query.id, - time: query.time || -1, - limit: query.limit || 20, - }; - return request( - 'POST', - `https://music.163.com/api/resource/comment/floor/get`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_floor(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/event': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_event = (query, request) => { - const data = { - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/${query.threadId}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_event(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/dj': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_dj = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/A_DJ_1_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_dj(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment_album = (query, request) => { - query.cookie.os = 'pc'; - const data = { - rid: query.id, - limit: query.limit || 20, - offset: query.offset || 0, - beforeTime: query.before || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/v1/resource/comments/R_AL_3_${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment_album(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/comment': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const comment = (query, request) => { - query.cookie.os = 'pc'; - query.t = { 1: 'add', 0: 'delete', 2: 'reply' }[query.t]; - query.type = { - 0: 'R_SO_4_', - 1: 'R_MV_5_', - 2: 'A_PL_0_', - 3: 'R_AL_3_', - 4: 'A_DJ_1_', - 5: 'R_VI_62_', - 6: 'A_EV_2_', - }[query.type]; - const data = { threadId: query.type + query.id }; - if (query.type == 'A_EV_2_') { - data.threadId = query.threadId; - } - if (query.t == 'add') data.content = query.content; - else if (query.t == 'delete') data.commentId = query.commentId; - else if (query.t == 'reply') { - data.commentId = query.commentId; - data.content = query.content; - } - return request( - 'POST', - `https://music.163.com/weapi/resource/comments/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - comment(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/cloudsearch': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const cloudsearch = (query, request) => { - const data = { - s: query.keywords, - type: query.type || 1, - limit: query.limit || 30, - offset: query.offset || 0, - }; - return request( - 'POST', - `https://music.163.com/weapi/cloudsearch/get/web`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - cloudsearch(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/check/music': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const check_music = (query, request) => { - const data = { - ids: '[' + parseInt(query.id) + ']', - br: parseInt(query.br || 999000), - }; - return request( - 'POST', - `https://music.163.com/weapi/song/enhance/player/url`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ).then((response) => { - let playable = false; - if (response.body.code == 200) { - if (response.body.data[0].code == 200) { - playable = true; - } - } - if (playable) { - response.body = { success: true, message: 'ok' }; - return response; - } else { - response.status = 404; - response.body = { success: false, message: '亲爱的,暂无版权' }; - return Promise.reject(response); - } - }); - }; - check_music(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/cellphone/existence/check': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const cellphone_existence_check = (query, request) => { - const data = { cellphone: query.phone, countrycode: query.countrycode }; - return request( - 'POST', - `https://music.163.com/eapi/cellphone/existence/check`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - url: '/api/cellphone/existence/check', - realIP: query.realIP, - }, - ); - }; - cellphone_existence_check(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/captcha/verify': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const captcha_verify = (query, request) => { - const data = { - ctcode: query.ctcode || '86', - cellphone: query.phone, - captcha: query.captcha, - }; - return request( - 'POST', - `https://music.163.com/weapi/sms/captcha/verify`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - captcha_verify(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/captcha/sent': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const captcha_sent = (query, request) => { - const data = { ctcode: query.ctcode || '86', cellphone: query.phone }; - return request( - 'POST', - `https://music.163.com/weapi/sms/captcha/sent`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - captcha_sent(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/calendar': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const calendar = (query, request) => { - const data = { - startTime: query.startTime || Date.now(), - endTime: query.endTime || Date.now(), - }; - return request( - 'POST', - `https://music.163.com/api/mcalendar/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - calendar(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/banner': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const banner = (query, request) => { - const type = - { 0: 'pc', 1: 'android', 2: 'iphone', 3: 'ipad' }[query.type || 0] || - 'pc'; - return request( - 'POST', - `https://music.163.com/api/v2/banner/get`, - { clientType: type }, - { crypto: 'linuxapi', proxy: query.proxy, realIP: query.realIP }, - ); - }; - banner(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/avatar/upload': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const avatar_upload = async (query, request) => { - const uploadInfo = await uploadPlugin(query, request); - const res = await request( - 'POST', - `https://music.163.com/weapi/user/avatar/upload/v1`, - { imgid: uploadInfo.imgId }, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - return { - status: 200, - body: { code: 200, data: { ...uploadInfo, ...res.body } }, - }; - }; - avatar_upload(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/audio/match': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const audio_match = (query, request) => { - query.cookie.os = 'pc'; - const data = { - algorithmCode: 'shazam_v2', - times: 1, - sessionId: 'C999431ACDC84EDBB984763654E6F8D7', - duration: 3.3066249999999995, - from: 'recognize-song', - rawdata: realData, - }; - return request( - 'POST', - `https://music.163.com/api/music/audio/match`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - audio_match(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artists': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artists = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/artist/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artists(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/top/song': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_top_song = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/artist/top/song`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_top_song(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_sublist = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/artist/sublist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_sublist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { artistId: query.id, artistIds: '[' + query.id + ']' }; - return request( - 'POST', - `https://music.163.com/weapi/artist/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_sub(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/songs': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_songs = (query, request) => { - query.cookie.os = 'pc'; - const data = { - id: query.id, - private_cloud: 'true', - work_type: 1, - order: query.order || 'hot', - offset: query.offset || 0, - limit: query.limit || 100, - }; - return request( - 'POST', - `https://music.163.com/api/v1/artist/songs`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_songs(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/mv': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_mv = (query, request) => { - const data = { - artistId: query.id, - limit: query.limit, - offset: query.offset, - total: true, - }; - return request('POST', `https://music.163.com/weapi/artist/mvs`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - artist_mv(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_list = (query, request) => { - const data = { - initial: isNaN(query.initial) - ? (query.initial || '').toUpperCase().charCodeAt() || undefined - : query.initial, - offset: query.offset || 0, - limit: query.limit || 30, - total: true, - type: query.type || '1', - area: query.area, - }; - return request('POST', `https://music.163.com/api/v1/artist/list`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - artist_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/desc': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_desc = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/artist/introduction`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_desc(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/artist/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const artist_album = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/artist/albums/${query.id}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - artist_album(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/sublist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_sublist = (query, request) => { - const data = { - limit: query.limit || 25, - offset: query.offset || 0, - total: true, - }; - return request( - 'POST', - `https://music.163.com/weapi/album/sublist`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_sublist(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/sub': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_sub = (query, request) => { - query.t = query.t == 1 ? 'sub' : 'unsub'; - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/album/${query.t}`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_sub(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/songsaleboard': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_songsaleboard = (query, request) => { - let data = { albumType: query.albumType || 0 }; - const type = query.type || 'daily'; - if (type === 'year') { - data = { ...data, year: query.year }; - } - return request( - 'POST', - `https://music.163.com/api/feealbum/songsaleboard/${type}/type`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_songsaleboard(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/newest': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_newest = (query, request) => { - return request( - 'POST', - `https://music.163.com/api/discovery/newAlbum`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_newest(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/new': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_new = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - area: query.area || 'ALL', - }; - return request('POST', `https://music.163.com/weapi/album/new`, data, { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }); - }; - album_new(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/list/style': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_list_style = (query, request) => { - const data = { - limit: query.limit || 10, - offset: query.offset || 0, - total: true, - area: query.area || 'Z_H', - }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/appalbum/album/style`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_list_style(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/list': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_list = (query, request) => { - const data = { - limit: query.limit || 30, - offset: query.offset || 0, - total: true, - area: query.area || 'ALL', - type: query.type, - }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/albumproduct/list`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_list(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/detail/dynamic': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_detail_dynamic = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/api/album/detail/dynamic`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_detail_dynamic(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album/detail': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album_detail = (query, request) => { - const data = { id: query.id }; - return request( - 'POST', - `https://music.163.com/weapi/vipmall/albumproduct/detail`, - data, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album_detail(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/album': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const album = (query, request) => { - return request( - 'POST', - `https://music.163.com/weapi/v1/album/${query.id}`, - {}, - { - crypto: 'weapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ); - }; - album(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/activate/init/profile': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const activate_init_profile = (query, request) => { - const data = { nickname: query.nickname }; - return request( - 'POST', - `https://music.163.com/eapi/activate/initProfile`, - data, - { - crypto: 'eapi', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - url: '/api/activate/initProfile', - }, - ); - }; - activate_init_profile(query, request) - .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), { - status: answer.status, - body: answer.body, - }); - if (answer.body.code == '301') answer.body.msg = '需要登录'; - res.append('Set-Cookie', answer.cookie); - res.status(answer.status).send(answer.body); - }); - }, - '/related/playlist': (req, res) => { - if (typeof req.query.cookie === 'string') { - req.query.cookie = cookieToJson(req.query.cookie); - } - let query = Object.assign( - {}, - { cookie: req.cookies }, - req.query, - req.body, - req.files, - ); - const related_playlist = (query, request) => { - return request( - 'GET', - `https://music.163.com/playlist?id=${query.id}`, - {}, - { - ua: 'pc', - cookie: query.cookie, - proxy: query.proxy, - realIP: query.realIP, - }, - ).then((response) => { - try { - const pattern = /
- * app.get('/api/cache/performance', (req, res) => {
- * res.json(apicache.getPerformance())
- * })
- *
- */
- this.getPerformance = function () {
- return performanceArray.map(function (p) {
- return p.report();
- });
- };
-
- this.getIndex = function (group) {
- if (group) {
- return index.groups[group];
- } else {
- return index;
- }
- };
-
- this.middleware = function cache(
- strDuration,
- middlewareToggle,
- localOptions,
- ) {
- var duration = instance.getDuration(strDuration);
- var opt = {};
-
- middlewareOptions.push({
- options: opt,
- });
-
- var options = function (localOptions) {
- if (localOptions) {
- middlewareOptions.find(function (middleware) {
- return middleware.options === opt;
- }).localOptions = localOptions;
- }
-
- syncOptions();
-
- return opt;
- };
-
- options(localOptions);
-
- /**
- * A Function for non tracking performance
- */
- function NOOPCachePerformance() {
- this.report = this.hit = this.miss = function () {}; // noop;
- }
-
- /**
- * A function for tracking and reporting hit rate. These statistics are returned by the getPerformance() call above.
- */
- function CachePerformance() {
- /**
- * Tracks the hit rate for the last 100 requests.
- * If there have been fewer than 100 requests, the hit rate just considers the requests that have happened.
- */
- this.hitsLast100 = new Uint8Array(100 / 4); // each hit is 2 bits
-
- /**
- * Tracks the hit rate for the last 1000 requests.
- * If there have been fewer than 1000 requests, the hit rate just considers the requests that have happened.
- */
- this.hitsLast1000 = new Uint8Array(1000 / 4); // each hit is 2 bits
-
- /**
- * Tracks the hit rate for the last 10000 requests.
- * If there have been fewer than 10000 requests, the hit rate just considers the requests that have happened.
- */
- this.hitsLast10000 = new Uint8Array(10000 / 4); // each hit is 2 bits
-
- /**
- * Tracks the hit rate for the last 100000 requests.
- * If there have been fewer than 100000 requests, the hit rate just considers the requests that have happened.
- */
- this.hitsLast100000 = new Uint8Array(100000 / 4); // each hit is 2 bits
-
- /**
- * The number of calls that have passed through the middleware since the server started.
- */
- this.callCount = 0;
-
- /**
- * The total number of hits since the server started
- */
- this.hitCount = 0;
-
- /**
- * The key from the last cache hit. This is useful in identifying which route these statistics apply to.
- */
- this.lastCacheHit = null;
-
- /**
- * The key from the last cache miss. This is useful in identifying which route these statistics apply to.
- */
- this.lastCacheMiss = null;
-
- /**
- * Return performance statistics
- */
- this.report = function () {
- return {
- lastCacheHit: this.lastCacheHit,
- lastCacheMiss: this.lastCacheMiss,
- callCount: this.callCount,
- hitCount: this.hitCount,
- missCount: this.callCount - this.hitCount,
- hitRate: this.callCount == 0 ? null : this.hitCount / this.callCount,
- hitRateLast100: this.hitRate(this.hitsLast100),
- hitRateLast1000: this.hitRate(this.hitsLast1000),
- hitRateLast10000: this.hitRate(this.hitsLast10000),
- hitRateLast100000: this.hitRate(this.hitsLast100000),
- };
- };
-
- /**
- * Computes a cache hit rate from an array of hits and misses.
- * @param {Uint8Array} array An array representing hits and misses.
- * @returns a number between 0 and 1, or null if the array has no hits or misses
- */
- this.hitRate = function (array) {
- var hits = 0;
- var misses = 0;
- for (var i = 0; i < array.length; i++) {
- var n8 = array[i];
- for (j = 0; j < 4; j++) {
- switch (n8 & 3) {
- case 1:
- hits++;
- break;
- case 2:
- misses++;
- break;
- }
- n8 >>= 2;
- }
- }
- var total = hits + misses;
- if (total == 0) return null;
- return hits / total;
- };
-
- /**
- * Record a hit or miss in the given array. It will be recorded at a position determined
- * by the current value of the callCount variable.
- * @param {Uint8Array} array An array representing hits and misses.
- * @param {boolean} hit true for a hit, false for a miss
- * Each element in the array is 8 bits, and encodes 4 hit/miss records.
- * Each hit or miss is encoded as to bits as follows:
- * 00 means no hit or miss has been recorded in these bits
- * 01 encodes a hit
- * 10 encodes a miss
- */
- this.recordHitInArray = function (array, hit) {
- var arrayIndex = ~~(this.callCount / 4) % array.length;
- var bitOffset = (this.callCount % 4) * 2; // 2 bits per record, 4 records per uint8 array element
- var clearMask = ~(3 << bitOffset);
- var record = (hit ? 1 : 2) << bitOffset;
- array[arrayIndex] = (array[arrayIndex] & clearMask) | record;
- };
-
- /**
- * Records the hit or miss in the tracking arrays and increments the call count.
- * @param {boolean} hit true records a hit, false records a miss
- */
- this.recordHit = function (hit) {
- this.recordHitInArray(this.hitsLast100, hit);
- this.recordHitInArray(this.hitsLast1000, hit);
- this.recordHitInArray(this.hitsLast10000, hit);
- this.recordHitInArray(this.hitsLast100000, hit);
- if (hit) this.hitCount++;
- this.callCount++;
- };
-
- /**
- * Records a hit event, setting lastCacheMiss to the given key
- * @param {string} key The key that had the cache hit
- */
- this.hit = function (key) {
- this.recordHit(true);
- this.lastCacheHit = key;
- };
-
- /**
- * Records a miss event, setting lastCacheMiss to the given key
- * @param {string} key The key that had the cache miss
- */
- this.miss = function (key) {
- this.recordHit(false);
- this.lastCacheMiss = key;
- };
- }
-
- var perf = globalOptions.trackPerformance
- ? new CachePerformance()
- : new NOOPCachePerformance();
-
- performanceArray.push(perf);
-
- var cache = function (req, res, next) {
- function bypass() {
- debug('bypass detected, skipping cache.');
- return next();
- }
-
- // initial bypass chances
- if (!opt.enabled) return bypass();
- if (
- req.headers['x-apicache-bypass'] ||
- req.headers['x-apicache-force-fetch']
- )
- return bypass();
-
- // REMOVED IN 0.11.1 TO CORRECT MIDDLEWARE TOGGLE EXECUTE ORDER
- // if (typeof middlewareToggle === 'function') {
- // if (!middlewareToggle(req, res)) return bypass()
- // } else if (middlewareToggle !== undefined && !middlewareToggle) {
- // return bypass()
- // }
-
- // embed timer
- req.apicacheTimer = new Date();
-
- // In Express 4.x the url is ambigious based on where a router is mounted. originalUrl will give the full Url
- var key = req.originalUrl || req.url;
-
- // Remove querystring from key if jsonp option is enabled
- if (opt.jsonp) {
- key = url.parse(key).pathname;
- }
-
- // add appendKey (either custom function or response path)
- if (typeof opt.appendKey === 'function') {
- key += '$$appendKey=' + opt.appendKey(req, res);
- } else if (opt.appendKey.length > 0) {
- var appendKey = req;
-
- for (var i = 0; i < opt.appendKey.length; i++) {
- appendKey = appendKey[opt.appendKey[i]];
- }
- key += '$$appendKey=' + appendKey;
- }
-
- // attempt cache hit
- var redis = opt.redisClient;
- var cached = !redis ? memCache.getValue(key) : null;
-
- // send if cache hit from memory-cache
- if (cached) {
- var elapsed = new Date() - req.apicacheTimer;
- debug(
- 'sending cached (memory-cache) version of',
- key,
- logDuration(elapsed),
- );
-
- perf.hit(key);
- return sendCachedResponse(
- req,
- res,
- cached,
- middlewareToggle,
- next,
- duration,
- );
- }
-
- // send if cache hit from redis
- if (redis && redis.connected) {
- try {
- redis.hgetall(key, function (err, obj) {
- if (!err && obj && obj.response) {
- var elapsed = new Date() - req.apicacheTimer;
- debug(
- 'sending cached (redis) version of',
- key,
- logDuration(elapsed),
- );
-
- perf.hit(key);
- return sendCachedResponse(
- req,
- res,
- JSON.parse(obj.response),
- middlewareToggle,
- next,
- duration,
- );
- } else {
- perf.miss(key);
- return makeResponseCacheable(
- req,
- res,
- next,
- key,
- duration,
- strDuration,
- middlewareToggle,
- );
- }
- });
- } catch (err) {
- // bypass redis on error
- perf.miss(key);
- return makeResponseCacheable(
- req,
- res,
- next,
- key,
- duration,
- strDuration,
- middlewareToggle,
- );
- }
- } else {
- perf.miss(key);
- return makeResponseCacheable(
- req,
- res,
- next,
- key,
- duration,
- strDuration,
- middlewareToggle,
- );
- }
- };
-
- cache.options = options;
-
- return cache;
- };
-
- this.options = function (options) {
- if (options) {
- Object.assign(globalOptions, options);
- syncOptions();
-
- if ('defaultDuration' in options) {
- // Convert the default duration to a number in milliseconds (if needed)
- globalOptions.defaultDuration = parseDuration(
- globalOptions.defaultDuration,
- 3600000,
- );
- }
-
- if (globalOptions.trackPerformance) {
- debug(
- 'WARNING: using trackPerformance flag can cause high memory usage!',
- );
- }
-
- return this;
- } else {
- return globalOptions;
- }
- };
-
- this.resetIndex = function () {
- index = {
- all: [],
- groups: {},
- };
- };
-
- this.newInstance = function (config) {
- var instance = new ApiCache();
-
- if (config) {
- instance.options(config);
- }
-
- return instance;
- };
-
- this.clone = function () {
- return this.newInstance(this.options());
- };
-
- // initialize index
- this.resetIndex();
-}
-
-module.exports = new ApiCache();
diff --git a/netease_api/util/crypto.js b/netease_api/util/crypto.js
deleted file mode 100644
index de80e15..0000000
--- a/netease_api/util/crypto.js
+++ /dev/null
@@ -1,67 +0,0 @@
-const crypto = require('crypto');
-const iv = Buffer.from('0102030405060708');
-const presetKey = Buffer.from('0CoJUm6Qyw8W8jud');
-const linuxapiKey = Buffer.from('rFgB&h#%2?^eDg:Q');
-const base62 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
-const publicKey =
- '-----BEGIN PUBLIC KEY-----\nMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgtQn2JZ34ZC28NWYpAUd98iZ37BUrX/aKzmFbt7clFSs6sXqHauqKWqdtLkF2KexO40H1YTX8z2lSgBBOAxLsvaklV8k4cBFK9snQXE9/DDaFt6Rr7iVZMldczhC0JNgTz+SHXT6CBHuX3e9SdB1Ua44oncaTWz7OBGLbCiK45wIDAQAB\n-----END PUBLIC KEY-----';
-const eapiKey = 'e82ckenh8dichen8';
-
-const aesEncrypt = (buffer, mode, key, iv) => {
- const cipher = crypto.createCipheriv('aes-128-' + mode, key, iv);
- return Buffer.concat([cipher.update(buffer), cipher.final()]);
-};
-
-const rsaEncrypt = (buffer, key) => {
- buffer = Buffer.concat([Buffer.alloc(128 - buffer.length), buffer]);
- return crypto.publicEncrypt(
- { key: key, padding: crypto.constants.RSA_NO_PADDING },
- buffer,
- );
-};
-
-const weapi = (object) => {
- const text = JSON.stringify(object);
- const secretKey = crypto
- .randomBytes(16)
- .map((n) => base62.charAt(n % 62).charCodeAt());
- return {
- params: aesEncrypt(
- Buffer.from(
- aesEncrypt(Buffer.from(text), 'cbc', presetKey, iv).toString('base64'),
- ),
- 'cbc',
- secretKey,
- iv,
- ).toString('base64'),
- encSecKey: rsaEncrypt(secretKey.reverse(), publicKey).toString('hex'),
- };
-};
-
-const linuxapi = (object) => {
- const text = JSON.stringify(object);
- return {
- eparams: aesEncrypt(Buffer.from(text), 'ecb', linuxapiKey, '')
- .toString('hex')
- .toUpperCase(),
- };
-};
-
-const eapi = (url, object) => {
- const text = typeof object === 'object' ? JSON.stringify(object) : object;
- const message = `nobody${url}use${text}md5forencrypt`;
- const digest = crypto.createHash('md5').update(message).digest('hex');
- const data = `${url}-36cd479b6b5-${text}-36cd479b6b5-${digest}`;
- return {
- params: aesEncrypt(Buffer.from(data), 'ecb', eapiKey, '')
- .toString('hex')
- .toUpperCase(),
- };
-};
-
-const decrypt = (cipherBuffer) => {
- const decipher = crypto.createDecipheriv('aes-128-ecb', eapiKey, '');
- return Buffer.concat([decipher.update(cipherBuffer), decipher.final()]);
-};
-
-module.exports = { weapi, linuxapi, eapi, decrypt };
diff --git a/netease_api/util/index.js b/netease_api/util/index.js
deleted file mode 100644
index 6241c2c..0000000
--- a/netease_api/util/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-module.exports = {
- toBoolean(val) {
- if (typeof val === 'boolean') return val;
- if (val === '') return val;
- return val === 'true' || val == '1';
- },
- cookieToJson(cookie) {
- if (!cookie) return {};
- let cookieArr = cookie.split(';');
- let obj = {};
- cookieArr.forEach((i) => {
- let arr = i.split('=');
- obj[arr[0]] = arr[1];
- });
- return obj;
- },
-};
diff --git a/netease_api/util/memory-cache.js b/netease_api/util/memory-cache.js
deleted file mode 100644
index 02e735a..0000000
--- a/netease_api/util/memory-cache.js
+++ /dev/null
@@ -1,63 +0,0 @@
-function MemoryCache() {
- this.cache = {};
- this.size = 0;
-}
-
-MemoryCache.prototype.add = function (key, value, time, timeoutCallback) {
- var old = this.cache[key];
- var instance = this;
-
- var entry = {
- value: value,
- expire: time + Date.now(),
- timeout: setTimeout(function () {
- instance.delete(key);
- return (
- timeoutCallback &&
- typeof timeoutCallback === 'function' &&
- timeoutCallback(value, key)
- );
- }, time),
- };
-
- this.cache[key] = entry;
- this.size = Object.keys(this.cache).length;
-
- return entry;
-};
-
-MemoryCache.prototype.delete = function (key) {
- var entry = this.cache[key];
-
- if (entry) {
- clearTimeout(entry.timeout);
- }
-
- delete this.cache[key];
-
- this.size = Object.keys(this.cache).length;
-
- return null;
-};
-
-MemoryCache.prototype.get = function (key) {
- var entry = this.cache[key];
-
- return entry;
-};
-
-MemoryCache.prototype.getValue = function (key) {
- var entry = this.get(key);
-
- return entry && entry.value;
-};
-
-MemoryCache.prototype.clear = function () {
- Object.keys(this.cache).forEach(function (key) {
- this.delete(key);
- }, this);
-
- return true;
-};
-
-module.exports = MemoryCache;
diff --git a/netease_api/util/request.js b/netease_api/util/request.js
deleted file mode 100644
index 84d448d..0000000
--- a/netease_api/util/request.js
+++ /dev/null
@@ -1,177 +0,0 @@
-const encrypt = require('./crypto');
-const axios = require('axios');
-const queryString = require('querystring');
-const PacProxyAgent = require('pac-proxy-agent');
-const http = require('http');
-const https = require('https');
-const tunnel = require('tunnel');
-const qs = require('url');
-// request.debug = true // 开启可看到更详细信息
-
-const chooseUserAgent = (ua = false) => {
- const userAgentList = {
- mobile: [
- // iOS 13.5.1 14.0 beta with safari
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1',
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.',
- // iOS with qq micromsg
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML like Gecko) Mobile/14A456 QQ/6.5.7.408 V1_IPH_SQ_6.5.7_1_APP_A Pixel/750 Core/UIWebView NetType/4G Mem/103',
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/7.0.15(0x17000f27) NetType/WIFI Language/zh',
- // Android -> Huawei Xiaomi
- 'Mozilla/5.0 (Linux; Android 9; PCT-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.64 HuaweiBrowser/10.0.3.311 Mobile Safari/537.36',
- 'Mozilla/5.0 (Linux; U; Android 9; zh-cn; Redmi Note 8 Build/PKQ1.190616.001) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 XiaoMi/MiuiBrowser/12.5.22',
- // Android + qq micromsg
- 'Mozilla/5.0 (Linux; Android 10; YAL-AL00 Build/HUAWEIYAL-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/78.0.3904.62 XWEB/2581 MMWEBSDK/200801 Mobile Safari/537.36 MMWEBID/3027 MicroMessenger/7.0.18.1740(0x27001235) Process/toolsmp WeChat/arm64 NetType/WIFI Language/zh_CN ABI/arm64',
- 'Mozilla/5.0 (Linux; U; Android 8.1.0; zh-cn; BKK-AL10 Build/HONORBKK-AL10) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/66.0.3359.126 MQQBrowser/10.6 Mobile Safari/537.36',
- ],
- pc: [
- // macOS 10.15.6 Firefox / Chrome / Safari
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:80.0) Gecko/20100101 Firefox/80.0',
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 Safari/537.36',
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.2 Safari/605.1.15',
- // Windows 10 Firefox / Chrome / Edge
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0',
- 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.30 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',
- // Linux 就算了
- ],
- };
- let realUserAgentList =
- userAgentList[ua] || userAgentList.mobile.concat(userAgentList.pc);
- return ['mobile', 'pc', false].indexOf(ua) > -1
- ? realUserAgentList[Math.floor(Math.random() * realUserAgentList.length)]
- : ua;
-};
-const 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.includes('music.163.com'))
- headers['Referer'] = 'https://music.163.com';
- if (options.realIP) headers['X-Real-IP'] = options.realIP;
- // 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 (!headers['Cookie']) {
- headers['Cookie'] = options.token || '';
- }
- if (options.crypto === 'weapi') {
- let csrfToken = (headers['Cookie'] || '').match(/_csrf=([^(;|$)]+)/);
- data.csrf_token = csrfToken ? csrfToken[1] : '';
- data = encrypt.weapi(data);
- url = url.replace(/\w*api/, 'weapi');
- } else if (options.crypto === 'linuxapi') {
- data = encrypt.linuxapi({
- method: method,
- url: url.replace(/\w*api/, 'api'),
- params: data,
- });
- headers['User-Agent'] =
- 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36';
- url = 'https://music.163.com/api/linux/forward';
- } else if (options.crypto === 'eapi') {
- const cookie = options.cookie || {};
- const csrfToken = cookie['__csrf'] || '';
- const header = {
- osver: cookie.osver, //系统版本
- deviceId: cookie.deviceId, //encrypt.base64.encode(imei + '\t02:00:00:00:00:00\t5106025eb79a5247\t70ffbaac7')
- appver: cookie.appver || '6.1.1', // app版本
- versioncode: cookie.versioncode || '140', //版本号
- mobilename: cookie.mobilename, //设备model
- buildver: cookie.buildver || Date.now().toString().substr(0, 10),
- resolution: cookie.resolution || '1920x1080', //设备分辨率
- __csrf: csrfToken,
- os: cookie.os || 'android',
- channel: cookie.channel,
- requestId: `${Date.now()}_${Math.floor(Math.random() * 1000)
- .toString()
- .padStart(4, '0')}`,
- };
- if (cookie.MUSIC_U) header['MUSIC_U'] = cookie.MUSIC_U;
- if (cookie.MUSIC_A) header['MUSIC_A'] = cookie.MUSIC_A;
- headers['Cookie'] = Object.keys(header)
- .map(
- (key) =>
- encodeURIComponent(key) + '=' + encodeURIComponent(header[key]),
- )
- .join('; ');
- data.header = header;
- data = encrypt.eapi(options.url, data);
- url = url.replace(/\w*api/, 'eapi');
- }
-
- const answer = { status: 500, body: {}, cookie: [] };
- const settings = {
- method: method,
- url: url,
- headers: headers,
- data: queryString.stringify(data),
- httpAgent: new http.Agent({ keepAlive: true }),
- httpsAgent: new https.Agent({ keepAlive: true }),
- };
-
- if (options.crypto === 'eapi') settings.encoding = null;
-
- if (options.proxy) {
- if (options.proxy.indexOf('pac') > -1) {
- settings.httpAgent = new PacProxyAgent(options.proxy);
- settings.httpsAgent = new PacProxyAgent(options.proxy);
- } else {
- var purl = qs.parse(options.proxy);
- if (purl.hostname) {
- const agent = tunnel.httpsOverHttp({
- proxy: {
- host: purl.hostname,
- port: purl.port || 80,
- },
- });
- settings.httpsAgent = agent;
- settings.httpAgent = agent;
- settings.proxy = false;
- } else {
- console.error('代理配置无效,不使用代理');
- }
- }
- }
-
- axios(settings)
- .then((res) => {
- const body = res.data;
- answer.cookie = (res.headers['set-cookie'] || []).map((x) =>
- x.replace(/\s*Domain=[^(;|$)]+;*/, ''),
- );
- try {
- answer.body = body;
- answer.status = answer.body.code || res.status;
- if (answer.body.code === 502) {
- answer.status = 200;
- }
- } catch (e) {
- answer.body = body;
- answer.status = res.status;
- }
-
- answer.status =
- 100 < answer.status && answer.status < 600 ? answer.status : 400;
- if (answer.status == 200) resolve(answer);
- else reject(answer);
- })
- .catch((err) => {
- answer.status = 502;
- answer.body = { code: 502, msg: err };
- reject(answer);
- });
- });
-};
-
-module.exports = createRequest;