提交 7c524ec7 编写于 作者: N Nzix 提交者: GitHub

Merge pull request #1 from Binaryify/master

sync
# 更新日志
### 2.9.6 | 2018.05.08
新增发送私信相关接口,新增新建歌单,收藏/取消收藏歌单接口
### 2.9.4 | 2018.05.04
新增热搜接口,更新 banner 接口
### 2.9.2 | 2018.02.28
修复登录失败会崩溃的问题
......
......@@ -155,10 +155,18 @@ app.use("/playlist/detail", require("./router/playlist_detail"));
//收藏单曲到歌单,从歌单删除歌曲 op=del,add;pid=歌单id,tracks=歌曲id
app.use("/playlist/tracks", require("./router/playlist_tracks"));
// 热门歌单分类
app.use("/playlist/hot", require("./router/playlist_hot"));
// 全部歌单分类
app.use("/playlist/catlist", require("./router/playlist_catlist"));
// 新建歌单
app.use("/playlist/create", require("./router/playlist_create"));
// 收藏/取消收藏歌单
app.use("/playlist/subscribe", require("./router/playlist_subscribe"));
//推荐节目
app.use("/program/recommend", require("./router/program_recommend"));
......@@ -185,6 +193,10 @@ app.use("/search/multimatch", require("./router/search_multimatch"));
// 搜索 suggest,搜索结果包含单曲,歌手,歌单,mv信息
app.use("/search/suggest", require("./router/search_suggest"));
app.use("/send/text", require("./router/send_text"));
app.use("/send/playlist", require("./router/send_playlist"));
//simi ,相似歌单
app.use("/simi/playlist", require("./router/simi_playlist"));
......
......@@ -16,8 +16,11 @@
## 版本新特性
### 2.9.3 | 2018.05.04
增加热搜接口
### 2.9.6 | 2018.05.08
新增发送私信相关接口,新增新建歌单,收藏/取消收藏歌单接口
### 2.9.4 | 2018.05.04
新增热搜接口,更新 banner 接口
### 2.9.0 | 2018.01.26
......@@ -121,6 +124,11 @@ banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评
61. 给评论点赞
62. 获取动态
63. 获取热搜
64. 发送私信
65. 发送私信歌单
66. 新建歌单
67. 收藏/取消收藏歌单
68. 歌单分类
## 安装
......@@ -192,33 +200,23 @@ docker run -d -p 3000:3000 --name netease-cloud-music -e http_proxy= -e https_pr
### 调用前须知
* 为使用方便 , 降低门槛 , 登录接口直接使用了 get 明文请求 , 请按实际需求对源码修
!> 为使用方便,降低门槛,登录接口直接使用了 get 明文请求,请按实际需求对源码修改
* 由于接口做了缓存处理 ( 缓存 2 分钟 , 可在 app.js 设置 , 可能会导致登陆后获取不
!> 由于接口做了缓存处理 ( 缓存 2 分钟 , 可在 app.js 设置 , 可能会导致登陆后获取不
到 cookie), 相同的 url 会在两分钟内只向网易服务器发一次请求 , 如果遇到不需要缓
存结果的接口 , 可在请求 url 后面加一个时间戳参数使 url 不同 , 例子 :
`/simi/playlist?id=347230&timestamp=1503019930000`
* 如果是跨域请求 , 请在所有请求带上 `xhrFields: { withCredentials: true }` 否则
可能会因为没带上 cookie 导致 301, 具体例子可看 `public/test.html`, 例子使用
jquery, axios 版本也类似
* 301 错误基本都是没登录就调用了需要登录的接口 , 如果登陆了还是提示 301, 基本都
是缓存把数据缓存起来了 , 解决方法是等待 2 分钟或者重启服务重新登录后再调用接口
!> 如果是跨域请求 , 请在所有请求带上 `xhrFields: { withCredentials: true }` 否则
可能会因为没带上 cookie 导致 301, 具体例子可看 `public/test.html`, 例子使用 jquery, axios 版本也类似
* 部分接口如登录接口不能调用太频繁 , 否则可能会触发 503 错误或者 ip 高频错误 ,
若需频繁调用 , 需要准备 IP 代理池 .
!> 301 错误基本都是没登录就调用了需要登录的接口,如果登陆了还是提示 301, 基本都是缓存把数据缓存起来了,解决方法是等待 2 分钟或者重启服务重新登录后再调用接口
* 本项目仅供学习使用 , 文档可能会有缓存 , 如果文档版本和 github 上的版本不一致 ,
请清除缓存再查看
!> 部分接口如登录接口不能调用太频繁 , 否则可能会触发 503 错误或者 ip 高频错误 ,若需频繁调用 , 需要准备 IP 代理池 (更新:已加入缓存机制,但仍需注意).
* 2.5.0 版本对部分原有 api 做了微调 , 不过只是调整了下地址 , 参数和返回结果不受
影响
!> 本项目仅供学习使用 , 文档可能会有缓存 , 如果文档版本和 github 上的版本不一致,请清除缓存再查看
* 由于网易限制 , 此项目在国外服务器上使用会受到限制 , 如需解决 , 可使用大陆服务
器或者使用代理 , 感谢 [@hiyangguo](https://github.com/hiyangguo)提出
[解决方法](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/29#issuecomment-298358438),
!> 由于网易限制,此项目在国外服务器上使用会受到限制,如需解决 , 可使用大陆服务器或者使用代理 , 感谢 [@hiyangguo](https://github.com/hiyangguo)提出的[解决方法](https://github.com/Binaryify/NeteaseCloudMusicApi/issues/29#issuecomment-298358438):
在 'util.js' 的 'headers' 处增加 `X-Real-IP':'211.161.244.70' // 任意国内 IP`
即可解决
......@@ -291,6 +289,40 @@ Cookies
返回数据如下图 :
![用户歌单](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E7%94%A8%E6%88%B7%E6%AD%8C%E5%8D%95.png)
### 发送私信
说明 : 登陆后调用此接口 , 传入用户 id 和要发送的信息, 可以发送私信,返回内容为历史私信,包含带歌单的私信信息(注:不能发送私信给自己)
**必选参数 :**
`user_ids` : 用户 id,多个需用逗号隔开
`msg` : 要发送的信息
**接口地址 :** `/send/text`
**调用例子 :** `/send/text?user_ids=32953014&msg=test`,`/send/text?user_ids=32953014,475625142&msg=test`
返回数据如下图:
![数据](https://ws1.sinaimg.cn/large/006tKfTcgy1fr3p3hfeudj31kw1aek2e.jpg)
### 发送私信(带歌单)
说明 : 登陆后调用此接口 , 传入用户 id 和要发送的信息和歌单 id, 可以发送带歌单的私信(注:不能发送重复的歌单)
**必选参数 :**
`user_ids` : 用户 id,多个需用逗号隔开
`msg` : 要发送的信息
**接口地址 :** `/send/playlist`
**调用例子 :** `/send/playlist?msg=test&user_ids=475625142&playlist=705123491`,`/send/playlist?msg=test2&user_ids=475625142,32953014&playlist=705123493`
返回数据如下图:
![数据](https://ws1.sinaimg.cn/large/006tKfTcgy1fr3p1z7qmcj30v409adg5.jpg)
### 获取用户电台
说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户电台
......@@ -360,12 +392,48 @@ Cookies
**调用例子 :** `/event`
### 歌单分类
说明 : 调用此接口,可获取歌单分类,包含 category 信息
**接口地址 :** `/playlist/catlist`
**调用例子 :** `/playlist/catlist`
### 热门歌单分类
说明 : 调用此接口,可获取歌单分类,包含 category 信息
**接口地址 :** `/playlist/hot`
**调用例子 :** `/playlist/hot`
### 歌单 ( 网友精选碟 )
说明 : 调用此接口 , 可获取网友精选碟歌单
**可选参数 :** `order`: 可选值为 'new' 和 'hot', 分别对应最新和最热 , 默认为
'hot'
`cat`:`cat`: tag, 比如 " 华语 "、" 古风 " 、" 欧美 "、" 流行 ", 默认为
"全部",可从歌单分类接口获取(/playlist/catlist)
**接口地址 :** `/top/playlist`
**调用例子 :** `/top/playlist?limit=10&order=new`
返回数据如下图 :
![精选碟](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/top_playlist.png)
![对应位置](https://ws2.sinaimg.cn/large/006tKfTcgy1fr3wnpyg6jj317e0vcqdc.jpg)
![返回数据](https://ws4.sinaimg.cn/large/006tKfTcgy1fr3wqs5lw9j31ic1re4c4.jpg)
### 获取精品歌单
说明 : 调用此接口 , 可获取精品歌单
**可选参数 :** `cat`: tag, 比如 " 华语 "、" 古风 " 、" 欧美 "、" 流行 ", 默认为
" 全部 "
"全部",可从歌单分类接口获取(/playlist/catlist)
`limit`: 取出歌单数量 , 默认为 20
......@@ -462,6 +530,35 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
**调用例子 :** `/search/multimatch?keywords= 海阔天空`
### 新建歌单
说明 : 调用此接口 , 传入歌单名字可新建歌单
**必选参数 :** `name` : 歌单名
**接口地址 :** `/playlist/create`
**调用例子 :** `/playlist/create?name=测试歌单`
返回数据如下图:
![数据](https://ws1.sinaimg.cn/large/006tKfTcgy1fr3va885z5j31a617qwjy.jpg)
### 收藏/取消收藏歌单
说明 : 调用此接口 , 传入类型和歌单 id 可收藏歌单或者取消收藏歌单
**必选参数 :**
`t` : 类型,1:收藏,2:取消收藏
`id` : 歌单 id
**接口地址 :** `/playlist/subscribe`
**调用例子 :** `/playlist/subscribe?t=1&id=106697785` `/playlist/subscribe?t=2&id=106697785`
返回数据如下图:
![数据](https://ws1.sinaimg.cn/large/006tKfTcgy1fr3vdwx0hvj30s405u74b.jpg)
### 对歌单添加或删除歌曲
说明 : 调用此接口 , 可以添加歌曲到歌单或者从歌单删除某首歌曲 ( 需要登录 )
......@@ -602,7 +699,7 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
### 获取歌曲详情
说明 : 调用此接口 , 传入音乐 id, 可获得歌曲详情
说明 : 调用此接口 , 传入音乐 id, 可获得歌曲详情(注意:歌曲封面现在需要通过专辑内容接口获取)
**必选参数 :** `ids`: 音乐 id, 如 `ids=347230`
......@@ -814,21 +911,6 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
![移除成功](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/fm_trash.png)
### 歌单 ( 网友精选碟 )
说明 : 调用此接口 , 可获取网友精选碟歌单
**可选参数 :** `order`: 可选值为 'new' 和 'hot', 分别对应最新和最热 , 默认为
'hot'
**接口地址 :** `/top/playlist`
**调用例子 :** `/top/playlist?limit=10&order=new`
返回数据如下图 :
![精选碟](https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/top_playlist.png)
### 新碟上架
说明 : 调用此接口 , 可获取新碟上架列表 , 如需具体音乐信息需要调用获取专辑列表接
......
{
"name": "NeteaseCloudMusicApi",
"version": "2.9.3",
"version": "2.9.6",
"description": "网易云音乐 NodeJS 版 API",
"scripts": {
"start": "node app.js",
......
const express = require("express");
const router = express();
const { createWebAPIRequest } = require("../util/util");
router.get("/", (req, res) => {
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
const data = {
name: req.query.name,
csrf_token: ""
};
createWebAPIRequest(
"music.163.com",
"/weapi/playlist/create",
"POST",
data,
cookie,
music_req => {
res.send(music_req);
},
err => res.status(502).send("fetch error")
);
});
module.exports = router;
const express = require("express");
const router = express();
const { createWebAPIRequest } = require("../util/util");
router.get("/", (req, res) => {
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
const data = {
id: req.query.id,
csrf_token: ""
};
const action = req.query.t == 1 ? "subscribe" : "unsubscribe";
createWebAPIRequest(
"music.163.com",
`/weapi/playlist/${action}`,
"POST",
data,
cookie,
music_req => {
res.send(music_req);
},
err => res.status(502).send("fetch error")
);
});
module.exports = router;
const express = require("express");
const router = express();
const { createWebAPIRequest } = require("../util/util");
router.get("/", (req, res) => {
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
const user_ids = req.query.user_ids;
const data = {
id: req.query.playlist,
type: "playlist",
msg: req.query.msg,
userIds: "[" + user_ids + "]",
csrf_token: ""
};
createWebAPIRequest(
"music.163.com",
`/weapi/msg/private/send`,
"POST",
data,
cookie,
music_req => res.send(music_req),
err => res.status(502).send("fetch error")
);
});
module.exports = router;
const express = require("express");
const router = express();
const { createWebAPIRequest } = require("../util/util");
router.get("/", (req, res) => {
const cookie = req.get("Cookie") ? req.get("Cookie") : "";
// user_id must be [id]
const user_ids = req.query.user_ids;
const data = {
type: "text",
msg: req.query.msg,
userIds: "[" + user_ids + "]",
csrf_token: ""
};
console.log(data);
createWebAPIRequest(
"music.163.com",
`/weapi/msg/private/send`,
"POST",
data,
cookie,
music_req => res.send(music_req),
err => res.status(502).send("fetch error")
);
});
module.exports = router;
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册