mirror of
https://gitlab.com/Binaryify/neteasecloudmusicapi.git
synced 2025-05-23 22:37:41 +08:00
v3.0.0
This commit is contained in:
parent
7aca52e1b8
commit
986a4b0dd5
15
app.js
15
app.js
@ -77,19 +77,6 @@ const UnusualRouteFileMap = {
|
|||||||
'personal_fm.js': '/personal_fm'
|
'personal_fm.js': '/personal_fm'
|
||||||
}
|
}
|
||||||
|
|
||||||
// 简化 路由 导出方式, 由这里统一对 router 目录中导出的路由做包装, 路由实际对应的文件只专注做它该做的事情, 不用重复写样板代码
|
|
||||||
const { createWebAPIRequest, request } = require('./util/util')
|
|
||||||
const Wrap = fn => (req, res) => fn(req, res, createWebAPIRequest, request)
|
|
||||||
|
|
||||||
// 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由
|
|
||||||
fs.readdirSync(path.join(__dirname, 'router'))
|
|
||||||
.reverse()
|
|
||||||
.forEach(file => {
|
|
||||||
if (!/\.js$/i.test(file)) return
|
|
||||||
let route = (file in UnusualRouteFileMap) ? UnusualRouteFileMap[file] : '/' + file.replace(/\.js$/i, '').replace(/_/g, '/')
|
|
||||||
app.use(route, Wrap(require(path.join(__dirname, 'router', file))))
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
// 改写router为module
|
// 改写router为module
|
||||||
const requestMod = require('./util/request')
|
const requestMod = require('./util/request')
|
||||||
@ -116,7 +103,7 @@ fs.readdirSync(path.join(__dirname, 'module'))
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
app.use('/dev', dev)
|
app.use('/', dev)
|
||||||
|
|
||||||
const port = process.env.PORT || 3000
|
const port = process.env.PORT || 3000
|
||||||
|
|
||||||
|
196
docs/README.md
196
docs/README.md
@ -95,7 +95,12 @@
|
|||||||
77. 热门评论
|
77. 热门评论
|
||||||
78. 视频评论
|
78. 视频评论
|
||||||
79. 退出登录
|
79. 退出登录
|
||||||
|
80. 所有榜单内容摘要
|
||||||
|
81. 收藏视频
|
||||||
|
82. 收藏 MV
|
||||||
|
83. 视频详情
|
||||||
|
84. 相关视频
|
||||||
|
85. 关注用户
|
||||||
## 安装
|
## 安装
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
@ -127,7 +132,7 @@ $ set PORT=4000 && node app.js
|
|||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
// 例子
|
// 例子
|
||||||
const url = `http://localhost:3000/music/url?id=33894312&proxy=http://121.196.226.246:84`
|
const url = `http://localhost:3000/song/url?id=33894312&proxy=http://121.196.226.246:84`
|
||||||
fetch(url).then(function() {
|
fetch(url).then(function() {
|
||||||
// do what you want
|
// do what you want
|
||||||
})
|
})
|
||||||
@ -138,12 +143,7 @@ fetch(url).then(function() {
|
|||||||
|
|
||||||
## Docker 容器运行
|
## Docker 容器运行
|
||||||
|
|
||||||
> 注意: 在 docker 中运行的时候, 由于使用了 request 来发请求, 所以会检查几个
|
> 注意: 在 docker 中运行的时候, 由于使用了 request 来发请求, 所以会检查几个proxy 相关的环境变量(如下所列), 这些环境变量 会影响到 request 的代理, 详情请参考[request 的文档](https://github.com/request/request#proxies), 如果这些环境变量 指向的代理不可用, 那么就会造成错误, 所以在使用 docker 的时候一定要注意这些环境变量. 不过, 要是你在 query 中加上了 proxy 参数, 那么环境变量会被覆盖, 就会用你通过 proxy 参数提供的代理了.
|
||||||
> proxy 相关的环境变量(如下所列), 这些环境变量 会影响到 request 的代理, 详情请参
|
|
||||||
> 考[request 的文档](https://github.com/request/request#proxies), 如果这些环境变
|
|
||||||
> 量 指向的代理不可用, 那么就会造成错误, 所以在使用 docker 的时候一定要注意这些
|
|
||||||
> 环境变量. 不过, 要是你在 query 中加上了 proxy 参数, 那么环境变量会被覆盖, 就会
|
|
||||||
> 用你通过 proxy 参数提供的代理了.
|
|
||||||
|
|
||||||
request 相关的环境变量
|
request 相关的环境变量
|
||||||
|
|
||||||
@ -173,6 +173,9 @@ $ sudo docker run -d -p 3000:3000 netease-music-api
|
|||||||
## 接口文档
|
## 接口文档
|
||||||
|
|
||||||
### 调用前须知
|
### 调用前须知
|
||||||
|
!> 2018.10.14 更新到3.0.0,使用了模块化机制,因为部分接口参数和url做了调整,如还不想升级到3.0.0,请查看 [v2的文档](http://binaryify.github.io/NeteaseCloudMusicApi/#/v2), [更新日志](/CHANGELOG.MD), [2.0+下载地址](https://github.com/Binaryify/NeteaseCloudMusicApi/releases/tag/v2.20.5), 同时 2.0+ 将不再维护
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
!> 为使用方便,降低门槛,登录接口直接使用了 get 明文请求,请按实际需求对源码修改
|
!> 为使用方便,降低门槛,登录接口直接使用了 get 明文请求,请按实际需求对源码修改
|
||||||
|
|
||||||
@ -395,6 +398,20 @@ tags:歌单tag
|
|||||||
|
|
||||||
**调用例子 :** `/user/event?uid=32953014`
|
**调用例子 :** `/user/event?uid=32953014`
|
||||||
|
|
||||||
|
### 关注/取消关注用户
|
||||||
|
|
||||||
|
说明 : 登陆后调用此接口 , 传入用户 id, 和操作 t,可关注/取消关注用户
|
||||||
|
|
||||||
|
**必选参数 :**
|
||||||
|
|
||||||
|
`id` : 用户 id
|
||||||
|
|
||||||
|
`t` : `1`为关注,其他为取消关注
|
||||||
|
|
||||||
|
**接口地址 :** `/follow`
|
||||||
|
|
||||||
|
**调用例子 :** `/follow?id=32953014&t=1`
|
||||||
|
|
||||||
### 获取用户播放记录
|
### 获取用户播放记录
|
||||||
|
|
||||||
说明 : 登陆后调用此接口 , 传入用户 id, 可获取用户播放记录
|
说明 : 登陆后调用此接口 , 传入用户 id, 可获取用户播放记录
|
||||||
@ -457,23 +474,21 @@ category Code 取值:
|
|||||||
返回数据如下图:
|
返回数据如下图:
|
||||||

|

|
||||||
|
|
||||||
### 收藏歌手
|
### 收藏/取消收藏歌手
|
||||||
|
|
||||||
|
说明 : 调用此接口,可收藏歌手
|
||||||
|
|
||||||
|
**必选参数 :**
|
||||||
|
|
||||||
|
`artistId` : 歌手 id
|
||||||
|
|
||||||
|
`t`:操作,1为收藏,其他为取消收藏
|
||||||
|
|
||||||
说明 : 调用此接口,可收藏歌手
|
|
||||||
**必选参数 :** `artistId` : 歌手 id
|
|
||||||
|
|
||||||
**接口地址 :** `/artist/sub`
|
**接口地址 :** `/artist/sub`
|
||||||
|
|
||||||
**调用例子 :** `/artist/sub?id=6452`
|
**调用例子 :** `/artist/sub?id=6452&t=1`
|
||||||
|
|
||||||
### 取消收藏歌手
|
|
||||||
|
|
||||||
说明 : 调用此接口,可取消收藏歌手
|
|
||||||
**必选参数 :** `artistId` : 歌手 id
|
|
||||||
|
|
||||||
**接口地址 :** `/artist/unsub`
|
|
||||||
|
|
||||||
**调用例子 :** `/artist/unsub?id=6452`
|
|
||||||
|
|
||||||
### 收藏的歌手列表
|
### 收藏的歌手列表
|
||||||
|
|
||||||
@ -483,6 +498,35 @@ category Code 取值:
|
|||||||
|
|
||||||
**调用例子 :** `/artist/sublist`
|
**调用例子 :** `/artist/sublist`
|
||||||
|
|
||||||
|
### 收藏视频
|
||||||
|
|
||||||
|
说明 : 调用此接口,可收藏视频
|
||||||
|
|
||||||
|
**必选参数 :**
|
||||||
|
|
||||||
|
`id` : 视频 id
|
||||||
|
|
||||||
|
`t` : 1 为收藏,其他为取消收藏
|
||||||
|
|
||||||
|
**接口地址 :** `/video/sub`
|
||||||
|
|
||||||
|
|
||||||
|
**调用例子 :** `/video/sub`
|
||||||
|
|
||||||
|
### 收藏 MV
|
||||||
|
|
||||||
|
说明 : 调用此接口,可收藏 MV
|
||||||
|
|
||||||
|
**必选参数 :**
|
||||||
|
|
||||||
|
`id` : MV id
|
||||||
|
|
||||||
|
`t` : 1 为收藏,其他为取消收藏
|
||||||
|
|
||||||
|
**接口地址 :** `/mv/sub`
|
||||||
|
|
||||||
|
**调用例子 :** `/mv/sub`
|
||||||
|
|
||||||
### 歌单分类
|
### 歌单分类
|
||||||
|
|
||||||
说明 : 调用此接口,可获取歌单分类,包含 category 信息
|
说明 : 调用此接口,可获取歌单分类,包含 category 信息
|
||||||
@ -528,9 +572,11 @@ category Code 取值:
|
|||||||
|
|
||||||
`limit`: 取出歌单数量 , 默认为 20
|
`limit`: 取出歌单数量 , 默认为 20
|
||||||
|
|
||||||
|
`before`: 分页参数,取上一页最后一个歌单的 `updateTime` 获取下一页数据
|
||||||
|
|
||||||
**接口地址 :** `/top/playlist/highquality`
|
**接口地址 :** `/top/playlist/highquality`
|
||||||
|
|
||||||
**调用例子 :** `/top/playlist/highquality?limit=30`
|
**调用例子 :** `http://localhost:3000/top/playlist/highquality?before=1503639064232&limit=3`
|
||||||
|
|
||||||
### 相关歌单推荐
|
### 相关歌单推荐
|
||||||
|
|
||||||
@ -571,9 +617,9 @@ category Code 取值:
|
|||||||
|
|
||||||
**可选参数 :** `br`: 码率,默认设置了 999000 即最大码率,如果要 320k 则可设置为 320000,其他类推
|
**可选参数 :** `br`: 码率,默认设置了 999000 即最大码率,如果要 320k 则可设置为 320000,其他类推
|
||||||
|
|
||||||
**接口地址 :** `/music/url`
|
**接口地址 :** `/song/url`
|
||||||
|
|
||||||
**调用例子 :** `/music/url?id=33894312` `/music/url?id=405998841,33894312`
|
**调用例子 :** `/song/url?id=33894312` `/song/url?id=405998841,33894312`
|
||||||
|
|
||||||
返回数据如下图 :
|
返回数据如下图 :
|
||||||

|

|
||||||
@ -594,7 +640,7 @@ category Code 取值:
|
|||||||
|
|
||||||
说明 : 调用此接口 , 传入搜索关键词可以搜索该音乐 / 专辑 / 歌手 / 歌单 / 用户 ,
|
说明 : 调用此接口 , 传入搜索关键词可以搜索该音乐 / 专辑 / 歌手 / 歌单 / 用户 ,
|
||||||
关键词可以多个 , 以空格隔开 , 如 " 周杰伦 搁浅 "( 不需要登录 ), 搜索获取的
|
关键词可以多个 , 以空格隔开 , 如 " 周杰伦 搁浅 "( 不需要登录 ), 搜索获取的
|
||||||
mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具体的播放链接
|
mp3url 不能直接用 , 可通过 `/song/url` 接口传入歌曲 id 获取具体的播放链接
|
||||||
|
|
||||||
**必选参数 :** `keywords` : 关键词
|
**必选参数 :** `keywords` : 关键词
|
||||||
|
|
||||||
@ -855,7 +901,7 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
|
|||||||
1. 发送评论
|
1. 发送评论
|
||||||
|
|
||||||
**必选参数**
|
**必选参数**
|
||||||
`action`:1 发送
|
`t`:1 发送
|
||||||
|
|
||||||
`tpye`: 数字,资源类型,对应歌曲,mv,专辑,歌单,电台,视频对应以下类型
|
`tpye`: 数字,资源类型,对应歌曲,mv,专辑,歌单,电台,视频对应以下类型
|
||||||
|
|
||||||
@ -872,12 +918,12 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
|
|||||||
|
|
||||||
`content` :要发送的内容
|
`content` :要发送的内容
|
||||||
|
|
||||||
**调用例子** : `/comment?action=1&type=1&id=5436712&content=test` (往广岛之恋 mv 发送评论: test)
|
**调用例子** : `/comment?t=1&type=1&id=5436712&content=test` (往广岛之恋 mv 发送评论: test)
|
||||||
|
|
||||||
2. 删除评论
|
2. 删除评论
|
||||||
|
|
||||||
**必选参数**
|
**必选参数**
|
||||||
`action`:0 删除
|
`t`:0 删除
|
||||||
|
|
||||||
`tpye`: 数字,资源类型,对应歌曲,mv,专辑,歌单,电台,视频对应以下类型
|
`tpye`: 数字,资源类型,对应歌曲,mv,专辑,歌单,电台,视频对应以下类型
|
||||||
|
|
||||||
@ -893,7 +939,7 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
|
|||||||
`id`:对应资源 id
|
`id`:对应资源 id
|
||||||
`content` :内容 id,可通过 `/comment/mv` 等接口获取
|
`content` :内容 id,可通过 `/comment/mv` 等接口获取
|
||||||
|
|
||||||
**调用例子** : `/comment?action=0&type=1&id=5436712&commentId=1535550516319` (在广岛之恋 mv 删除评论)
|
**调用例子** : `/comment?t=0&type=1&id=5436712&commentId=1535550516319` (在广岛之恋 mv 删除评论)
|
||||||
|
|
||||||
### banner
|
### banner
|
||||||
|
|
||||||
@ -904,15 +950,36 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
|
|||||||
|
|
||||||
**调用例子 :** `/banner`
|
**调用例子 :** `/banner`
|
||||||
|
|
||||||
|
### 资源点赞( MV,电台,视频)
|
||||||
|
|
||||||
|
说明 : 调用此接口 , 可对 MV,电台,视频点赞
|
||||||
|
|
||||||
|
**必选参数 :**
|
||||||
|
|
||||||
|
`type`:资源类型,对应以下类型
|
||||||
|
```
|
||||||
|
1: mv
|
||||||
|
4: 电台
|
||||||
|
5: 视频
|
||||||
|
```
|
||||||
|
|
||||||
|
`t`: 操作,1为点赞,其他未取消点赞
|
||||||
|
|
||||||
|
`id`: 资源id
|
||||||
|
|
||||||
|
**接口地址 :** `/resource/like`
|
||||||
|
|
||||||
|
**调用例子 :** `/resource/like?t=1&type=1&id=5436712`
|
||||||
|
|
||||||
### 获取歌曲详情
|
### 获取歌曲详情
|
||||||
|
|
||||||
说明 : 调用此接口 , 传入音乐 id, 可获得歌曲详情(注意:歌曲封面现在需要通过专辑内容接口获取)
|
说明 : 调用此接口 , 传入音乐 id(支持多个 id, 用 `,` 隔开), 可获得歌曲详情(注意:歌曲封面现在需要通过专辑内容接口获取)
|
||||||
|
|
||||||
**必选参数 :** `ids`: 音乐 id, 如 `ids=347230`
|
**必选参数 :** `ids`: 音乐 id, 如 `ids=347230`
|
||||||
|
|
||||||
**接口地址 :** `/song/detail`
|
**接口地址 :** `/song/detail`
|
||||||
|
|
||||||
**调用例子 :** `/song/detail?ids=347230`
|
**调用例子 :** `/song/detail?ids=347230`,`/song/detail?ids=347230,347231`
|
||||||
|
|
||||||
返回数据如下图 :
|
返回数据如下图 :
|
||||||

|

|
||||||
@ -1228,18 +1295,47 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
|
|||||||
|
|
||||||
说明 : 调用此接口 , 传入 mvid ( 在搜索音乐的时候传 type=1004 获得 ) , 可获取对应
|
说明 : 调用此接口 , 传入 mvid ( 在搜索音乐的时候传 type=1004 获得 ) , 可获取对应
|
||||||
MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等数据 , 其中 mv 视频
|
MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等数据 , 其中 mv 视频
|
||||||
网易做了防盗链处理 , 可能不能直接播放 , 需要播放的话需要调用 ' 播放 mv/视频' 接口
|
网易做了防盗链处理 , 可能不能直接播放 , 需要播放的话需要调用 ' mv 地址' 接口
|
||||||
|
|
||||||
**必选参数 :** `mvid`: mv 的 id
|
**必选参数 :** `mvid`: mv 的 id
|
||||||
|
|
||||||
**接口地址 :** `/mv`
|
**接口地址 :** `/mv/detail`
|
||||||
|
|
||||||
**调用例子 :** `/mv?mvid=5436712`
|
**调用例子 :** `/mv/detail?mvid=5436712`
|
||||||
|
|
||||||
返回数据如下图 :
|
返回数据如下图 :
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
### mv 地址
|
||||||
|
|
||||||
|
说明 : 调用此接口 , 传入 mv id,可获取 mv 播放地址
|
||||||
|
|
||||||
|
**可选参数 :** `url`: mv id
|
||||||
|
|
||||||
|
**接口地址 :** `/mv/url`
|
||||||
|
|
||||||
|
**调用例子 :**
|
||||||
|
`/mv/url?id=5436712`
|
||||||
|
|
||||||
|
### 相关视频
|
||||||
|
说明 : 调用此接口 , 可获取相关视频
|
||||||
|
|
||||||
|
**必选参数 :** `id`: 视频 的 id
|
||||||
|
|
||||||
|
**接口地址 :** `/related/allvideo`
|
||||||
|
|
||||||
|
**调用例子 :** `/related/allvideo?id=89ADDE33C0AAE8EC14B99F6750DB954D`
|
||||||
|
|
||||||
|
### 视频详情
|
||||||
|
说明 : 调用此接口 , 可获取相关视频
|
||||||
|
|
||||||
|
**必选参数 :** `id`: 视频 的 id
|
||||||
|
|
||||||
|
**接口地址 :** `/video/detail`
|
||||||
|
|
||||||
|
**调用例子 :** `/video/detail?id=89ADDE33C0AAE8EC14B99F6750DB954D`
|
||||||
|
|
||||||
### 获取视频数据
|
### 获取视频数据
|
||||||
|
|
||||||
说明 : 调用此接口 , 传入视频的 id ( 在搜索音乐的时候传 type=1014 获得 ) , 可获取对应
|
说明 : 调用此接口 , 传入视频的 id ( 在搜索音乐的时候传 type=1014 获得 ) , 可获取对应
|
||||||
@ -1247,30 +1343,14 @@ MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等
|
|||||||
|
|
||||||
**必选参数 :** `id`: 视频 的 id
|
**必选参数 :** `id`: 视频 的 id
|
||||||
|
|
||||||
**接口地址 :** `/video`
|
**接口地址 :** `/video/url`
|
||||||
|
|
||||||
**调用例子 :** `/video?id=89ADDE33C0AAE8EC14B99F6750DB954D`
|
**调用例子 :** `/video/url?id=89ADDE33C0AAE8EC14B99F6750DB954D`
|
||||||
|
|
||||||
返回数据如下图 :
|
返回数据如下图 :
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### 播放 mv/视频
|
|
||||||
|
|
||||||
说明 : 调用此接口 , 传入 mv/视频 地址 , 可播放 mv/视频, 也可将接口嵌入 video 标签使用 , 由
|
|
||||||
于使用了 'pipe', 进度条无法通过拖动进度条控制进度 , 如有解决方案可提出 PR 或者自
|
|
||||||
行改造
|
|
||||||
|
|
||||||
**可选参数 :** `url`: mv/视频 的 地址
|
|
||||||
|
|
||||||
**接口地址 :** `/mv/url`
|
|
||||||
|
|
||||||
**调用例子 :**
|
|
||||||
`/mv/url?url=http://v4.music.126.net/20170422034915/c98eab2f5e2c85fc8de2ab3f0f8ed1c6/web/cloudmusic/MjQ3NDQ3MjUw/89a6a279dc2acfcd068b45ce72b1f560/533e4183a709699d566180ed0cd9abe9.mp4`
|
|
||||||
|
|
||||||
如下图 :
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### 排行榜
|
### 排行榜
|
||||||
|
|
||||||
@ -1313,9 +1393,15 @@ MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
### 所有榜单内容摘要
|
||||||
|
说明 : 调用此接口,可获取所有榜单内容摘要
|
||||||
|
**接口地址 :** `/toplist/detail`
|
||||||
|
|
||||||
|
**调用例子 :** `/toplist/detail`
|
||||||
|
|
||||||
### 歌手榜
|
### 歌手榜
|
||||||
|
|
||||||
说明 : 调用此接口 , 可获取 PC 版排行榜中的歌手榜
|
说明 : 调用此接口 , 可获取排行榜中的歌手榜
|
||||||
|
|
||||||
**接口地址 :** `/toplist/artist`
|
**接口地址 :** `/toplist/artist`
|
||||||
|
|
||||||
@ -1324,7 +1410,7 @@ MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等
|
|||||||
### 云盘
|
### 云盘
|
||||||
|
|
||||||
说明 : 登陆后调用此接口 , 可获取云盘数据 , 获取的数据没有对应 url, 需要再调用一
|
说明 : 登陆后调用此接口 , 可获取云盘数据 , 获取的数据没有对应 url, 需要再调用一
|
||||||
次 `/music/url` 获取 url
|
次 `/song/url` 获取 url
|
||||||
|
|
||||||
**接口地址 :** `/user/cloud`
|
**接口地址 :** `/user/cloud`
|
||||||
|
|
||||||
@ -1398,8 +1484,8 @@ type='1009' 获取其 id, 如`/search?keywords= 代码时间 &type=1009`
|
|||||||
### 电台 - 节目
|
### 电台 - 节目
|
||||||
|
|
||||||
说明 : 登陆后调用此接口 , 传入`rid`, 可查看对应电台的电台节目以及对应的 id, 需要
|
说明 : 登陆后调用此接口 , 传入`rid`, 可查看对应电台的电台节目以及对应的 id, 需要
|
||||||
注意的是这个接口返回的 mp3Url 已经无效 , 都为 null, 但是通过调用 `/music/url` 这
|
注意的是这个接口返回的 mp3Url 已经无效 , 都为 null, 但是通过调用 `/song/url` 这
|
||||||
个接口 , 传入节目 id 仍然能获取到节目音频 , 如 `/music/url?id=478446370` 获取代
|
个接口 , 传入节目 id 仍然能获取到节目音频 , 如 `/song/url?id=478446370` 获取代
|
||||||
码时间的一个节目的音频
|
码时间的一个节目的音频
|
||||||
|
|
||||||
**必选参数 :** `rid`: 电台 的 id
|
**必选参数 :** `rid`: 电台 的 id
|
||||||
|
1429
docs/v2.md
Normal file
1429
docs/v2.md
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,3 @@
|
|||||||
// MV链接
|
|
||||||
|
|
||||||
module.exports = (query, request) => {
|
module.exports = (query, request) => {
|
||||||
const data = {
|
const data = {
|
||||||
id: query.id,
|
id: query.id,
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
// 获取专辑内容
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const id = req.query.id;
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/album/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
// 获取歌手专辑列表
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.id;
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: true,
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/artist/albums/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,17 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.id;
|
|
||||||
const data = {
|
|
||||||
id,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/artist/introduction`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,45 +0,0 @@
|
|||||||
//分类歌单
|
|
||||||
// 歌手分类
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
|
|
||||||
// categoryCode 取值
|
|
||||||
|
|
||||||
// 入驻歌手 5001
|
|
||||||
// 华语男歌手 1001
|
|
||||||
// 华语女歌手 1002
|
|
||||||
// 华语组合/乐队 1003
|
|
||||||
// 欧美男歌手 2001
|
|
||||||
// 欧美女歌手 2002
|
|
||||||
// 欧美组合/乐队 2003
|
|
||||||
// 日本男歌手 6001
|
|
||||||
// 日本女歌手 6002
|
|
||||||
// 日本组合/乐队 6003
|
|
||||||
// 韩国男歌手 7001
|
|
||||||
// 韩国女歌手 7002
|
|
||||||
// 韩国组合/乐队 7003
|
|
||||||
// 其他男歌手 4001
|
|
||||||
// 其他女歌手 4002
|
|
||||||
// 其他组合/乐队 4003
|
|
||||||
|
|
||||||
// initial 取值a-z/A-Z
|
|
||||||
|
|
||||||
const data = {
|
|
||||||
categoryCode: req.query.cat || "1001",
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: req.query.total ? "true" : "false",
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
initial: (req.query.initial || "").toUpperCase().charCodeAt() || ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/artist/list",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.id;
|
|
||||||
const data = {
|
|
||||||
artistId: id,
|
|
||||||
total: true,
|
|
||||||
offset: req.query.offset,
|
|
||||||
limit: req.query.limit,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/artist/mvs`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
// 收藏歌手
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
artistId: `${req.query.id}`
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/artist/sub",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
// 已关注歌手
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: req.query.total ? "true" : "false",
|
|
||||||
limit: req.query.limit || 25
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/artist/sublist",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
// 取消收藏歌手
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
artistId: `${req.query.id}`,
|
|
||||||
artistIds: `[${req.query.id}]`
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/artist/unsub",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
// 获取歌手单曲
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.id;
|
|
||||||
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/artist/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,22 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const options = {
|
|
||||||
url: "http://music.163.com/discover",
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
"Referer": "http://music.163.com",
|
|
||||||
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3380.0 Safari/537.36"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
request(options, (error, response, body) => {
|
|
||||||
if (error) {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
const banners = /Gbanners\s*=\s*([^;]+);/.exec(body)[1];
|
|
||||||
res.send(JSON.stringify(eval(`({code:200,banners:${banners}})`)));
|
|
||||||
} catch (error) {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
@ -1,30 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const id = parseInt(req.query.id)
|
|
||||||
const br = parseInt(req.query.br || 999000)
|
|
||||||
const data = {
|
|
||||||
ids: [id],
|
|
||||||
br: br,
|
|
||||||
csrf_token: ''
|
|
||||||
}
|
|
||||||
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
'/weapi/song/enhance/player/url',
|
|
||||||
'POST',
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
music_req = JSON.parse(music_req)
|
|
||||||
if (music_req.code == 200) {
|
|
||||||
if (music_req.data[0].code == 200){
|
|
||||||
return res.send({ success: true, message: 'ok' })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return res.send({ success: false, message: '亲爱的,暂无版权' })
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
res.status(502).send('fetch error')
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
const id = req.query.id
|
|
||||||
const action = req.query.action == 1 ? 'add' : 'delete'
|
|
||||||
const typeMap = {
|
|
||||||
0: 'R_SO_4_', //歌曲
|
|
||||||
1: 'R_MV_5_', //mv
|
|
||||||
2: 'A_PL_0_', //歌单
|
|
||||||
3: 'R_AL_3_', //专辑
|
|
||||||
4: 'A_DJ_1_', //电台
|
|
||||||
5: 'R_VI_62_' // 视频
|
|
||||||
}
|
|
||||||
const type = typeMap[req.query.type]
|
|
||||||
|
|
||||||
let data = {
|
|
||||||
threadId: `${type}${id}`,
|
|
||||||
csrf_token: ''
|
|
||||||
}
|
|
||||||
|
|
||||||
if (action == 'add') {
|
|
||||||
data = {
|
|
||||||
...data,
|
|
||||||
content: req.query.content
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (action == 'delete') {
|
|
||||||
data = {
|
|
||||||
...data,
|
|
||||||
commentId: req.query.commentId
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const url = `/weapi/resource/comments/${action}`
|
|
||||||
|
|
||||||
// console.log({ url, data })
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
url,
|
|
||||||
'POST',
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send('fetch error')
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.id;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
rid: rid,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/resource/comments/R_AL_3_${rid}/?csrf_token=`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.id;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
rid: rid,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/resource/comments/A_DJ_1_${rid}/?csrf_token=`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,30 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest) => {
|
|
||||||
let cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
cookie = 'os=pc;' + cookie
|
|
||||||
const rid = req.query.id
|
|
||||||
const typeMap = {
|
|
||||||
0: 'R_SO_4_', // 歌曲
|
|
||||||
1: 'R_MV_5_', // mv
|
|
||||||
2: 'A_PL_0_', // 歌单
|
|
||||||
3: 'R_AL_3_', // 专辑
|
|
||||||
4: 'A_DJ_1_', // 电台,
|
|
||||||
5: 'R_VI_62_' // 视频
|
|
||||||
}
|
|
||||||
const type = typeMap[req.query.type]
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
rid: rid,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ''
|
|
||||||
}
|
|
||||||
const url = `/weapi/v1/resource/hotcomments/${type}${rid}`
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
url,
|
|
||||||
'POST',
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send('fetch error')
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
//comment like
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
let cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
cookie = 'os=pc;' + cookie
|
|
||||||
const cid = req.query.cid //评论 id
|
|
||||||
const id = req.query.id
|
|
||||||
const typeMap = {
|
|
||||||
0: 'R_SO_4_', //歌曲
|
|
||||||
1: 'R_MV_5_', //mv
|
|
||||||
2: 'A_PL_0_', //歌单
|
|
||||||
3: 'R_AL_3_', //专辑
|
|
||||||
4: 'A_DJ_1_', //电台
|
|
||||||
5: 'R_VI_62_' // 视频
|
|
||||||
}
|
|
||||||
const type = typeMap[req.query.type]
|
|
||||||
const data = {
|
|
||||||
threadId: `${type}${id}`,
|
|
||||||
commentId: cid,
|
|
||||||
csrf_token: ''
|
|
||||||
}
|
|
||||||
const action = req.query.t == 1 ? 'like' : 'unlike'
|
|
||||||
|
|
||||||
const url = `/weapi/v1/comment/${action}`
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
url,
|
|
||||||
'POST',
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send('fetch error')
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.id;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
rid: rid,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/resource/comments/R_SO_4_${rid}/?csrf_token=`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send(err.message)
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.id;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
rid: rid,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/resource/comments/R_MV_5_${rid}/?csrf_token=`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.id;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
rid: rid,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/resource/comments/A_PL_0_${rid}/?csrf_token=`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.id
|
|
||||||
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
rid: rid,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ''
|
|
||||||
}
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
`/weapi/v1/resource/comments/R_VI_62_${rid}/?csrf_token=`,
|
|
||||||
'POST',
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req)
|
|
||||||
},
|
|
||||||
err => res.status(502).send('fetch error')
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
// 签到
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
let type = req.query.type || 0; //0为安卓端签到 3点经验,1为网页签到,2点经验
|
|
||||||
const data = {
|
|
||||||
csrf_token: "",
|
|
||||||
type
|
|
||||||
};
|
|
||||||
// {'android': {'point': 3, 'code': 200}, 'web': {'point': 2, 'code': 200}}
|
|
||||||
// {'android': {'code': -2, 'msg': '重复签到'}, 'web': {'code': -2, 'msg': '重复签到'}}
|
|
||||||
// 'android': {'code': 301}, 'web': {'code': 301}}
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/point/dailyTask",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,17 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/category/get",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
//djradio detail
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.rid;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
id: rid,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/get",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,24 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
cat: req.query.type,
|
|
||||||
cateId: req.query.type,
|
|
||||||
type: req.query.type,
|
|
||||||
categoryId: req.query.type,
|
|
||||||
category: req.query.type,
|
|
||||||
limit: req.query.limit,
|
|
||||||
offset: req.query.offset,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/hot/v1",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
// 付费电台
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: "",
|
|
||||||
limit: req.query.limit || 10,
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/home/paygift/list?_nmclfl=1",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,23 +0,0 @@
|
|||||||
//dj主播 radio
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const rid = req.query.rid;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
asc: req.query.asc,
|
|
||||||
radioId: rid,
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/dj/program/byradio",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
id: req.query.id,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/dj/program/detail",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
// 精选电台
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/recommend/v1",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
//精选电台-分类电台
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
cateId: req.query.type,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/recommend",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
id: req.query.rid,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const action = req.query.t == 1 ? "sub" : "unsub";
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/djradio/${action}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: req.query.total ? "true" : "false",
|
|
||||||
limit: req.query.limit || 30
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/get/subed",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
//获取动态
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/event/get",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
//垃圾桶
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const songId = req.query.id;
|
|
||||||
const alg = "RT";
|
|
||||||
const time = req.query.time || 25;
|
|
||||||
const data = {
|
|
||||||
csrf_token: "",
|
|
||||||
songId
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/radio/trash/add?alg=${alg}&songId=${songId}&time=${time}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const url = req.query.type == "add" ? "follow" : "delfollow";
|
|
||||||
const id = req.query.id;
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/user/${url}/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,22 +0,0 @@
|
|||||||
// 喜欢歌曲
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const trackId = req.query.id;
|
|
||||||
const like = req.query.like || true;
|
|
||||||
const alg = req.query.alg || "itembased";
|
|
||||||
const time = req.query.time || 25;
|
|
||||||
const data = {
|
|
||||||
csrf_token: "",
|
|
||||||
trackId,
|
|
||||||
like
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/radio/like?alg=${alg}&trackId=${trackId}&like=${like}&time=${time}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
uid: req.query.uid,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/song/like/get`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,29 +0,0 @@
|
|||||||
const crypto = require('crypto')
|
|
||||||
|
|
||||||
//邮箱登录
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const email = req.query.email
|
|
||||||
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
const md5sum = crypto.createHash('md5')
|
|
||||||
md5sum.update(req.query.password)
|
|
||||||
const data = {
|
|
||||||
username: email,
|
|
||||||
password: md5sum.digest('hex'),
|
|
||||||
rememberLogin: 'true'
|
|
||||||
}
|
|
||||||
console.log(email, req.query.password)
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
'/weapi/login',
|
|
||||||
'POST',
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
(music_req, cookie) => {
|
|
||||||
// console.log(music_req)
|
|
||||||
res.append("Set-Cookie", cookie)
|
|
||||||
res.send(music_req)
|
|
||||||
},
|
|
||||||
err => res.status(502).send('fetch error')
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,26 +0,0 @@
|
|||||||
const crypto = require("crypto");
|
|
||||||
|
|
||||||
//手机登录
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const phone = req.query.phone;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const md5sum = crypto.createHash("md5");
|
|
||||||
md5sum.update(req.query.password);
|
|
||||||
const data = {
|
|
||||||
phone: phone,
|
|
||||||
password: md5sum.digest("hex"),
|
|
||||||
rememberLogin: "true"
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/login/cellphone",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
(music_req, cookie) => {
|
|
||||||
res.append("Set-Cookie", cookie);
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
//登录刷新
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/login/token/refresh`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
(music_req, cookie) => {
|
|
||||||
res.append("Set-Cookie", cookie);
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,23 +0,0 @@
|
|||||||
//登录状态
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/",
|
|
||||||
"GET",
|
|
||||||
{},
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
try {
|
|
||||||
var profile = /GUser\s*=\s*([^;]+);/.exec(music_req)[1];
|
|
||||||
var bindings = /GBinds\s*=\s*([^;]+);/.exec(music_req)[1];
|
|
||||||
profile = eval(`(${profile})`);
|
|
||||||
bindings = eval(`(${bindings})`);
|
|
||||||
res.send({code: 200, profile: profile, bindings: bindings});
|
|
||||||
} catch (error) {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
//登出
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
'/weapi/logout',
|
|
||||||
'POST',
|
|
||||||
{},
|
|
||||||
cookie,
|
|
||||||
(music_req, cookie) => {
|
|
||||||
res.append("Set-Cookie", cookie)
|
|
||||||
res.send(music_req)
|
|
||||||
},
|
|
||||||
err => res.status(502).send('fetch error')
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,17 +0,0 @@
|
|||||||
// 获取歌词
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {};
|
|
||||||
const id = req.query.id;
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/song/lyric?os=osx&id=" + id + "&lv=-1&kv=-1&tv=-1",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,26 +0,0 @@
|
|||||||
// 获取音乐 url
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const id = req.query.id;
|
|
||||||
const br = req.query.br || 999000;
|
|
||||||
const data = {
|
|
||||||
ids: [id],
|
|
||||||
br: br,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/song/enhance/player/url",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.setHeader("Content-Type", "application/json");
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
20
router/mv.js
20
router/mv.js
@ -1,20 +0,0 @@
|
|||||||
//mv
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const mvid = req.query.mvid;
|
|
||||||
const data = {
|
|
||||||
id: mvid
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/mv/detail`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
//最新mv
|
|
||||||
|
|
||||||
// type ALL, ZH,EA,KR,JP
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
// 'offset': req.query.offset || 0,
|
|
||||||
total: true,
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/mv/first",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const url = req.query.url;
|
|
||||||
const headers = {
|
|
||||||
Referer: "http://music.163.com/",
|
|
||||||
Cookie: "appver=1.5.0.75771;",
|
|
||||||
"Content-Type": "video/mp4",
|
|
||||||
Location: url
|
|
||||||
};
|
|
||||||
const options = {
|
|
||||||
header: headers,
|
|
||||||
url: url
|
|
||||||
};
|
|
||||||
request(options)
|
|
||||||
.on("error", err => {
|
|
||||||
res.send({ err });
|
|
||||||
})
|
|
||||||
.pipe(res);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
// 私人 FM
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/radio/get",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,22 +0,0 @@
|
|||||||
//推荐歌单
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
offset: req.query.limit || 0,
|
|
||||||
total: true,
|
|
||||||
n: 1000,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/personalized/playlist",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
//推荐dj
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/personalized/djprogram",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
//推荐mv
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/personalized/mv",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
//推荐新音乐
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
type: "recommend"
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/personalized/newsong",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
//独家放送
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/personalized/privatecontent",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
// 全部歌单分类
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/playlist/catalogue",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
name: req.query.name,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/playlist/create",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,26 +0,0 @@
|
|||||||
// 获取歌单内列表
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
id: req.query.id,
|
|
||||||
n: 100000,
|
|
||||||
s: req.query.s || 8,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v3/playlist/detail`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
// console.log(JSON.parse(music_req).playlist.tracks.length)
|
|
||||||
// console.log(JSON.parse(music_req).playlist.trackIds.length)
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
// 热门歌单分类
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/playlist/hottags",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
id: req.query.id,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const action = req.query.t == 1 ? "subscribe" : "unsubscribe";
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/playlist/${action}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,27 +0,0 @@
|
|||||||
//收藏单曲到歌单,从歌单删除歌曲 op=del,add;pid=歌单id,tracks=歌曲id
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const op = req.query.op;
|
|
||||||
const pid = req.query.pid;
|
|
||||||
// const tracks = req.query.tracks.split(',')
|
|
||||||
const tracks = req.query.tracks;
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
// console.log('COOKIESS', cookie)
|
|
||||||
const data = {
|
|
||||||
op: op,
|
|
||||||
pid: pid,
|
|
||||||
// tracks: (tracks.length == 1) ? tracks[0] : Array.apply(null,{length:tracks.length}).map(()=>({})).join(','),
|
|
||||||
// trackIds: (tracks.length == 1) ? JSON.stringify(tracks) : `[${tracks.join(',')}]`
|
|
||||||
trackIds: `[${tracks}]`,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/playlist/manipulate/tracks",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,27 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const playlist_id = req.query.id;
|
|
||||||
const desc_detail = req.query.desc || "";
|
|
||||||
const tags_detail = req.query.tags || "";
|
|
||||||
const name_detail = req.query.name;
|
|
||||||
const data = {
|
|
||||||
"/api/playlist/desc/update":
|
|
||||||
'{"id":' + playlist_id + ',"desc":"' + desc_detail + '"}',
|
|
||||||
"/api/playlist/tags/update":
|
|
||||||
'{"id":' + playlist_id + ',"tags":"' + tags_detail + '"}',
|
|
||||||
"/api/playlist/update/name":
|
|
||||||
'{"id":' + playlist_id + ',"name":"' + name_detail + '"}',
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/batch",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
//推荐节目
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
cateId: req.query.type,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/program/recommend/v1",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,17 +0,0 @@
|
|||||||
//取消推荐
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/radio/get",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,17 +0,0 @@
|
|||||||
// 获取每日推荐歌单
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/discovery/recommend/resource",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
// 获取每日推荐歌曲
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: 0,
|
|
||||||
total: true,
|
|
||||||
limit: 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/discovery/recommend/songs",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,37 +0,0 @@
|
|||||||
//related ,相关歌单
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const options = {
|
|
||||||
url: "http://music.163.com/playlist?id=" + req.query.id,
|
|
||||||
method: "GET",
|
|
||||||
headers: {
|
|
||||||
Referer: "http://music.163.com",
|
|
||||||
"User-Agent":
|
|
||||||
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3380.0 Safari/537.36"
|
|
||||||
}
|
|
||||||
};
|
|
||||||
request(options, (error, response, body) => {
|
|
||||||
if (error) {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
const pattern = /<div class="cver u-cover u-cover-3">[\s\S]*?<img src="([^"]+)">[\s\S]*?<a class="sname f-fs1 s-fc0" href="([^"]+)"[^>]*>([^<]+?)<\/a>[\s\S]*?<a class="nm nm f-thide s-fc3" href="([^"]+)"[^>]*>([^<]+?)<\/a>/g;
|
|
||||||
const data = {playlists:[],code:200};
|
|
||||||
let result;
|
|
||||||
while ((result = pattern.exec(body)) != null) {
|
|
||||||
data.playlists.push({
|
|
||||||
creator: {
|
|
||||||
userId: result[4].slice('/user/home?id='.length),
|
|
||||||
nickname: result[5]
|
|
||||||
},
|
|
||||||
coverImgUrl: result[1].slice(0,-('?param=50y50'.length)),
|
|
||||||
name: result[3],
|
|
||||||
id: result[2].slice('/playlist?id='.length)
|
|
||||||
});
|
|
||||||
}
|
|
||||||
res.send(JSON.stringify(data));
|
|
||||||
} catch (error) {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
threadId: req.query.id,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const action = req.query.t == 1 ? "like" : "unlike";
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/resource/${action}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,26 +0,0 @@
|
|||||||
// 搜索
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get('Cookie') ? req.get('Cookie') : ''
|
|
||||||
const keywords = req.query.keywords
|
|
||||||
const type = req.query.type || 1
|
|
||||||
const limit = req.query.limit || 30
|
|
||||||
const offset = req.query.offset || 0
|
|
||||||
// *(type)* 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲, 10: 专辑, 100: 歌手, 1000: 歌单, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频
|
|
||||||
const data = {
|
|
||||||
csrf_token: '',
|
|
||||||
limit,
|
|
||||||
type,
|
|
||||||
s: keywords,
|
|
||||||
offset
|
|
||||||
}
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
'music.163.com',
|
|
||||||
'/weapi/search/get',
|
|
||||||
'POST',
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send('fetch error')
|
|
||||||
)
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
// 热搜
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
type: 1111
|
|
||||||
};
|
|
||||||
const id = req.query.id;
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/search/hot",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
//搜索 multimatch
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: "",
|
|
||||||
type: req.query.type || 1,
|
|
||||||
s: req.query.keywords || ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/search/suggest/multimatch",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
// 搜索 suggest,搜索结果包含单曲,歌手,歌单,mv信息
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: "",
|
|
||||||
s: req.query.keywords || ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/search/suggest/web",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const user_ids = req.query.user_ids;
|
|
||||||
const data = {
|
|
||||||
id: req.query.playlist,
|
|
||||||
type: "playlist",
|
|
||||||
msg: req.query.msg,
|
|
||||||
userIds: "[" + user_ids + "]",
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/msg/private/send`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
// user_id must be [id]
|
|
||||||
const user_ids = req.query.user_ids;
|
|
||||||
const data = {
|
|
||||||
type: "text",
|
|
||||||
msg: req.query.msg,
|
|
||||||
userIds: "[" + user_ids + "]",
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
console.log(data);
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/msg/private/send`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,17 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.id;
|
|
||||||
const data = {
|
|
||||||
artistid: id,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/discovery/simiArtist`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,16 +0,0 @@
|
|||||||
//相似 mv
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
mvid: req.query.mvid
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/discovery/simiMV",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => res.send(music_req),
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
//simi ,相似歌单
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
songid: req.query.id
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/discovery/simiPlaylist",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
//simi ,相似歌曲
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
songid: req.query.id
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/discovery/simiSong",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
//simi ,相似关注的用户
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
songid: req.query.id
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/discovery/simiUser",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,23 +0,0 @@
|
|||||||
// 获取音乐详情
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = parseInt(req.query.ids);
|
|
||||||
const data = {
|
|
||||||
// "id": id,
|
|
||||||
c: JSON.stringify([{ id: id }]),
|
|
||||||
ids: "[" + id + "]",
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
console.log(data);
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v3/song/detail",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,25 +0,0 @@
|
|||||||
//最新mv
|
|
||||||
// 新碟上架 http://music.163.com/#/discover/album/
|
|
||||||
|
|
||||||
// type ALL, ZH,EA,KR,JP
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: true,
|
|
||||||
limit: req.query.limit || 50,
|
|
||||||
area: req.query.type,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/album/new",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
// 热门歌手 http://music.163.com/#/discover/artist/
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: true,
|
|
||||||
limit: req.query.limit || 50,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/artist/top`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,51 +0,0 @@
|
|||||||
const top_list_all = {
|
|
||||||
"0": ["云音乐新歌榜", "3779629"],
|
|
||||||
"1": ["云音乐热歌榜", "3778678"],
|
|
||||||
"2": ["网易原创歌曲榜", "2884035"],
|
|
||||||
"3": ["云音乐飙升榜", "19723756"],
|
|
||||||
"4": ["云音乐电音榜", "10520166"],
|
|
||||||
"5": ["UK排行榜周榜", "180106"],
|
|
||||||
"6": ["美国Billboard周榜", "60198"],
|
|
||||||
"7": ["KTV嗨榜", "21845217"],
|
|
||||||
"8": ["iTunes榜", "11641012"],
|
|
||||||
"9": ["Hit FM Top榜", "120001"],
|
|
||||||
"10": ["日本Oricon周榜", "60131"],
|
|
||||||
"11": ["韩国Melon排行榜周榜", "3733003"],
|
|
||||||
"12": ["韩国Mnet排行榜周榜", "60255"],
|
|
||||||
"13": ["韩国Melon原声周榜", "46772709"],
|
|
||||||
"14": ["中国TOP排行榜(港台榜)", "112504"],
|
|
||||||
"15": ["中国TOP排行榜(内地榜)", "64016"],
|
|
||||||
"16": ["香港电台中文歌曲龙虎榜", "10169002"],
|
|
||||||
"17": ["华语金曲榜", "4395559"],
|
|
||||||
"18": ["中国嘻哈榜", "1899724"],
|
|
||||||
"19": ["法国 NRJ EuroHot 30周榜", "27135204"],
|
|
||||||
"20": ["台湾Hito排行榜", "112463"],
|
|
||||||
"21": ["Beatport全球电子舞曲榜", "3812895"],
|
|
||||||
"22": ["云音乐ACG音乐榜", "71385702"],
|
|
||||||
"23": ["云音乐嘻哈榜", "991319590"]
|
|
||||||
};
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const idx = req.query.idx;
|
|
||||||
const id = top_list_all[idx][1];
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const action = "/weapi/v3/playlist/detail";
|
|
||||||
const data = {
|
|
||||||
id,
|
|
||||||
n: 10000,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
action,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.setHeader("Content-Type", "application/json");
|
|
||||||
// console.log(JSON.parse(music_req).playlist.tracks.length)
|
|
||||||
// console.log(JSON.parse(music_req).playlist.trackIds.length)
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,22 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: true,
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/mv/toplist",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.setHeader("Content-Type", "application/json");
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,23 +0,0 @@
|
|||||||
//分类歌单
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
// order可为 'hot' 可为 'new'
|
|
||||||
const data = {
|
|
||||||
cat: req.query.cat || "全部",
|
|
||||||
order: req.query.order || "hot",
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
total: req.query.total ? "true" : "false",
|
|
||||||
limit: req.query.limit || 50
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/playlist/list",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
//精品歌单
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
cat: req.query.cat || "全部",
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
limit: req.query.limit || 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/playlist/highquality/list",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
//暂时废弃
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/discovery/new/songs",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,18 +0,0 @@
|
|||||||
// 排行榜
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/toplist",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
//歌手榜
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
type: req.query.type,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/eapi/toplist/artist?params=B5CAE4715306477C2EFA74D383640F01BF227BF8E889F80E2E2A442958463A7E589CC99878CFCE88D165B64712332AF39EC61B7E68903B2F9F079E8D1AB99FC61049A6D5B97AF8E6FFE8DA16ED540D2CFA80205B889ACA39F8B05AE593FDF5A094F118FF4600C2025094ECF6EB58F6D424B7A97B21A8C1D7CF0609AF2FBE9FDD88826E1667C889757BA920684C5C425FF01B5514AF1EB08AB7D298DB4D65187829E315F9FFBBEB43C2AE3DC21222B31CEC6FF337957AC122FBCB3E793FC1960151B0BDEBB1565BFD835E7A7D6A2D034A5591070D42C32DA4B69E0061C46D61239221A1C64EF676D891B44D7B855E27C82A7EB376F0B0C27952F2006E302B47DA1DE86C3488D53FD98ED9FDC6AA341DF0ECF92BA2E8F77E41811BF9447973C5C34FFED13E28AC544347F9E6ADF4B0008C371FC41C4490D3C9E1A225791D2170326231C40662633AA93D5CEF9AABC777AF268A4B13C560157339478DFAD5D910C966B43E1F017410DBF06D189E2BD6D0CD2682F343A83994E66CA73B5E2A67A122842BF945F2B434CBDE4C5A589A3A90F70DF1A8B63E7BAFBEB624956C62CFB1114AB841379541E5BB4625F2C28CAEA6A67E77A7EEAA1149D9D0F7E190D3A3408DF88B62FBF27996ABC925A93E5A67B4B0D1D931214BB07064F2BA4DCBA2E548E5A110E9B992C21E3930EB488172929C02C06D76BB193EF923D1906E0A0C4D75F5EB909AE77B0A2E55539A182D0B2533C654F2C90A038406B8850BFC022639F2B3FB7EDF40FD74AEA0B9119E9987D2909C01C587794F53459DB8EE83AA8D15FBEAC71EB3A00D8E40E78FE9A9A4068495D9257B39D8F825086F391FD5E7A48AACA96BC261E334A1929C81633234A0B22C573AEAD05BC8B4216283ACFD9E022950AEC812F554B913B4457FDF68AA2CC5E476922C2670D49154BC1DEB6D464F60DBFAD2BB4144762CD3721F52D42FDAE56DB9C529EDB6FB946CD725B3E2EA2AFDCF3F759D384B4F7F75AAA6F01F8093C8A140B3B388FF57272A6A7E10274290A79CDCA69E37BC066CE8CCD5B4BB4E12DA841B",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
// 排行榜详情
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
id: req.query.id,
|
|
||||||
limit: 20,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/toplist/detail",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,24 +0,0 @@
|
|||||||
// 获取用户电台
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const data = {
|
|
||||||
userId: req.query.uid,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
console.log(data);
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/djradio/get/byuser",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.setHeader("Content-Type", "application/json");
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,23 +0,0 @@
|
|||||||
//云盘数据
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const data = {
|
|
||||||
limit: req.query.limit || 10,
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/cloud/get",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.setHeader("Content-Type", "application/json");
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,23 +0,0 @@
|
|||||||
//云盘数据详情? 暂时不要使用
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const data = {
|
|
||||||
byids: req.query.id,
|
|
||||||
id: req.query.id,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/v1/cloud/get/byids",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.setHeader("Content-Type", "application/json");
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => {
|
|
||||||
res.status(502).send("fetch error");
|
|
||||||
}
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
// 用户详情
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.uid;
|
|
||||||
const data = {
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/v1/user/detail/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
// 用户电台
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.uid;
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || "0",
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/dj/program/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,21 +0,0 @@
|
|||||||
//用户动态
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.uid;
|
|
||||||
const data = {
|
|
||||||
time: -1,
|
|
||||||
getcounts: true,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/event/get/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
userId: req.query.uid,
|
|
||||||
offset: req.query.offset || "0",
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/user/getfolloweds/`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,20 +0,0 @@
|
|||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const id = req.query.uid;
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || "0",
|
|
||||||
limit: req.query.limit || 30,
|
|
||||||
order: true
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
`/weapi/user/getfollows/${id}`,
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
@ -1,22 +0,0 @@
|
|||||||
// 获取用户歌单
|
|
||||||
module.exports = (req, res, createWebAPIRequest, request) => {
|
|
||||||
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
|
|
||||||
const data = {
|
|
||||||
offset: req.query.offset || 0,
|
|
||||||
uid: req.query.uid,
|
|
||||||
limit: req.query.limit || 30, //貌似无效
|
|
||||||
csrf_token: ""
|
|
||||||
};
|
|
||||||
createWebAPIRequest(
|
|
||||||
"music.163.com",
|
|
||||||
"/weapi/user/playlist",
|
|
||||||
"POST",
|
|
||||||
data,
|
|
||||||
cookie,
|
|
||||||
music_req => {
|
|
||||||
res.send(music_req);
|
|
||||||
// console.log(JSON.parse(music_req))
|
|
||||||
},
|
|
||||||
err => res.status(502).send("fetch error")
|
|
||||||
);
|
|
||||||
};
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user