服务端 API
本文介绍获取声网内容中心的版权音乐所需的 RESTful API。获取版权音乐的具体步骤可参考获取版权音乐。
调用说明
本节介绍调用 API 时的配额限制、数据格式及公共参数。
配额限制
声网音乐内容中心服务 QPS(每秒请求数)默认限制为 700,歌曲检索 QPS 默认限制为 100。如需提升 QPS,请联系技术支持。
数据格式
所有的请求都发送给域名:api.sd-rtn.com
。
- 请求:请求的格式详见下面各个 API 中的示例
- 响应:响应内容的格式为 JSON
所有的请求 URL 和请求包体内容都区分大小写。
公共参数
内容中心 RESTful API 的公共参数及描述如下:
请求参数
参数 | 类型 | 描述 |
---|---|---|
appid | (必填)String | 你的项目使用的 App ID,该 App ID 需要已开通内容中心权限。 |
requestId | (必填)String | 本次请求的唯一标识。
|
响应参数
参数 | 类型 | 描述 |
---|---|---|
code | Int64 | 响应状态码,0 表示请求成功。 |
msg | String | 返回消息名称,ok 表示请求成功。 |
requestId | String | 请求唯一标识,与请求包体中的 requestId 一致。 |
ext | String | 预留字段 |
功能
获取曲库所有歌曲列表
你可以调用该方法获取曲库中所有歌曲的列表。
HTTP 请求
- 方法:GET
- 接入点:
cn/v1.0/projects/{appid}/ktv-service/api/serv/songs
路径参数
appid
:详见公共参数。
查询参数
参数 | 类型 | 描述 |
---|---|---|
requestId | (必填)String | 本次请求的唯一标识。详见公共参数。 |
pageType | (可选)Int64 | 翻页方式:
|
pageCode | (可选) Int64 | 作为翻页锚点的歌曲编号。
|
size | (可选)Int64 | 每页歌曲显示的最大数量。默认为 10 ,取值范围为 [1, 1000]。 |
status | (可选) Int64 | 歌曲状态:
|
vendorId | (可选) Int64 | 歌曲版权使用区域:
|
highPartType | (可选) Int64 | 副歌片段类型:
|
HTTP 响应
如果响应状态码为 0
,表示请求成功,响应包体中包含以下字段:
字段 | 类型 | 描述 |
---|---|---|
data | JSON | 信息详情。 |
msg | String | 本次请求返回的消息。ok 表示请求成功。 |
requestId | String | 请求 ID。本次请求的唯一标识。 |
ext | String | 预留字段 |
data.pageType | Int64 | 翻页方式:
|
data.pageCode | Int64 | 翻页锚点的歌曲编号。 |
data.size | Int | 每页歌曲显示的最大数量。 |
data.count | Int | 本次请求返回的歌曲数量。 |
data.list | JSON Array | 当前曲库中所有的歌曲列表。 |
data.list.songCode | Int64 | 歌曲编号。 |
data.list.name | String | 歌曲名称。 |
data.list.singer | String | 歌手名称。 |
data.list.poster | String | 歌手封面图片 URL。 |
data.list.lyricType | Number Array | 歌词格式类型:
|
data.list.type | Int64 | 歌曲资源类型:
|
data.list.duration | Int64 | 歌曲时长(秒)。 |
data.list.status | Int64 | 歌曲状态:
|
data.list.updateTime | Int64 | 歌曲更新的 Unix 时间戳(秒)。 |
data.list.releaseTime | String | 歌曲发布时间。 |
data.list.vendorId | Int64 | 歌曲版权使用区域:
|
data.list.pitchType | Int64 | 歌曲是否支持演唱评分功能:
|
data.list.highPartType | Int64 | 副歌片段类型:
|
data.list.highPart | Array | 歌曲高潮片段 |
data.list.highPart.highStartTime | Int64 | 歌曲高潮片段的开始时间点,单位毫秒。 |
data.list.highPart.highEndTime | Int64 | 歌曲高潮片段的结束时间点,单位毫秒。 |
其他响应字段及说明详见公共参数。
如果返回的 HTTP 状态码非 0
,表示请求失败。你可以参考响应状态码汇总表了解可能的原因。
请求示例
curl 'https://api.sd-rtn.com/cn/v1.0/projects/{appid}/ktv-service/api/serv/songs?requestId=lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V&pageType=0&pageCode=6246262727281830&size=2' \
-H 'Authorization: {AuthorizationHeader}'
响应示例
{
"code": 0,
"msg": "ok",
"requestId": "lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V",
"ext": "",
"data": {
"pageType": 0,
"size": 2,
"pageCode": 6246262727281830,
"count": 2,
"list": [
{
"songCode": 624626272728XXXX,
"name": "龙拳",
"singer": "周杰伦",
"poster": "https://accpic.sd-rtn.com/pic/release/jpg/1/7a8941/ChmFZ1S0immAVtSDAAODVRzMNHg454.jpg",
"duration": 274,
"lyricType": [
0,
1
],
"type": 1,
"releaseTime": "2014/11/27 9:32",
"status": 1,
"updateTime": 1638141088,
"vendorId": 3,
"pitchType": 1,
"lyricType": [
0,
1
],
"highPartType":3,
"highPart": [{
"highStartTime": 121122,
"highEndTime": 134213
}, {
"highStartTime": 154534,
"highEndTime": 162134
}],
},
{
"songCode": 624626272728XXXX,
"name": "最长的电影",
"singer": "周杰伦",
"poster": "https://accpic.sd-rtn.com/pic/release/jpg/1/7a8941/ChmFZ1S0immAVtSDAAODVRzMNHg454.jpg",
"duration": 230,
"lyricType": null,
"type": 1,
"releaseTime": "2014/11/27 9:32",
"status": 1,
"vendorId": 3,
"pitchType": 1,
"updateTime": 1635229782,
"highPartType":3,
"highPart": [{
"highStartTime": 121221,
"highEndTime": 132132
}, {
"highStartTime": 154534,
"highEndTime": 162134
}],
}
]
}
}
获取增量歌曲列表
你可以调用该方法定期查询曲库中增量的歌曲。建议每隔 1 小时查询一次。
HTTP 请求
- 方法:GET
- 接入点:
cn/v1.0/projects/{appid}/ktv-service/api/serv/songs-incr
路径参数
appid
:详见公共参数。
查询参数
参数 | 类型 | 描述 |
---|---|---|
requestId | (必填)String | 本次请求的唯一标识。详见公共参数。 |
lastUpdateTime | (必填) Int64 | 最近一次更新曲库的 Unix 时间戳(秒)。 |
page | (可选) Int64 | 目标页编号。默认为 1 。取值范围为 [1, (232-1)]。 |
size | (可选) Int64 | 目标页歌曲显示的最大数量。默认为 10,取值范围为 [1, 1000]。 |
status | (可选)Int | 歌曲状态:
|
vendorId | (可选) Int64 | 歌曲版权使用区域:
|
highPartType | (可选) Int64 | 副歌片段类型:
|
注意
- 调用该方法,你会得到指定页更新时间大于
lastUpdateTime
的歌曲列表。 - 如果你是第一次调用该方法,声网建议你将
lastUpdateTime
设置为0
,即获取曲库全部歌曲列表;如果不是第一次调用该方法,声网建议你将lastUpdateTime
设置为前一次调用该方法获得的响应字段中updateTime
的最大值。 - 你需要将每个
page
的lastUpdateTime
设置为一致,否则会遗漏增量歌曲。
HTTP 响应
如果响应状态码为 0
,表示请求成功,响应包体中包含以下字段:
字段 | 类型 | 字段说明 |
---|---|---|
data | JSON | 信息详情。 |
msg | String | 本次请求返回的消息,ok 表示请求成功。 |
requestId | String | 请求 ID。本次请求的唯一标识。 |
ext | String | 预留字段。 |
data.page | Int64 | 当前页编号。 |
data.size | Int64 | 当前页歌曲显示的最大数量。 |
data.count | Int64 | 本次请求返回的歌曲数量。 |
data.list | JSON Array | 本次请求的歌曲列表。 |
data.list.songCode | Int64 | 歌曲编号。 |
data.list.name | String | 歌曲名称。 |
data.list.singer | String | 歌手名称。 |
data.list.poster | String | 歌手封面图片 URL。 |
data.list.lyricType | Number Array | 歌词格式类型:
|
data.list.type | Int | 歌曲资源类型:
|
data.list.duration | Int64 | 歌曲时长(秒)。 |
data.list.status | Int | 歌曲状态:
|
data.list.updateTime | Int64 | 歌曲更新的 Unix 时间戳(秒)。 |
data.list.releaseTime | String | 歌曲发布时间。 |
data.list.vendorId | Int64 | 歌曲版权使用区域:
|
data.list.highPartType | Int64 | 副歌片段类型:
|
data.list.pitchType | Int64 | 歌曲是否支持演唱评分功能:
|
data.list.highPart | Array | 歌曲高潮片段 |
data.list.highPart.highStartTime | Int64 | 歌曲高潮片段的开始时间点,单位毫秒。 |
data.list.highPart.highEndTime | Int64 | 歌曲高潮片段的结束时间点,单位毫秒。 |
其他响应字段及说明详见公共参数。
如果返回的 HTTP 状态码非 0
,表示请求失败。你可以参考响应状态码汇总表了解可能的原因。
请求示例
curl 'https://api.sd-rtn.com/cn/v1.0/projects/{appid}/ktv-service/api/serv/songs-incr?requestId=lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V&pageType=0&lastUpdateTime=1635229837&page=1&size=2' \
-H 'Authorization: {AuthorizationHeader}'
响应示例
{
"code": 0,
"msg": "ok",
"requestId": "lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V",
"ext": "",
"data": {
"size": 2,
"page": 1,
"count": 2,
"list": [{
"songCode": 624626272729XXXX,
"name": "没有目的地爱了",
"singer": "杨千嬅",
"poster": "https://accpic.sd-rtn.com/pic/release/jpg/1/a35420/ChmFaVS9H2uARX7BAAFV0nstAAM724.jpg",
"duration": 267,
"lyricType": null,
"type": 2,
"releaseTime": "2014/12/15 22:13",
"vendorId": 3,
"pitchType": 1,
"status": 1,
"updateTime": 1635229838,
"highPartType":3,
"highPart": [{
"highStartTime": 121221,
"highEndTime": 132132
}, {
"highStartTime": 154534,
"highEndTime": 162134
}],
}, {
"songCode": 624626272729XXXX,
"name": "热血青年",
"singer": "杨千嬅",
"poster": "https://accpic.sd-rtn.com/pic/release/jpg/1/a35420/ChmFaVS9H2uARX7BAAFV0nstAAM724.jpg",
"duration": 411,
"lyricType": [
0
],
"type": 1,
"releaseTime": "2015/1/12 11:00",
"vendorId": 3,
"pitchType": 1,
"status": 1,
"updateTime": 1635229838,
"highPartType":3,
"highPart": [{
"highStartTime": 121221,
"highEndTime": 132132
}, {
"highStartTime": 154534,
"highEndTime": 162134
}],
}]
}
}
获取热歌榜单类型
你可以调用该方法获取热歌榜单名称和类型。
HTTP 请求
- 方法:GET
- 接入点:
/cn/v1.0/projects/{appid}/ktv-service/api/serv/hot-type
路径参数
appid
:详见公共参数。
查询参数
参数 | 类型 | 描述 |
---|---|---|
requestId | (必填)String | 本次请求的唯一标识。详见公共参数。 |
HTTP 响应
如果响应状态码为 0
,表示请求成功,响应包体中包含以下字段:
字段 | 类型 | 字段说明 |
---|---|---|
code | Int64 | 响应状态码,0 表示请求成功。 |
msg | String | 返回消息名称,ok 表示请求成功。 |
requestId | String | 请求唯一标识,与请求包体中的 requestId 一致。 |
ext | String | 预留字段。 |
data | JSON | 信息详情。 |
data.list | JSON Array | 热歌榜单信息列表。 |
data.list.hotName | String | 热歌榜单名称。 |
data.list.hotType | Int64 | 热歌榜单类型。 |
其他响应字段及说明详见公共参数。
如果返回的 HTTP 状态码非 0
,表示请求失败。你可以参考状态码汇总表了解可能的原因。
请求示例
curl 'https://api.sd-rtn.com/cn/v1.0/projects/{appid}/ktv-service/api/serv/hot-type?requestId=lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V' \
-H 'Authorization: {AuthorizationHeader}'
响应示例
{
"code": 0,
"msg": "ok",
"requestId": "lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V",
"ext": "",
"data": {
list:[{
"hotName": "声网榜单",
"hotType": 1
}, {
"hotName": "新歌榜",
"hotType": 2
}]
}
}
获取热歌榜单详情
你可以调用该方法获取热歌榜单详情。
- 热歌为日点播次数大于或等于 10 次的歌曲。
- 调用该方法获取的热歌榜单仅显示日点播次数前 100 的热歌,如果热歌数量少于 100 首则按实际数量显示。
- 每日 05:00 统计 0:00 之前的数据。
HTTP 请求
- 方法:GET
- 接入点:
/cn/v1.0/projects/{appid}/ktv-service/api/serv/song-hot
路径参数
appid
:详见公共参数。
查询参数
参数 | 类型 | 描述 |
---|---|---|
requestId | (必填)String | 本次请求的唯一标识。详见公共参数。 |
hotType | (可选)Int64 | 榜单类型:
|
HTTP 响应
如果响应状态码为 0
,表示请求成功,响应包体中包含以下字段:
字段 | 类型 | 字段说明 |
---|---|---|
data | JSON | 信息详情。 |
msg | String | 返回消息名称,ok 表示请求成功。 |
requestId | String | 请求唯一标识,与请求包体中的 requestId 一致。 |
data.list | JSON Array | 当前曲库中所有的歌曲列表。 |
data.list.songCode | Int64 | 歌曲编号。 |
data.list.num | Int64 | 点播次数。 |
ext | String | 预留字段。 |
data.list.name | String | 音乐资源名称。 |
data.list.singer | String | 歌手名。 |
data.list.poster | String | 音乐资源海报的下载地址。 |
data.list.lyricType | JSON Array | 支持的歌词类型:
|
data.list.pitchType | Int64 | 歌曲是否支持演唱评分功能:
|
data.list.type | Int64 | 音乐资源类型:
|
data.list.duration | Int64 | 音乐资源总时长(秒)。 |
data.list.releaseTime | String | 音乐资源发布的时间。 |
data.list.highPartType | Int64 | 副歌片段类型:
|
data.list.highPart | JSON Array | 歌曲高潮片段。 |
data.list.highPart.highStartTime | Int64 | 歌曲高潮片段的开始时间点,单位毫秒。 |
data.list.highPart.highEndTime | Int64 | 歌曲高潮片段的结束时间点,单位毫秒。 |
其他响应字段及说明详见公共参数。
如果返回的 HTTP 状态码非 0
,表示请求失败。你可以参考状态码汇总表了解可能的原因。
请求示例
curl 'https://api.sd-rtn.com/cn/v1.0/projects/{appid}/ktv-service/api/serv/song-hot?requestId=lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V&hotType=1' \
-H 'Authorization: {AuthorizationHeader}'
响应示例
{
"code": 0,
"msg": "ok",
"requestId": "lzTZsruXVL3VUi2UVHHDTPE0PRvF8P4V",
"ext": "",
"data": {
"list": [{
"num":200,
"songCode": 624626272728XXXX,
"name": "龙拳",
"singer": "周杰伦",
"poster": "https://accpic.sd-rtn.com/pic/release/jpg/1/7a8941/ChmFZ1S0immAVtSDAAODVRzMNHg454.jpg",
"duration": 274,
"lyricType": [
0,
1
],
"type": 1,
"releaseTime": "2014/11/27 9:32",
"highPartType":3,
"highPart": [{
"highStartTime": 121221,
"highEndTime": 132132
}, {
"highStartTime": 154534,
"highEndTime": 162134
}],
}, {
"num":100,
"songCode": 624626272728XXXX,
"name": "七里香",
"singer": "周杰伦",
"poster": "https://accpic.sd-rtn.com/pic/release/jpg/1/7a8941/ChmFZ1S0immAVtSDAAODVRzMNHg454.jpg",
"duration": 274,
"lyricType": [
0,
1
],
"type": 1,
"releaseTime": "2014/11/27 9:32",
"highPartType":3,
"highPart": [{
"highStartTime": 121221,
"highEndTime": 132132
}, {
"highStartTime": 154534,
"highEndTime": 162134
}],
}, {
"num":10,
"songCode": 624626272728XXXX,
"name": "告白气球",
"singer": "周杰伦",
"poster": "https://accpic.sd-rtn.com/pic/release/jpg/1/7a8941/ChmFZ1S0immAVtSDAAODVRzMNHg454.jpg",
"duration": 274,
"lyricType": [
0,
1
],
"type": 1,
"releaseTime": "2014/11/27 9:32",
"highPartType":3,
"highPart": [{
"highStartTime": 121221,
"highEndTime": 132132
}, {
"highStartTime": 154534,
"highEndTime": 162134
}],
}]
}
}
保障 REST 服务高可用
为保障 REST 服务的高可用,避免因区域网络故障造成的服务不可用,声网提供切换域名的方案。
切换域名操作
- 根据你的业务服务器所在地设置主域名:
- 业务服务器 DNS 地址位于中国大陆时,设置主域名为 api.sd-rtn.com。
- 业务服务器 DNS 地址位于中国大陆以外的国家或地区时,设置主域名为 api.agora.io。
- 当使用主域名发起 RESTful API 请求失败时,使用该域名重试一次。
- 如果步骤 2 的重试依然失败,使用备用的主域名重试:
- 如果当前设置的主域名为 api.sd-rtn.com,备用的主域名指 api.agora.io。
- 如果当前设置的主域名为 api.agora.io,备用的主域名指 api.sd-rtn.com。
- 如果步骤 3 的重试依然失败,使用与当前解析区域相邻的区域域名重试。 举例说明:假设你的业务服务器位于欧洲,你设置主域名为 api.agora.io,而且业务服务器解析主域名解析到德国。德国位于欧洲中部 api-eu-central-1.agora.io,查域名信息表可知,相邻区域为欧洲西部 api-eu-west-1.agora.io 或 api-eu-west-1.sd-rtn.com。因此,出现网络故障且步骤 2、3 的重试失败时,请使用 api-eu-west-1.agora.io 或 api-eu-west-1.sd-rtn.com 域名重试。
注意事项
- 为避免重试请求过于频繁,超过声网服务所规定的 QPS,声网建议你使用退避策略。例如,第一次等待 1 秒后重试、第二次等待 3 秒后重试、第三次等待 6 秒后重试。
- 如果是网络问题而非 DNS 解析域名问题导致的请求失败,声网建议你跳过步骤 3,直接进行步骤 4。
- 切换至区域域名前,请确保你使用的业务(例如,云端录制、云信令、频道管理等 REST 服务)在该区域有部署服务。
域名信息
主域名 | 区域域名 | 地理区域 |
---|---|---|
api.sd-rtn.com | api-us-west-1.sd-rtn.com | 美国西部 |
api-us-east-1.sd-rtn.com | 美国东部 | |
api-ap-southeast-1.sd-rtn.com | 亚太东南 | |
api-ap-northeast-1.sd-rtn.com | 亚太东北 | |
api-eu-west-1.sd-rtn.com | 欧洲西部 | |
api-eu-central-1.sd-rtn.com | 欧洲中部 | |
api-cn-east-1.sd-rtn.com | 中国华东 | |
api-cn-north-1.sd-rtn.com | 中国华北 | |
api.agora.io | api-us-west-1.agora.io | 美国西部 |
api-us-east-1.agora.io | 美国东部 | |
api-ap-southeast-1.agora.io | 亚太东南 | |
api-ap-northeast-1.agora.io | 亚太东北 | |
api-eu-west-1.agora.io | 欧洲西部 | |
api-eu-central-1.agora.io | 欧洲中部 | |
api-cn-east-1.agora.io | 中国华东 | |
api-cn-north-1.agora.io | 中国华北 |
参考信息
本节介绍其他相关信息。
状态码汇总表
HTTP 请求成功后,你还需要对照响应包体里的 code
字段查看实际响应状态。详细说明见下表。
code | 说明 | 建议措施 |
---|---|---|
0 | 正常。 | \ |
1000 | 查询数据结果为空。 | \ |
1001 | 操作异常。 | 请稍后重试。 |
1002 | App ID 异常,如过期、关闭,该 App ID 未开通内容中心等,或白名单中的 IP 地址不合法。 | 请检查你的 IP 地址并确保你的 App ID 已开通内容中心权限。 |
1003 | 系统异常。 | 请联系技术支持。 |
1004 | 系统繁忙。 | 请稍后再试。 |
1005 | 参数错误。 | 请检查你的参数设置并重试。 |
1008 | 没有该歌曲资源权限。 | 请联系技术支持开通权限。 |
1009 | 该歌曲资源已下架。 | 请定期歌曲资源状态。 |