登录淘宝开放平台后,创建应用,选择‘百川无线应用’,获得appKey。
创建成功后,登录淘宝开放平台,点击已创建应用的‘应用管理’按钮,在页面内的‘功能场景’栏中申请‘天猫精灵内容库API’权限(如未发现此API权限,请联系对接人员线下申请)。
创建技能链接:https://open.bot.tmall.com/console/skill/list
选择技能类型为“内容”,选择相应技能模板,并填写好其他信息。点击下一步,并在“API接入”信息填写界面按要求补充信息:
待填写信息包括:
1. 第一步淘宝开放平台所创建应用的appKey,必填,可修改;
2. 接入方自定义身份标识ID(数字字母下划线),必填项,值唯一,不可修改;
3. 接入方名称,必填项,不可修改;
4. 播放链接查询回调接口,非必填(如需要通过回调查询播放链接,请参考下述播放链接回调说明);
填写完成后保存。
等待步骤一中权限申请审核通过,即可通过淘宝开放平台“应用管理-SDK下载-服务端SDK”页面下载SDK包进行接口开发。
按照 类目-专辑-音频 的结构关系,设计如下接口。其中类目信息需要三方平台自行对应到‘AliGenie开发者平台’中已有的类目信息(如需新增类目需要提交审核),专辑和音频结构信息由三方平台自行组织好后传入。
API入参字段说明
详见淘宝开放平台天猫精灵内容库API接口调用说明。
其中关于extend_info字段的填写说明如下所示。
extendInfo作为扩展字段,为JSON格式,详细字段信息如下:
一、 版权相关信息,请在extendInfo中填写limitRegion字段
字段名称 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
limitRegion | String | 否 | 限制播放区域 | 美国 |
expiryTime | Long | 否 | 过期时间,unix时间戳形式,为从1970年1月1日到指定时间经历的秒数,单位秒 | 1515758372 |
canDistribute | boolean | 否 | 是否允许二次分发,即是否允许外发给其他平台使用 | 是 |
limitDevice | String | 否 | 限制播放的终端类型,例如内容只限制在手机端播放 | 故事 |
二、 内容分级
字段名称 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
contentRate | String | 否 | 内容分级,暂填内容适合人群的年龄段信息 | 0-18 |
三、 extendInfo作为各个不同类型内容输入的扩展字段,根据不同的内容类型输入字段有所不同:
字段名称 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
region | String | 否 | 新闻所属地域 | 杭州 |
content | String | 否 | 新闻内容,文字版内容,长度300 | 文本内容 |
sub_source | String | 否 | 新闻子来源 | 新华社 |
is_tts | Boolean | 是 | 是否是TTS转换的音频 | false |
字段名称 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
applyAgeStart | int | 类目选择为‘儿歌’、‘故事’、‘百科’、‘课文(教辅)’、‘英语’、‘育儿知识’时必填 | 开始年龄 | 1 |
applyAgeEnd | int | 类目选择为‘儿歌’、‘故事’、‘百科’、‘课文(教辅)’、‘英语’、‘育儿知识’时必填 | 结束年龄 | 12 |
applyAgeGroup | long | 类目选择为‘儿歌’、‘故事’、‘百科’、‘课文(教辅)’、‘英语’、‘育儿知识’时必填 | 年龄层,及年龄单位,目前支持‘岁’、‘月’两种 | 岁 |
字段名称 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
ar_pic | JSONArray | 是 | AR图片信息 | [ { “cdnUrl”: “http://example.com/arpic/a.jpg", ”position“: ”left“, ”pageNum“: 1 }, { ”cdnUrl“: ”http://example.com/arpic/b.jpg“, ”position“: ”right“, ”pageNum": 1 } ] |
has_sublicense | boolean | 是 | 是否可转授权 | true |
no_sublicense_url | String | 否 | 无转授权时的播放链接 | alipays://platformapi/startapp?appId=20000067| |
其中cdnUrl为AR绘本图片地址链接,position标明是绘本的左页或者右页,pageNum表示绘本的页数。
API响应字段说明
成功响应:
字段名称 | 类型 | 说明 | 示例 |
---|---|---|---|
ret_code | int | 状态码(200正常,其他,其他异常) | 200 |
ret_msg | String | 状态码说明 | success |
失败响应:
字段名称 | 类型 | 说明 | 示例 |
---|---|---|---|
code | int | 平台错误码 | 15 |
msg | String | 平台错误信息 | Remote service error |
sub_code | int | 具体业务返回错误码 | 400 |
sub_msg | String | 具体业务返回错误信息 | openContents[0].playUrls[0].type must match “audio|video” |
播放链接查询回调接口是在内容方不提供固定的播放地址,需要实时获取播放地址的情况下需要填写的,由用户选填。调用该接口时将会使用平台私钥对请求进行签名,接入方需要使用平台公钥对签名进行验证。
播放链接查询回调接口需接收以下请求参数:
字段名称 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
sourceId | string | 是 | 三方平台在AliGenie开放平台登记的sourceId | test_source |
albumId | string | 存在此字段时必填 | 节目在三方平台的原始专辑id(此值是通过内容推送接口推送至开放平台) | 10 |
contentId | string | 是 | 节目在三方平台的原始id(此值是通过内容推送接口推送至开放平台) | 1001 |
requestTime | long | 是 | 请求时间戳,unix时间戳,单位毫秒 | 1546852336 |
randomId | int | 是 | 请求随机数 | 21121 |
signature | string | 是 | 签名信息 | signature |
播放链接查询接口应当返回包含播放链接信息的List类型,数据格式如下:
字段名称 | 类型 | 必填 | 说明 | 示例 |
---|---|---|---|---|
bitrate | int | 是 | 音频码率 | 128 |
type | String | 是 | 音视频类型 | audio/video |
expire | int | 是 | 播放链接在多长时间内有效,如每次播放都需实时查询,请填写-1,单位:秒 | 100 |
url | url | 是 | 音频可播放链接 | http://example.fm/favoursong.mp3 |
组合字符串sourceId + albumId(若存在) + contentId + requestTime + randomId,开放平台将对该字符串使用平台私钥进行SHA1withRSA签名加密,对加密结果进行Base64编码得到签名字段signature连同其它参数一同传递给接入方。服务端收到请求后,请使用开放平台提供的公钥对签名进行验证。(为了防止重复请求攻击,服务端可对请求参数requestTime及randomId进行识别,当收到的requestTime值比上一个小10秒则认为非法,其次每个请求的requestTime与randomId拼接后的字符串必须是唯一的)
签名验证代码示例(Java)
Signature mySig = Signature.getInstance("SHA1withRSA"); String pbkeyStr = ""; X509EncodedKeySpec keySpec = new X509EncodedKeySpec(Base64.getDecoder().decode(pbkeyStr)); PublicKey pb = f.generatePublic(keySpec); mySig.initVerify(pb); mySig.update(parametersStr.getBytes("UTF-8")); if(mySig.verify(Base64.getDecoder().decode(signature))){ //TODO }
新闻类目 | 对应Id |
---|---|
国际 | 80010001 |
国内 | 80010002 |
军事 | 80010003 |
社会 | 80010004 |
体育 | 80010005 |
娱乐 | 80010006 |
财经 | 80010007 |
科技 | 80010008 |
汽车 | 80010009 |
房产 | 80010010 |
时尚 | 80010011 |
生活 | 80010012 |
旅游 | 80010013 |
游戏 | 80010014 |
人文 | 80010015 |
城市本地 | 80010016 |
搞笑 | 80010017 |
儿童类目 | 对应Id |
---|---|
儿歌 | 80011001 |
童谣 | 80011002 |
国学 | 80011003 |
故事 | 80011004 |
百科 | 80011005 |
古诗 | 80011006 |
宋词 | 80011007 |
课文(教辅) | 80011008 |
英语 | 80011009 |
育儿知识 | 80011010 |
绘本类目 | 对应Id |
---|---|
精选绘本 | 80020001 |
英语学习 | 80020002 |
历史故事 | 80020003 |
科技介绍 | 80020004 |
组词卡片 | 80020005 |
娱乐类目 | 对应Id |
---|---|
游戏动漫 | 80018001 |
体育 | 80018002 |
影视 | 80018003 |
星座 | 80018004 |
综艺 | 80018005 |
二次元 | 80018006 |
笑话 | 80018008 |
儿童笑话 | 80018009 |
有声书类目 | 对应Id |
---|---|
人物传记 | 80012001 |
佛教 | 80012002 |
军事 | 80012003 |
历史 | 80012004 |
古风言情 | 80012005 |
官场 | 80012006 |
恐怖惊悚 | 80012007 |
悬疑灵异 | 80012008 |
推理刑侦 | 80012009 |
文学名著 | 80012010 |
武侠仙侠 | 80012011 |
玄幻 | 80012012 |
现代言情 | 80012013 |
社科经管 | 80012014 |
穿越 | 80012015 |
评书 | 80012016 |
都市现代 | 80012017 |
青春校园 | 80012018 |
非书籍 | 80012019 |
玄幻奇幻 | 80012020 |
科幻 | 80012021 |
游戏竞技 | 80012022 |
广播剧 | 80012023 |
其他 | 80012024 |
鬼故事 | 80012025 |
音乐类目 | 对应Id |
---|---|
音乐 | 80021001 |