新增用户绑定信息,用户绑定手机,新版评论,点赞过的视频,收藏视频到视频歌单,删除视频歌单里的视频,最近播放的视频,音乐日历等接口 创建歌单接口增加type参数,可创建视频歌单 #955 #946

This commit is contained in:
binaryify 2020-10-04 22:11:27 +08:00
parent a7019f5ca3
commit 1d880bede7
14 changed files with 1517 additions and 1228 deletions

View File

@ -1,4 +1,9 @@
# 更新日志
### 3.42.0 | 2020.10.04
- 新增`用户绑定信息`,`用户绑定手机`,`新版评论`,`点赞过的视频`,`收藏视频到视频歌单`,`删除视频歌单里的视频`,`最近播放的视频`,`音乐日历`等接口
- 创建歌单接口增加`type`参数,可创建视频歌单
### 3.41.2 | 2020.09.20
- 更新`获取音乐 url`接口,未登录状态返回试听片段 [#897](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/897)

View File

@ -186,6 +186,14 @@
168. 精品歌单标签列表
169. 用户等级信息
170. 电台个性推荐
171. 用户绑定信息
172. 用户绑定手机
173. 新版评论
174. 点赞过的视频
175. 收藏视频到视频歌单
176. 删除视频歌单里的视频
177. 最近播放的视频
178. 音乐日历
## 安装
@ -527,6 +535,41 @@ v3.30.0后支持手动传入cookie,登录接口返回内容新增 `cookie` 字
**调用例子 :** `/user/level`
### 获取用户绑定信息
说明 : 登录后调用此接口 , 可以获取用户绑定信息
**必选参数 :** `uid` : 用户 id
**接口地址 :** `/user/binding`
**调用例子 :** `/user/binding?uid=32953014`
### 用户绑定手机
说明 : 登录后调用此接口 , 可以更换绑定手机
**必选参数 :**
`phone` : 手机号码
`oldcaptcha`: 原手机号码的验证码
`captcha`:新手机号码的验证码
**可选参数 :**
`countrycode`: 国家地区代码,默认86
**接口地址 :** `/user/replacephone`
**调用例子 :** `/user/replacephone?uid=32953014`
### 更新用户信息
说明 : 登录后调用此接口 , 传入相关信息,可以更新用户信息
@ -1192,14 +1235,15 @@ mp3url 不能直接用 , 可通过 `/song/url` 接口传入歌曲 id 获取具
**必选参数 :** `name` : 歌单名
**可选参数 :** `privacy` : 是否设置为隐私歌单,默认否,传'10'则设置成隐私歌单
**可选参数 :**
`privacy` : 是否设置为隐私歌单,默认否,传'10'则设置成隐私歌单
`type` : 歌单类型,默认'NORMAL',传 'VIDEO'则为视频歌单
**接口地址 :** `/playlist/create`
**调用例子 :** `/playlist/create?name=测试歌单`
**调用例子 :** `/playlist/create?name=测试歌单`,`/playlist/create?name=test&type=VIDEO`
### 删除歌单
@ -1257,6 +1301,38 @@ mp3url 不能直接用 , 可通过 `/song/url` 接口传入歌曲 id 获取具
**调用例子 :** `/playlist/tracks?op=add&pid=24381616&tracks=347231` ( 对应把歌曲添加到 ' 我 ' 的歌单 , 测试的时候请把这里的 pid 换成你自己的, id 和 tracks 不对可能会报 502 错误)
### 收藏视频到视频歌单
说明 : 调用此接口 , 可收藏视频到视频歌单 ( 需要登录 )
**必选参数 :**
`pid` : 歌单 id
`ids` : 视频id,支持多个,用`,`隔开
**接口地址 :** `/playlist/track/add`
**调用例子 :** `/playlist/track/add?pid=5271999357&ids=186041`
### 删除视频歌单里的视频
说明 : 调用此接口 , 可删除视频歌单里的视频 ( 需要登录 )
**必选参数 :**
`pid` : 歌单 id
`ids` : 视频id,支持多个,用`,`隔开
**接口地址 :** `/playlist/track/delete`
**调用例子 :** `/playlist/track/delete?pid=5271999357&ids=186041`
### 最近播放的视频
说明 : 调用此接口 , 可获取最近播放的视频 ( 需要登录 )
**接口地址 :** `/playlist/video/recent`
**调用例子 :** `/playlist/video/recent`
### 获取歌词
说明 : 调用此接口 , 传入音乐 id 可获得对应音乐的歌词 ( 不需要登录 )
@ -1483,6 +1559,36 @@ mp3url 不能直接用 , 可通过 `/song/url` 接口传入歌曲 id 获取具
**调用例子 :** `/comment/hot?id=186016&type=0`
### 新版评论接口
说明 : 调用此接口 , 传入资源类型和资源id,以及排序方式,可获取对应资源的评论
**必选参数 :**
`id` : 资源 id, 如歌曲 id,mv id
`tpye`: 数字 , 资源类型 , 对应歌曲 , mv, 专辑 , 歌单 , 电台, 视频对应以下类型
```
0: 歌曲
1: mv
2: 歌单
3: 专辑
4: 电台
5: 视频
6: 动态
```
**可选参数 :**
`pageNo`:分页参数,第N页,默认为1
`pageSize`:分页参数,每页多少条数据,默认20
`sortType` 排序方式,1:按推荐排序,2:按热度排序,3:按时间排序
### 给评论点赞
说明 : 调用此接口 , 传入 type, 资源 id, 和评论 id cid 和 是否点赞参数 t 即可给对
@ -1646,6 +1752,14 @@ mp3url 不能直接用 , 可通过 `/song/url` 接口传入歌曲 id 获取具
注意:如给动态点赞,不需要传入 id需要传入 `threadId`,可通过 `event`,`/user/event` 接口获取,如:
`/resource/like?t=1&type=6&threadId=A_EV_2_6559519868_32953014`
### 获取点赞过的视频
说明 : 调用此接口, 可获取获取点赞过的视频
**接口地址 :** `/playlist/mylike`
**调用例子 :** `/playlist/mylike`
### 获取歌曲详情
说明 : 调用此接口 , 传入音乐 id(支持多个 id, 用 `,` 隔开), 可获得歌曲详情(注意:歌曲封面现在需要通过专辑内容接口获取)
@ -2784,6 +2898,14 @@ type='1009' 获取其 id, 如`/search?keywords= 代码时间 &type=1009`
**调用例子 :** `/digitalAlbum/ordering?id=86286082&payment=3&quantity=1`
### 音乐日历
说明 : 登录后调用此接口 传入开始和结束时间,可获取音乐日历
**接口地址 :** `/calendar`
**调用例子 :** `/calendar?startTime=1606752000000&endTime=1609430399999`
### batch批量请求接口
说明 : 登录后调用此接口 ,传入接口和对应原始参数(原始参数非文档里写的参数,需参考源码),可批量请求接口

1250
interface.d.ts vendored Normal file

File diff suppressed because it is too large Load Diff

1213
main.d.ts vendored

File diff suppressed because it is too large Load Diff

19
module/audio_match.js Normal file
View File

@ -0,0 +1,19 @@
const realData =
'eJx10mtIU2EcBvDtnCwNMfO2klUSmSQ5ZugKW/v/0TIjJVdhDStbXpqXrhY5Kwhtrcwiut9VSqMUMxX6IFqsD92sD1YgWGHRBcowKrpnPa/v+drg4flt572ds2PQ6XQut7MwJ940w2TOyS0pzF+/BV/MJrNO+3TVLOHUzKx5iw3/H5uZ7yxegct3tTl7Cr6QEa0gZ/dZOFsvfe5YHe1D+yFZxpncqEj/cCdwoirdVxHNnZrX3xygU5g7Eh6I9uOx8Ch4y9FQjlKkDz1pYrFXIJLUOovFGcYivqJgXqaXDqu7Rzc0XzmZxG81B/fF8wRVusn2jN5rDnwca8tFhyAJP4L4qiI9vX8cWzEmVKzT/46qxNpIdZOZz2HNcHhSkZ3D4AjYFpfGFkX6+dB+FvcSBe/SWbkLPVnEOJ1DFelXxVVci/Wj4TsBLhrQ/LGoaU4HxsTA28L76Cc8Dfau/U6F6FgkyBDDJar0g8tesmOvOHioWeXXmme6l3MLbIIre6wciU5E2t/k8WVxHfHvuUWXsH4SPCv1NW1Cz0aivgYO34vw1AEvi3MlIw0xHl6JNVPEGW41UJsqPaXYYTuEnotMdHwYfv7CFR/i+aXmrY5wrlSkEwr+0EJ0GvLmdw4/RS9Amj93UAbGZMIF40ezE3PtcG/yBWrT3L6oh66hFyMXK4xsUKT7aufzapxnFTwiNc3Wis5Bdm+OYCvmOuHj/ZeoQPOI00PUrUjXpG+kMFU61tFFDvQaZOn5DH4mzoLw4Hsaj14rzu/K4jF66fSWTnJinW3wBvcveqjZN3iFjKp0qKuF1mi21keST3NtTcbwu1eG3Dussr9eemljLIco0tVH7HwA493wOr+FlIjfy+GvkR4uwfjt4v/6G8K3NX8K38lt6B1ISa+Bv2O8Fy69foZOovci2S4Lr1aku4P9OEWVTt9wgMQ7exgJ8JXyI0W694WFyuBjcH75XyrEXsfhg+ZSvqZIf/Lct8Wp0md2tJN4PifEfjcm8gu02Ptbj459eum8eg8bFWlLXTb/A+uo9bM='
module.exports = (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,
})
}

12
module/calendar.js Normal file
View File

@ -0,0 +1,12 @@
module.exports = (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,
})
}

34
module/comment_new.js Normal file
View File

@ -0,0 +1,34 @@
// 评论
module.exports = (query, request) => {
query.cookie.os = 'pc'
query.type = {
0: 'R_SO_4_', // 歌曲
1: 'R_MV_5_', // MV
2: 'A_PL_0_', // 歌单
3: 'R_AL_3_', // 专辑
4: 'A_DJ_1_', // 电台,
5: 'R_VI_62_', // 视频
6: 'A_EV_2_', // 动态
}[query.type]
const threadId = query.type + query.id
const data = {
threadId: threadId, //'R_SO_4_863481066',
pageNo: query.pageNo || 1,
showInner: query.showInner || true,
pageSize: query.pageSize || 20,
sortType: query.sortType || 1, //1:按推荐排序,2:按热度排序,3:按时间排序
}
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',
},
)
}

View File

@ -5,8 +5,9 @@ module.exports = (query, request) => {
const data = {
name: query.name,
privacy: query.privacy, //0 为普通歌单10 为隐私歌单
type: query.type || 'NORMAL', // NORMAL|VIDEO
}
return request('POST', `https://music.163.com/weapi/playlist/create`, data, {
return request('POST', `https://music.163.com/api/playlist/create`, data, {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,

17
module/playlist_mylike.js Normal file
View File

@ -0,0 +1,17 @@
module.exports = (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,
},
)
}

View File

@ -0,0 +1,20 @@
module.exports = 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', `http://music.163.com/api/playlist/track/add`, data, {
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
})
}

View File

@ -0,0 +1,26 @@
// 收藏单曲到歌单 从歌单删除歌曲
module.exports = 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',
`http://music.163.com/api/playlist/track/delete`,
data,
{
crypto: 'weapi',
cookie: query.cookie,
proxy: query.proxy,
realIP: query.realIP,
},
)
}

View File

@ -1,10 +1,8 @@
module.exports = (query, request) => {
const data = {
}
const data = {}
return request(
'POST',
`https://music.163.com/api/usersafe/loginprotect/status/get`,
`https://music.163.com/api/playlist/video/recent`,
data,
{
crypto: 'weapi',

View File

@ -1,7 +1,5 @@
module.exports = (query, request) => {
const data = {
}
const data = {}
return request(
'POST',
`https://music.163.com/api/v1/user/bindings/${query.uid}`,

View File

@ -1,6 +1,6 @@
{
"name": "NeteaseCloudMusicApi",
"version": "3.41.2",
"version": "3.42.0",
"description": "网易云音乐 NodeJS 版 API",
"scripts": {
"start": "node app.js",
@ -15,7 +15,7 @@
"网易云音乐nodejs"
],
"main": "main.js",
"types": "main.d.ts",
"types": "./interface.d.ts",
"husky": {
"hooks": {
"pre-commit": "lint-staged"