Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Vanishing597
NeteaseCloudMusicApi
提交
231f08bc
N
NeteaseCloudMusicApi
项目概览
Vanishing597
/
NeteaseCloudMusicApi
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
NeteaseCloudMusicApi
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
231f08bc
编写于
8月 29, 2018
作者:
N
Nzix
提交者:
GitHub
8月 29, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #9 from Binaryify/master
sync
上级
a1a32d1c
e0dd7a08
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
107 addition
and
37 deletion
+107
-37
CHANGELOG.MD
CHANGELOG.MD
+6
-0
README.MD
README.MD
+3
-0
app.js
app.js
+1
-1
docs/README.md
docs/README.md
+51
-8
package.json
package.json
+1
-1
router/check_music.js
router/check_music.js
+13
-13
router/search.js
router/search.js
+14
-14
router/video.js
router/video.js
+18
-0
未找到文件。
CHANGELOG.MD
浏览文件 @
231f08bc
# 更新日志
### 2.18.0 | 2018.08.29
新增获取视频数据接口,完善文档 #301,感谢 @izhenyuls
### 2.17.0 | 2018.08.28
新增登录状态查询接口 #302 ,完善文档,完善路由注册 #297
### 2.16.0 | 2018.08.09
-
Fixed #288,#289,#290
...
...
README.MD
浏览文件 @
231f08bc
...
...
@@ -92,6 +92,9 @@
70.
订阅的电台列表
71.
相关歌单推荐
72.
付费精选接口
73.
音乐是否可用检查接口
74.
登录状态
75.
获取视频数据
## 环境要求
...
...
app.js
浏览文件 @
231f08bc
...
...
@@ -45,7 +45,7 @@ const { createWebAPIRequest, request } = require("./util/util");
const
Wrap
=
fn
=>
(
req
,
res
)
=>
fn
(
req
,
res
,
createWebAPIRequest
,
request
);
// 同步读取 router 目录中的js文件, 根据命名规则, 自动注册路由
fs
.
readdirSync
(
"
./router/
"
).
reverse
().
forEach
(
file
=>
{
fs
.
readdirSync
(
path
.
resolve
(
__dirname
,
"
router
"
)
).
reverse
().
forEach
(
file
=>
{
if
(
/
\.
js$/i
.
test
(
file
)
===
false
)
{
return
;
}
...
...
docs/README.md
浏览文件 @
231f08bc
...
...
@@ -15,6 +15,12 @@
跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API
## 版本新特性
### 2.18.0 | 2018.08.29
新增获取视频数据接口
### 2.17.0 | 2018.08.28
新增登录状态查询接口
### 2.15.0 | 2018.07.30
新增相关歌单推荐和付费精选接口,增加歌手列表接口按首字母索引查找参数
...
...
@@ -109,7 +115,7 @@ banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评
48.
独家放送
49.
mv 排行
50.
获取 mv 数据
51.
播放 mv
51.
播放 mv
/视频
52.
排行榜
53.
歌手榜
54.
云盘
...
...
@@ -131,7 +137,9 @@ banner 接口 , 增加刷新登录接口 , 增加电台相关接口 , 补充评
70.
订阅的电台列表
71.
相关歌单推荐
72.
付费精选接口
73.
音乐是否可用检查接口
74.
登录状态
75.
获取视频数据
## 安装
...
...
@@ -269,8 +277,17 @@ Cookies
说明 : 调用此接口 , 可刷新登录状态
**调用例子 :**
`/login/refresh`
### 登录状态
说明 : 调用此接口,可获取登录状态
**接口地址 :**
`/login/status`
返回数据如下图:
![
数据
](
https://ws2.sinaimg.cn/large/006tNbRwgy1fup6q18kk6j316i0nw0wa.jpg
)
### 获取用户详情
说明 : 登陆后调用此接口 , 传入用户 id, 可以获取用户详情
...
...
@@ -588,6 +605,17 @@ category Code 取值:
返回数据如下图 :
![
音乐 url
](
https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/%E9%9F%B3%E4%B9%90%20url.png
)
### 音乐是否可用
说明: 调用此接口,传入歌曲 id, 可获取音乐是否可用,返回
`{ success: true, message: 'ok' }`
或者
`{ success: false, message: '亲爱的,暂无版权' }`
**必选参数 :**
`id`
: 歌曲 id
**可选参数**
:
`br`
: 码率,默认设置了999000即最大码率,如果要 320k 则可设置为 320000,其他类推
**接口地址 :**
`/check/music`
**调用例子 :**
`/check/music?id=33894312`
### 搜索
说明 : 调用此接口 , 传入搜索关键词可以搜索该音乐 / 专辑 / 歌手 / 歌单 / 用户 ,
...
...
@@ -599,8 +627,8 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
**可选参数 :**
`limit`
: 返回数量 , 默认为 30
`offset`
: 偏移数量,用于分页 , 如
: 如 :( 页数 -1)
\*
30, 其中 30 为 limit 的值 , 默认为 0
`type`
: 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲
10: 专辑 100: 歌手
1000:
歌单
1002: 用户 1004: MV 1006: 歌词 1009: 电台
`type`
: 搜索类型;默认为 1 即单曲 , 取值意义 : 1: 单曲
, 10: 专辑, 100: 歌手,
1000:
歌单
, 1002: 用户, 1004: MV, 1006: 歌词, 1009: 电台, 1014: 视频
**接口地址 :**
`/search`
...
...
@@ -1139,7 +1167,7 @@ mp3url 不能直接用 , 可通过 `/music/url` 接口传入歌曲 id 获取具
说明 : 调用此接口 , 传入 mvid ( 在搜索音乐的时候传 type=1004 获得 ) , 可获取对应
MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等数据 , 其中 mv 视频
网易做了防盗链处理 ,
不能直接播放 , 需要播放的话需要调用 ' 播放 mv
' 接口
网易做了防盗链处理 ,
可能不能直接播放 , 需要播放的话需要调用 ' 播放 mv/视频
' 接口
**必选参数 :**
`mvid`
: mv 的 id
...
...
@@ -1151,13 +1179,28 @@ MV 数据 , 数据包含 mv 名字 , 歌手 , 发布时间 , mv 视频地址等
![
热门歌手
](
https://raw.githubusercontent.com/Binaryify/NeteaseCloudMusicApi/master/static/mv.png
)
### 播放 mv
### 获取视频数据
说明 : 调用此接口 , 传入视频的 id ( 在搜索音乐的时候传 type=1014 获得 ) , 可获取对应
视频数据,其中视频网易做了防盗链处理 , 可能不能直接播放 , 需要播放的话需要调用 ' 播放 mv/视频' 接口
**必选参数 :**
` id`
: 视频 的 id
**接口地址 :**
`/video`
**调用例子 :**
`/video?id=89ADDE33C0AAE8EC14B99F6750DB954D`
返回数据如下图 :
![
视频数据
](
https://ws1.sinaimg.cn/large/006tNbRwgy1fuqdv10p5rj31kw0da76y.jpg
)
### 播放 mv/视频
说明 : 调用此接口 , 传入 mv
地址 , 可播放 mv
, 也可将接口嵌入 video 标签使用 , 由
说明 : 调用此接口 , 传入 mv
/视频 地址 , 可播放 mv/视频
, 也可将接口嵌入 video 标签使用 , 由
于使用了 'pipe', 进度条无法通过拖动进度条控制进度 , 如有解决方案可提出 PR 或者自
行改造
**可选参数 :**
`url`
: mv 的 地址
**可选参数 :**
`url`
: mv
/视频
的 地址
**接口地址 :**
`/mv/url`
...
...
package.json
浏览文件 @
231f08bc
{
"name"
:
"NeteaseCloudMusicApi"
,
"version"
:
"2.1
6
.0"
,
"version"
:
"2.1
8
.0"
,
"description"
:
"网易云音乐 NodeJS 版 API"
,
"scripts"
:
{
"start"
:
"node app.js"
,
...
...
router/check_music.js
浏览文件 @
231f08bc
module
.
exports
=
(
req
,
res
,
createWebAPIRequest
,
request
)
=>
{
const
id
=
parseInt
(
req
.
query
.
id
)
;
const
br
=
parseInt
(
req
.
query
.
br
||
999000
)
;
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
"
)
:
""
;
csrf_token
:
''
}
const
cookie
=
req
.
get
(
'
Cookie
'
)
?
req
.
get
(
'
Cookie
'
)
:
''
createWebAPIRequest
(
"
music.163.com
"
,
"
/weapi/song/enhance/player/url
"
,
"
POST
"
,
'
music.163.com
'
,
'
/weapi/song/enhance/player/url
'
,
'
POST
'
,
data
,
cookie
,
music_req
=>
{
if
(
JSON
.
parse
(
music_req
).
code
==
200
)
{
return
res
.
send
({
success
:
true
,
message
:
"
ok
"
});
return
res
.
send
({
success
:
true
,
message
:
'
ok
'
})
}
return
res
.
send
({
success
:
false
,
message
:
"
亲爱的,暂无版权
"
});
return
res
.
send
({
success
:
false
,
message
:
'
亲爱的,暂无版权
'
})
},
err
=>
{
res
.
status
(
502
).
send
(
"
fetch error
"
);
res
.
status
(
502
).
send
(
'
fetch error
'
)
}
)
;
}
;
)
}
router/search.js
浏览文件 @
231f08bc
// 搜索
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),歌手(100),专辑(10),歌单(1000),用户(1002)
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
:
""
,
csrf_token
:
''
,
limit
,
type
,
s
:
keywords
,
offset
}
;
}
createWebAPIRequest
(
"
music.163.com
"
,
"
/weapi/search/get
"
,
"
POST
"
,
'
music.163.com
'
,
'
/weapi/search/get
'
,
'
POST
'
,
data
,
cookie
,
music_req
=>
res
.
send
(
music_req
),
err
=>
res
.
status
(
502
).
send
(
"
fetch error
"
)
)
;
}
;
err
=>
res
.
status
(
502
).
send
(
'
fetch error
'
)
)
}
router/video.js
0 → 100644
浏览文件 @
231f08bc
//video
module
.
exports
=
(
req
,
res
,
createWebAPIRequest
,
request
)
=>
{
const
cookie
=
req
.
get
(
'
Cookie
'
)
?
req
.
get
(
'
Cookie
'
)
:
''
const
videoId
=
req
.
query
.
id
const
data
=
{}
createWebAPIRequest
(
'
music.163.com
'
,
`/api/cloudvideo/playurl?ids=['
${
videoId
}
']&resolution=720`
,
'
POST
'
,
data
,
cookie
,
music_req
=>
{
res
.
send
(
music_req
)
},
err
=>
res
.
status
(
502
).
send
(
'
fetch error
'
)
)
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录