React + Mobx + Typescript 从0到1打造一款仿网易云音乐APP(一)—— 打造EggJS版API

8,367 阅读27分钟

引言

该项目会以 React 全家桶 (会使用 16.8 最新 API 及 hooks) 以及 mobx 数据流方案为基础打造的一款高质量的移动端音乐类 WebApp 。

涉及的技术栈主要有:

  • react v16.8 全家桶 (react,react-router) : 用于构建用户界面的 MVVM 框架
  • mobx 前端数据流方案
  • immutable: Facebook 历时三年开发出的进行持久性数据结构处理的库
  • axios: 用来请求后端 api 的数据。

此篇为第一篇,主要是 网易云 EggJs API 的实现。后面的数据都会源于网易云官方的数据。 网易云音乐 EggJs 版 API,github 地址,接口正在持续更新中,目前已经支持网易云音乐中的大部分接口,包含登录注册。

工作原理

跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API。

特别声明

本项目不提供线上 demo,请不要轻易信任使用他人提供的公开服务,以免发生安全问题,泄露自己的账号和密码

部分接口如登录接口不能调用太频繁 , 否则可能会触发 503 错误或者 ip 高频错误 ,若需频繁调用 , 需要准备 IP 代理池.

本项目仅供学习使用,请尊重版权,请勿利用此项目从事商业行为

EggJS 中间件实现

这里简要提一下 EggJs 的中间件。Egg 是基于 Koa 实现的,所以 Egg 的中间件形式和 Koa 的中间件形式是一样的,都是基于洋葱圈模型。

处理 cookie 中间件

/**
 * 处理cookie
 */
module.exports = () => {
  return async function (ctx, next) {
    const { response } = ctx;
    await next();
    response.append('Set-Cookie', response.body && response.body.cookie);
  };
};

错误处理中间件

module.exports = () => {
  return async function (ctx, next) {
    try {
      await next();
    } catch (error) {
      ctx.body = error.body;
      ctx.status = error.status;
    }
  };
};

包含接口

特别声明,接口示范使用以下格式

Method /xxx/:xxxx/xxx

@body:
{
	"***": "**********",
	"**"?: "*********" // ?代表可选
}

@param:
{
    "***": "********"
}

@query:
{
    "***": "***********",
    "***"?: "**********"
}

参数统一声明 limit : 返回数量 , 默认为 30 offset : 偏移数量,用于分页 , 如 :( 当前页码 -1)*30, 其中 30 为 limit 的值 , 默认为 0

1.登录模块

1.1 手机号登录

必选参数 :

phone: 手机号码
password: 密码

接口地址 :

/login/cellphone

可选参数 :

rememberLogin: 30天免登录,默认false

调用例子 :

POST /login/cellphone

@body:
{
	phone: "**********",
	password: "*****",
	rememberLogin?: true

}

1.2 邮箱登录

必选参数 :

email: 手机号码
password: 密码

接口地址 :

/login/email

可选参数 :

rememberLogin: 30天免登录,默认false

调用例子 :

POST /login/email

@body:
{
	email: "**********",
	password: "*****",
	rememberLogin: true
}

1.3 初始化昵称

必选参数 :

nickname: 昵称

接口地址 :

/login/init/profile

调用例子 :

POST /login/init/profile

@body
{
	nickname: "**********"
}

1.4 发送手机验证码

必选参数 :

cellphone: 手机号码

接口地址 :

/login/sms/captcha/send

可选参数 :

ctcode: 国家区号,默认86即中国

调用例子 :

POST /login/sms/captcha/send

// body
{
	ctcode?: "86",
	cellphone: "*******"
}

1.5 校验手机验证码

必选参数 :

cellphone: 手机号码
captcha: 验证码

接口地址 :

/login/sms/captcha/verify

可选参数 :

ctcode: 国家区号,默认86即中国

调用例子 :

POST /login/sms/captcha/verify

// body
{
	ctcode?: "86",
	cellphone: "*******",
	captcha: "****"
}

1.6 检测手机号码是否已注册

必选参数 :

cellphone: 手机号码

接口地址 :

/login/cellphone/check/exist

可选参数 :

countrycode: 国家码,用于国外手机号登陆,例如美国传入:1

调用例子 :

POST /login/cellphone/check/exist

// body
{
	countrycode?: "86",
	cellphone: "*******"
}

1.7 刷新登录

接口地址 :

/login/refresh

调用例子 :

GET / login / refresh;

1.8 获取登录状态

接口地址 :

/login/status

调用例子 :

GET / login / status;

1.9 退出登录

接口地址 :

/logout

调用例子 :

GET / logout;

2.用户模块

2.1 获取用户录音

说明 : 登陆后调用此接口,可获取用户创建的电台

必选参数 :

接口地址 :

/user/audios

可选参数 :

调用例子 :

GET / user / audios;

2.2 删除用户云盘歌曲

说明 : 登陆后调用此接口,可删除云盘歌曲

必选参数 :

ids: 歌曲id数组

接口地址 :

/user/cloud/song/del

可选参数 :

调用例子 :

DELETE /user/cloud/song/del

@body
{
    ids: ["****","****"]
}

2.3 获取用户云盘数据详情

说明: 登陆后调用此接口,传入云盘歌曲 ids,可获取云盘数据详情

必选参数 :

ids: 多个歌曲id用","分隔

接口地址 :

/user/cloud/songs/info

可选参数 :

调用例子 :

GET /user/cloud/songs/info

@query
{
	ids: "***,***"
}

2.4 获取云盘音乐列表

说明: 登陆后调用此接口 , 可获取云盘数据 , 获取的数据没有对应 url, 需要再调用一 次 /song/url 获取 url。

必选参数 :

接口地址 :

/user/cloud

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 , 如 :( 当前页码 -1)*30, 其中 30 为 limit 的值 , 默认为 0

调用例子 :

GET /user/cloud

// query
{
	limit?: 100,
	offset?: 1
}

2.5 获取用户信息

说明 : 登陆后调用此接口,可以获取用户详情

必选参数 :

接口地址 :

/user/info

可选参数 :

调用例子 :

GET / user / info;

2.6 获取用户电台

说明 : 登陆后调用此接口,可以获取用户电台

必选参数 :

cellphone: 手机号码

接口地址 :

可选参数 :

调用例子 :

GET / user / djs;

2.7 获取用户动态

说明 : 登陆后调用此接口,可以获取用户动态

必选参数 :

接口地址 :

/user/event

可选参数 :

limit : 返回数量 , 默认为 30
lasttime : 返回数据的 lasttime ,默认-1,传入上一次返回结果的 lasttime,将会返回下一页的数据

调用例子 :

GET /user/event

@query
{
	limit?: 30,
	lasttime: -1
}

2.8 获取用户粉丝

说明 : 登陆后调用此接口,可以获取用户粉丝列表

必选参数 :

接口地址 :

/user/followeds

可选参数 :

可选参数 : limit : 返回数量 , 默认为 30
lasttime : 返回数据的 lasttime ,默认-1,传入上一次返回结果的 lasttime,将会返回下一页的数据

调用例子 :

GET /user/followeds

@query
{
	limit?: 30,
	lasttime: -1
}

2.9 获取用户关注者

说明 : 登陆后调用此接口,可以获取用户关注列表

必选参数 :

接口地址 :

/user/follows

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 , 如 :( 当前页码 -1)*30, 其中 30 为 limit 的值 , 默认为 0

调用例子 :

GET /user/follows

@query
{
    limit?: 30,
    offset?: 1
}

2.10 获取用户播放列表

说明 : 登陆后调用此接口,可以获取用户歌单

必选参数 :

接口地址 :

/user/playlist

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 , 如 :( 当前页码 -1)*30, 其中 30 为 limit 的值 , 默认为 0

调用例子 :

GET /user/playlist

@query
{
    limit?: 30,
    offset?: 1
}

2.11 获取用户播放记录

说明:登陆后调用此接口,可获取用户播放记录

必选参数 :

接口地址 :

/user/playrecord

可选参数 :

type: type=1 时只返回周数据, type=0 时返回所有数据

调用例子 :

GET /user/playrecord

@query
{
	type?: 0
}

2.12 获取用户收藏计数

说明:登陆后调用此接口,可获取用户收藏计数

必选参数 :

接口地址 :

/user/subcount

可选参数 :

调用例子 :

GET / user / subcount;

2.13 更新用户信息

说明 : 登陆后调用此接口,传入相关信息,可以更新用户信息

必选参数 :

gender: 性别 0:保密 1:男性 2:女性

birthday: 出生日期,时间戳 unix timestamp

nickname: 用户昵称

province: 省份id // 可以调用/custom/citylist接口获取

city: 城市id // 可以调用/custom/citylist接口获取

signature:用户签名

接口地址 :

/user/info

可选参数 :

调用例子 :

PUT /user/info

// body
{
    gender: 0
    birthday: 134567788
    nickname: "***"
    province: 400022
    city: 2344554
    signature:"****"
}

2.14 获取用户操作记录

说明 : 登陆后调用此接口,可以获取用户操作记录

必选参数 :

接口地址 :

/user/logs

可选参数 :

调用例子 :

GET / user / logs;

2.15 获取用户 FM

说明 : 登陆后调用此接口,可以获取用户 FM

必选参数 :

接口地址 :

/user/fm

可选参数 :

调用例子 :

GET / user / fm;

2.16 获取用户推荐电台节目

说明 : 调用此接口 , 可获取推荐电台

必选参数 :

接口地址 :

/user/rec/djprogram

可选参数 :

调用例子 :

GET / user / rec / djprogram;

2.17 获取用户推荐 MV

说明 : 调用此接口 , 可获取推荐 MV

必选参数 :

接口地址 :

/user/rec/mv

可选参数 :

调用例子 :

GET / user / rec / mv;

2.18 获取用户推荐新歌

说明 : 调用此接口 , 可获取推荐新歌

必选参数 :

接口地址 :

/user/rec/newsong

可选参数 :

调用例子 :

GET / user / rec / newsong;

2.19 获取独家放送

说明 : 调用此接口 , 可获取独家放送

必选参数 :

接口地址 :

/user/privatecontent

可选参数 :

调用例子 :

GET / user / privatecontent;

2.20 获取用户推荐歌单

说明 : 调用此接口 , 可获取独独家推荐歌单

必选参数 :

接口地址 :

/user/rec/playlist

可选参数 :

limit:返回数量 , 默认为 30

调用例子 :

GET /user/rec/playlist

@query
{
	limit?: 30
}

3.专辑模块

3.1 获取专辑动态信息

说明 : 调用此接口 , 可获取专辑动态信息

必选参数 :

albumId: 专辑ID

接口地址 :

/album/:albumId/detail/dynamic

可选参数 :

调用例子 :

GET /album/:albumId/detail/dynamic

@param
{
	albumId: 12244
}

3.2 获取最新专辑

说明 : 调用此接口 , 可获取最新专辑

必选参数 :

接口地址 :

/album/latest

可选参数 :

调用例子 :

GET / album / latest;

3.3 收藏|取消收藏 专辑

说明 : 调用此接口 , 可收藏|取消收藏 专辑

必选参数 :

albumId:专辑ID
actionType: 操作类型,收藏:"sub" ,取消收藏:"unsub"

接口地址 :

/album/:albumId/sub/:actionType

可选参数 :

limit:返回数量 , 默认为 30

调用例子 :

POST /album/:albumId/sub/:actionType

@param
{
	albumId: "****",
	actionType: "sub"
}

3.4 获取收藏专辑列表

说明 : 调用此接口 , 可获取收藏专辑列表

必选参数 :

接口地址 :

/album/sublist

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 , 如 :( 当前页码 -1)*30, 其中 30 为 limit 的值 ,

调用例子 :

GET /album/sublist

@query
{
    offset?: 0,
	limit?: 30
}

3.5 获取专辑信息

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

albumId: 专辑ID

接口地址 :

/album/:albumId/info

可选参数 :

调用例子 :

GET /album/:albumId/info

@param
{
	albumId: "****"
}

4.歌手模块

4.1 获取歌手列表

说明 : 调用此接口 , 可获取歌手列表

必选参数 :

接口地址 :

/artist/list

可选参数 :

调用例子 :

GET /artist/list

@param
{
	limit?: 30,
	offset?: 1
	categoryCode: 1001,
	initial: 'a'
}

4.2 获取歌手简介

说明 : 调用此接口 , 可获取歌手简介

必选参数 :

artistId: 歌手ID

接口地址 :

/artist/:artistId/brief

可选参数 :

调用例子 :

GET /artist/:artistId/brief

@param
{
	artistId: "****"
}

4.3 获取歌手信息

说明 : 调用此接口 , 可获取歌手信息

必选参数 :

artistId: 歌手ID

接口地址 :

/artist/:artistId/info

可选参数 :

调用例子 :

GET /artist/:artistId/info

@param
{
	artistId: "****"
}

4.4 获取歌手专辑

说明 : 调用此接口 , 可获取歌手专辑

必选参数 :

artistId: 歌手ID

接口地址 :

/artist/:artistId/albums

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /artist/:artistId/albums

@param
{
	artistId: "****"
}
@query
{
    limit?: 30,
    offset: 1
}

4.5 获取歌手 MV

说明 : 调用此接口 , 可获取歌手 MV

必选参数 :

artistId: 歌手ID

接口地址 :

/artist/:artistId/mv

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /artist/:artistId/mv

@param
{
	artistId: "****"
}
@query
{
    limit?: 30,
    offset: 1
}

4.6 获取歌手 50 首流行歌曲

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

artistId: 歌手ID

接口地址 :

/artist/:artistId/top/song

可选参数 :

调用例子 :

GET /artist/:artistId/top/song

@param
{
	artistId: "****"
}

4.7 收藏|取消收藏歌手

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

artistId: 歌手ID
actionType: 操作类型,收藏:"sub",取消收藏:"unsub"

接口地址 :

/artist/:artistId/sub/:actionType

可选参数 :

调用例子 :

GET /artist/:artistId/sub/:actionType

@param
{
	artistId: "****",
	actionType: "sub"
}

4.8 获取订阅歌手列表

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

接口地址 :

/artist/sublist

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /artist/sublist

@query
{
    limit?: 30,
    offset?: 1
}

5.评论模块

5.1 获取资源评论

说明 : 调用此接口 , 可获取资源评论

必选参数 :

type: 资源类型,可选:
    专辑:"album",
    电台:"dj"
    歌曲:"music",
    MV:"mv",
    歌单:"playlist",
    视频:"video",
    动态:"event"
resourceId: 资源ID

接口地址 :

/comment/resource/:resourceId/comments

可选参数 :

limit: 取出评论数量 , 默认为 20
offset: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)*20, 其中 20 为 limit 的值
beforeTime: 分页参数,取上一页最后一项的time,获取下一页数据(获取超过5000条评论的时候需要用到)

调用例子 :

GET /comment/resource/:resourceId/hot/comments

@param {
    resourceId: "***"
}
@query
{
    limit?: 30,
    offset?: 1,
    type: "music",
    beforeTime: 0
}

5.2 获取资源热门评论

说明 : 调用此接口 , 可获取资源热门评论

必选参数 :

type: 资源类型,可选:
    专辑:"album",
    电台:"dj"
    歌曲:"music",
    MV:"mv",
    歌单:"playlist",
    视频:"video",
    动态:"event"
resourceId: 资源ID

接口地址 :

/comment/resource/:resourceId/hot/comments

可选参数 :

limit: 取出评论数量 , 默认为 20
offset: 偏移数量 , 用于分页 , 如 :( 评论页数 -1)*20, 其中 20 为 limit 的值
beforeTime: 分页参数,取上一页最后一项的time,获取下一页数据(获取超过5000条评论的时候需要用到)

调用例子 :

GET /comment/resource/:resourceId/hot/comments

@param {
    resourceId: "***"
}
@query
{
    limit?: 30,
    offset?: 1,
    type: "music",
    beforeTime: 0
}

5.3 获取资源云村热评

说明 : 调用此接口 , 可获取资源云村热评

必选参数 :

接口地址 :

/comment/hotwall/list

可选参数 :

调用例子 :

GET / comment / hotwall / list;

5.4 点赞 | 取消点赞 评论

说明 : 调用此接口 , 可点赞 | 取消点赞 评论

必选参数 :

resourceId: 资源ID
actionType: 操作类型,点赞:"like",取消点赞:"unlike"
commentId: 评论ID
type: 资源类型,可选:
    专辑:"album",
    电台:"dj"
    歌曲:"music",
    MV:"mv",
    歌单:"playlist",
    视频:"video",
    动态:"event"

接口地址 :

/comment/resource/:resourceId/like/:actionType

可选参数 :

调用例子 :

POST /comment/resource/:resourceId/like/:actionType

@param
{
    resourceId: "***",
    actionType: "like"
}
@body
{
   commentId: "***",
   type: "music"
}

5.5 发表资源评论

说明 : 调用此接口 , 可发表资源评论

必选参数 :

resourceId: 资源ID
content: 评论内容
type: 资源类型,可选:
    专辑:"album",
    电台:"dj"
    歌曲:"music",
    MV:"mv",
    歌单:"playlist",
    视频:"video",
    动态:"event"

接口地址 :

/comment/resource/:resourceId/comment/send

可选参数 :

调用例子 :

POST /comment/resource/:resourceId/comment/send

@body
{
    resourceId: "***",
    content: "***",
    type: "music"
}

5.5 删除资源评论

说明 : 调用此接口 , 可删除资源评论

必选参数 :

resourceId: 资源ID
commentId: 评论ID
type: 资源类型,可选:
    专辑:"album",
    电台:"dj"
    歌曲:"music",
    MV:"mv",
    歌单:"playlist",
    视频:"video",
    动态:"event"

接口地址 :

/comment/resource/:resourceId/comment

可选参数 :

调用例子 :

DELETE /comment/resource/:resourceId/comment

@param
{
    resourceId: "***"
}
@body {
    commentId: "***",
    type: "music"
}

5.6 回复资源评论

说明 : 调用此接口 , 可回复资源评论

必选参数 :

resourceId: 资源ID
commentId: 评论ID
content: 评论内容
type: 资源类型,可选:
    专辑:"album",
    电台:"dj"
    歌曲:"music",
    MV:"mv",
    歌单:"playlist",
    视频:"video",
    动态:"event"

接口地址 :

/comment/resource/:resourceId/comment/:commentId/reply

可选参数 :

调用例子 :

POST /comment/resource/:resourceId/comment/:commentId/reply

@param
{
    resourceId: "***",
    commentId: "***"
}
@body {
    content: "****",
    type: "music"
}

6.MV 模块

6.1 获取 MV 列表

说明 : 调用此接口 , 可获取 MV 列表

必选参数 :

接口地址 :

/mv/list

可选参数 :

调用例子 :

GET /mv/list

@query
{
    area?: 0,
    type?: 0,
    order?: 0,
    offset?: 1,
    limit?: 30,
}

6.2 获取 MV 详情

说明 : 调用此接口 , 可获取 MV 详

必选参数 :

mvId: MV ID

接口地址 :

/mv/:mvId/detail

可选参数 :

调用例子 :

GET /mv/:mvId/detail

@param
{
    mvId: "***"
}

6.3 获取网易出品 MV

说明 : 调用此接口 , 可获取网易出品 MV

必选参数 :

接口地址 :

/mv/exclusive/rcmd

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /mv/exclusive/rcmd

@query
{
    limit?: 30,
    offset?: 1
}

6.4 获取最新 MV

说明 : 调用此接口 , 可获取最新 MV

必选参数 :

接口地址 :

/mv/latest

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /mv/latest

@query
{
    limit?: 30,
    offset?: 1
}

6.5 收藏 | 取消收藏 MV

说明 : 调用此接口 , 可收藏 | 取消收藏 MV

必选参数 :

mvId: MV ID
actionType: 操作类型,收藏:"sub",取消收藏:"unsub"

接口地址 :

/mv/:mvId/sub/:actionType

可选参数 :

调用例子 :

GET /mv/:mvId/sub/:actionType

@param
{
    mvId: "***",
    actionType: "sub"
}

6.6 获取 MV 收藏列表

说明 : 调用此接口 , 获取 MV 收藏列表

必选参数 :

接口地址 :

/mv/sublist

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /mv/sublist

@query
{
    limit?: 30,
    offset?: 1
}

6.7 获取 MV URL

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

mvId: MV ID
resolution: 分辨率,默认1080

接口地址 :

/mv/url

可选参数 :

调用例子 :

GET /mv/url

@query
{
    mvId: "***",
    resolution?: 1080
}

7.电台模块

7.1 获取电台 banner

说明 : 调用此接口 , 可获取电台 banner

必选参数 :

接口地址 :

/dj/banner

可选参数 :

调用例子 :

GET / dj / banner;

7.2 获取电台非热门分类

说明 : 调用此接口 , 可获取电台非热门分类

必选参数 :

接口地址 :

/dj/category/excludehot

可选参数 :

调用例子 :

GET / dj / category / excludehot;

7.3 获取电台推荐分类

说明 : 调用此接口 , 可获取电台推荐分类

必选参数 :

接口地址 :

/dj/category/rec

可选参数 :

调用例子 :

GET / dj / category / rec;

7.4 获取电台分类列表

说明 : 调用此接口 , 可获取电台分类列表

必选参数 :

接口地址 :

/dj/category/list

可选参数 :

调用例子 :

GET / dj / category / list;

7.5 获取热门电台

说明 : 调用此接口 , 可获取热门电台

必选参数 :

接口地址 :

/dj/hot

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/hot

@query
{
    limit?: 30,
    offset?: 1
}

7.6 获取付费电台

说明 : 调用此接口 , 可获取付费电台

必选参数 :

接口地址 :

/dj/paygift

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/paygift

@query
{
    limit?: 30,
    offset?: 1
}

7.7 获取电台 24 小时节目榜

说明 : 调用此接口 , 可获取电台 24 小时节目榜

必选参数 :

接口地址 :

/dj/program/toplist/hours

可选参数 :

limit : 返回数量 , 默认为 30

调用例子 :

GET /dj/program/toplist/hours

@query
{
    limit?: 30
}

7.8 获取电台节目榜单

说明 : 调用此接口 , 可获取电台节目榜单

必选参数 :

接口地址 :

/dj/program/toplist

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/program/toplist

@query
{
    limit?: 30,
    offset?: 1
}

7.9 获取电台节目列表

说明 : 调用此接口 , 可获取电台节目列表

必选参数 :

djId: 电台ID

接口地址 :

/dj/:djId/program/list

可选参数 :

asc: 排序方式,默认为 false (新 => 老 ) 设置 true 可改为 老 => 新
limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/:djId/program/list

@param
{
    djId: "***"
}
@query
{
    asc?: false,
    limit?: 30,
    offset?: 1
}

7.10 获取分类热门电台

说明 : 调用此接口 , 可获取分类热门电台

必选参数 :

categoryId: 分类ID

接口地址 :

/dj/category/:categoryId/djs

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/category/:categoryId/djs

@param
{
    categoryId: "***"
}
@query
{
    limit?: 30,
    offset?: 1
}

7.11 精选分类电台列表

说明 : 调用此接口 , 可获取精选分类电台列表

必选参数 :

typeId: 类型ID,数字
  有声书: 10001,
  知识技能: 453050,
  商业财经: 453051,
  人文历史: 11,
  外语世界: 13,
  亲子宝贝: 14,
  创作|翻唱: 2001,
  音乐故事: 2,
  3D|电子: 10002,
  相声曲艺: 8,
  情感调频: 3,
  美文读物: 6,
  脱口秀: 5,
  广播剧: 7,
  二次元: 3001,
  明星做主播: 1,
  娱乐|影视: 4,
  科技科学: 453052,
  校园|教育: 4001,
  旅途|城市: 12,

接口地址 :

/dj/type/:typeId/rec/djs

可选参数 :

调用例子 :

GET /dj/type/:typeId/rec/djs

@param
{
    typeId: 1
}

7.12 获取推荐电台

说明 : 调用此接口 , 可获取推荐电台

必选参数 :

接口地址 :

/dj/rec/djs

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET / dj / rec / djs;

7.13 订阅 | 取消订阅 电台

说明 : 调用此接口 , 订阅 | 取消订阅 电台

必选参数 :

djId: 电台ID
actionType: 操作类型,订阅:"sub" 取消订阅:"unsub"

接口地址 :

/dj/:djId/sub/:actionType

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

POST /dj/:djId/sub/:actionType

@param
{
    djId: "***",
    actionType: "sub"
}

7.14 获取订阅电台列表

说明 : 调用此接口 , 可获取订阅电台列表

必选参数 :

接口地址 :

/dj/sublist

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/sublist

@query
{
    limit?: 30,
    offset?: 1
}

7.15 获取今日优选电台

说明 : 调用此接口 , 可获取今日优选电台

必选参数 :

接口地址 :

/dj/totay/perfered

可选参数 :

offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/totay/perfered

@query
{
    offset?: 1
}

7.16 获取 24 小时榜电台

说明 : 调用此接口 , 可获取 24 小时榜电台

必选参数 :

接口地址 :

/dj/toplist/hours

可选参数 :

limit : 返回数量 , 默认为 30

调用例子 :

GET /dj/toplist/hours

@query
{
    limit?: 30

7.17 电台新人榜

说明 : 调用此接口 , 可获取电台新人榜

必选参数 :

接口地址 :

/dj/toplist/newcomer

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/toplist/newcomer

@query
{
    limit?: 30,
    offset?: 1
}

7.18 付费精品

说明 : 调用此接口 , 可付费精品

必选参数 :

接口地址 :

/dj/toplist/pay

可选参数 :

limit : 返回数量 , 默认为 30

调用例子 :

GET /dj/toplist/pay

@query
{
    limit?: 30
}

7.19 流行热榜

说明 : 调用此接口 , 可获取流行热榜

必选参数 :

接口地址 :

/dj/toplist/popular

可选参数 :

limit : 返回数量 , 默认为 30

调用例子 :

GET /dj/toplist/popular

@query
{
    limit?: 30
}

7.20 电台热榜

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

接口地址 :

/dj/toplist

可选参数 :

type:  榜单类型, 0 为新晋电台榜,1 为热门电台榜,默认为0
limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /dj/toplist

@query
{
    type: 0,
    limit?: 30,
    offset?: 1
}

7.21 获取电台节目详情

说明 : 调用此接口 , 可获取电台节目详情

必选参数 :

djId: 电台ID

接口地址 :

/dj/:djId/program/detail

可选参数 :

调用例子 :

GET /dj/:djId/program/detail

@param
{
    djId: "***"
}

7.22 获取电台详情

说明 : 调用此接口 , 可获取电台详情

必选参数 :

djId: 电台ID

接口地址 :

/dj/:djId/detail

可选参数 :

调用例子 :

GET /dj/:djId/detail

@param
{
    djId: "***"
}

8.排行榜模块

8.1 专辑排行榜

说明 : 调用此接口 , 可获取专辑排行榜

必选参数 :

接口地址 :

/top/album

可选参数 :

area: 'ALL' | 'ZH' | 'EA' | 'KR' | 'JP'
limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /top/album

@query
{
    area?: 'ZH',
    limit?: 30,
    offset?: 1
}

8.2 获取热门歌手

说明 : 调用此接口 , 获取热门歌手

必选参数 :

接口地址 :

/top/artist

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /top/artist

@query
{
    limit?: 30,
    offset?: 1
}

8.3 获取新歌列表

说明 : 调用此接口 , 获取新歌列表

必选参数 :

接口地址 :

/top/list

可选参数 :

调用例子 :

GET /top/list

@query
{
    type: 0
}

8.4 获取 MV 排行榜

说明 : 调用此接口 , 获取 MV 排行榜

必选参数 :

接口地址 :

/top/mv

可选参数 :

调用例子 :

GET /top/mv

@query
{
    area: '华语',
    limit?: 30,
    offset?: 1
}

8.5 获取高质量歌单排行榜

说明 : 调用此接口 , 获取高质量歌单排行榜

必选参数 :

接口地址 :

/top/quality/playlist

可选参数 :

limit : 返回数量 , 默认为 30
lasttime: 分页参数,取上一页最后一个歌单的 updateTime 获取下一页数据,默认为0
category: 分类
  可选类型: 全部,华语,欧美,韩语,日语,粤语,小语种,运动,ACG,影视原声,流行,摇滚,后摇,古风,民谣,轻音乐,电子,器乐,说唱,古典,爵士

调用例子 :

GET /top/quality/playlist

@query
{
    category: '华语'
    limit?: 30,
    lasttime: 0,
}

8.6 获取歌单排行榜

说明 : 调用此接口 , 获取歌单排行榜

必选参数 :

接口地址 :

/top/playlist

可选参数 :

order: 可选值为 'new''hot', 分别对应最新和最热 , 默认为 'hot'

category: ,分类," 华语 "" 古风 "" 欧美 "" 流行 ", 默认为 "全部",可从歌单分类接口获取(/playlist/category/list)

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /top/playlist

@query
{
    order?: 'new',
    category?: '古风'
    limit?: 30,
    offset?: 1
}

8.7 新歌榜单

说明 : 调用此接口 , 可获取新歌榜单

必选参数 :

接口地址 :

top/songs

可选参数 :

area:'全部' | '华语' | '欧美' | '日本' | '韩国

调用例子 :

GET /top/songs

@query
{
    area: '华语'
}

8.8 获取歌手榜

说明 : 调用此接口 , 获取歌手榜

必选参数 :

接口地址 :

/toplist/artist

可选参数 :

type: 数字,可选1-4
  1: '华语',
  2: '欧美',
  3: '日本',
  4: '韩国',

调用例子 :

GET /toplist/artist

@query
{
   type: 2
}

8.9 所有榜单内容摘要

说明 : 调用此接口 , 获取所有榜单内容摘要

必选参数 :

接口地址 :

/toplist/detail

可选参数 :

调用例子 :

GET / toplist / detail;

8.10 榜单介绍

说明 : 调用此接口 , 可获取榜单介绍

必选参数 :

接口地址 :

/toplist/introduction

可选参数 :

调用例子 :

GET / toplist / introduction;

9.视频模块

9.1 获取视频信息

说明 : 调用此接口 , 获取视频信息

必选参数 :

videoId:视频ID

接口地址 :

/video/:videoId/detail

可选参数 :

调用例子 :

GET /video/:videoId/detail

@query
{
    videoId: "***"
}

9.2 获取视频分组列表

说明 : 调用此接口 , 获取视频分组列表

必选参数 :

接口地址 :

/video/group/list

可选参数 :

调用例子 :

GET /video/group/list;

9.3 获取视频分组下的视频

说明 : 调用此接口 , 获取视频分组下的视频

必选参数 :

groupId: 分组ID

接口地址 :

/video/group/videos

可选参数 :

resolution:分辨率,默认1080
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /video/group/videos

@query
{
    groupId: "***",
    resolution?: 1080,
    offset?: 1
}

9.4 收藏|取消收藏 视频

说明 : 调用此接口 , 收藏|取消收藏 视频

必选参数 :

videoId:视频ID
actionType:操作类型,收藏:"sub",取消收藏: "unsub"

接口地址 :

/video/:videoId/sub/:actionType

可选参数 :

调用例子 :

POST /video/:videoId/sub/:actionType

@query
{
    videoId: "***",
    actionType: "sub"
}

9.5 获取视频 URL

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

videoIds: 视频ID,多个以逗号分隔

接口地址 :

/video/urls

可选参数 :

resolution:分辨率,默认1080

调用例子 :

GET /video/urls

@query
{
    videoIds: "***,***",
    resolution?: 1080
}

10.歌单模块

10.1 获取歌单分类列表

说明 : 调用此接口 , 获取歌单分类列表

必选参数 :

接口地址 :

/playlist/category/list

可选参数 :

调用例子 :

GET / playlist / category / list;

10.2 创建歌单

说明 : 调用此接口 , 创建歌单

必选参数 :

name: 歌单名字,
privacy:0 为普通歌单,10 为隐私歌单

接口地址 :

/playlist/create

可选参数 :

调用例子 :

POST /playlist/create

@query
{
    name: "***",
    privacy: 0
}

10.3 删除歌单

说明 : 调用此接口 , 删除歌单

必选参数 :

pid:歌单ID

接口地址 :

/playlist/delete

可选参数 :

调用例子 :

DELETE /playlist/delete

@body
{
    pid: "***"
}

10.4 更新歌单描述

说明 : 调用此接口 , 更新歌单描述

必选参数 :

pid: 歌单ID
description: 描述

接口地址 :

/playlist/des/update

可选参数 :

调用例子 :

PUT /playlist/des/update

@query
{
    pid: "***",
    description: "***"
}

10.5 获取歌单详情

说明 : 调用此接口 , 获取歌单详情

必选参数 :

pid: 歌单ID

接口地址 :

/playlist/detail

可选参数 :

subNum:  歌单最近的 subNum 个收藏者

调用例子 :

GET /playlist/detail

@query
{
    pid: "****",
    subNum?: 10
}

10.6 获取热门歌单

说明 : 调用此接口 , 获取热门歌单

必选参数 :

接口地址 :

/playlist/hot

可选参数 :

调用例子 :

GET / playlist / hot;

10.7 更新歌单名

说明 : 调用此接口 , 更新歌单名

必选参数 :

pid: 歌单ID
name: 歌单名

接口地址 :

/playlist/name/update

可选参数 :

调用例子 :

PUT /playlist/name/update

@query
{
    pid: "***",
    name: "***"
}

10.8 订阅 | 取消订阅 歌单

说明 : 调用此接口 , 订阅 | 取消订阅 歌单

必选参数 :

pid: 歌单ID
actionType: 订阅:'subscribe' 取消订阅: 'unsubscribe'

接口地址 :

/playlist/:pid/sub/:actionType

可选参数 :

调用例子 :

POST /playlist/:pid/sub/:actionType

@param
{
  pid: "***",
  actionType: "subscribe"
}

10.9 获取歌单订阅者

说明 : 调用此接口 , 获取歌单订阅者

必选参数 :

pid: 歌单ID

接口地址 :

/playlist/:pid/subscribers

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

GET /playlist/:pid/subscribers

@param
{
    pid: "***"
}
@query
{
    limit?: 30,
    offset?: 1
}

10.10 更新歌单标签

说明 : 调用此接口 , 更新歌单标签

必选参数 :

pid: 歌单ID
tags: 歌单标签

接口地址 :

/playlist/:pid/tags/update

可选参数 :

limit : 返回数量 , 默认为 30
offset : 偏移数量,用于分页 ,  如 :( 页数 -1)*30, 其中 30 为 limit 的值,默认为 0

调用例子 :

PUT /playlist/:pid/tags/update

@query
{
   pid: "***"
}
@body
{
    tags: "***"
}

10.11 添加歌单歌曲

说明 : 调用此接口 , 添加歌单歌曲

必选参数 :

pid: 歌单ID
songIds:歌曲ID数组

接口地址 :

/playlist/:pid/songs/add

可选参数 :

调用例子 :

POST /playlist/:pid/songs/add

{
   pid: "***"
}
@body
{
    songIds: ["***", "****"]
}

10.12 删除歌单歌曲

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

pid: 歌单ID
songIds:歌曲ID数组

接口地址 :

/playlist/:pid/songs/del

可选参数 :

调用例子 :

DELETE /playlist/:pid/songs/del

@param
{
   pid: "***"
}
@body
{
    songIds: ["***", "****"]
}

10.13 更新歌单

说明 : 调用此接口 , 可获取专辑信息

必选参数 :

pid: 歌单ID
description:描述
tags:标签

接口地址 :

/playlist/:pid/update

可选参数 :

调用例子 :

PUT /playlist/:pid/update

{
   pid: "***"
}
@body
{
    description: "***",
    tags: "***"
}

结语

目前的实现的接口主要是这些,接口暂时未经过严格的测试,如有问题,请给我提 issue。贡献出来,是方便大家一起学习,禁止商用。下期预告,webpack 环境配置。关注我的微信公众号,共同成长。

@author: WaterMan