讯飞智文OpenAPI协议文档
可用配置:
- appid: xxx
- secret: xxx
接口与鉴权
应用申请
提供工单开通接口权限
接口域名
zwapi.xfyun.cn
获取签名
在HTTP请求头 header 中设置参数:
appId
,timestamp
,signature
String appId = "应用ID";
String secret = "应用的秘钥";
long timestamp = System.currentTimeMillis()/1000;
String signature = ApiAuthAlgorithm.getSignature(appId, secret, timestamp);
request.setHeader("appId",appId);
request.setHeader("timestamp",timestamp);
request.setHeader("signature",signature);
字段名 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
appId | String | 应用ID | Y | |
timestamp | Long | 时间戳,单位: s,与服务端时间相差五分钟之内 | Y | |
signature | String | 签名 | Y |
DEMO
ApiAuthAlgorithm.class
鉴权类
public class ApiAuthAlgorithm {
private static final char[] MD5_TABLE = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
* 获取签名
*
* @param appId 签名的key
* @param secret 签名秘钥
* @return 返回签名
*/
public String getSignature(String appId, String secret, long ts) {
try {
String auth = md5(appId + ts);
return hmacSHA1Encrypt(auth, secret);
} catch (SignatureException e) {
return null;
}
}
/**
* sha1加密
*
* @param encryptText 加密文本
* @param encryptKey 加密键
* @return 加密
*/
private String hmacSHA1Encrypt(String encryptText, String encryptKey) throws SignatureException {
byte[] rawHmac;
try {
byte[] data = encryptKey.getBytes(StandardCharsets.UTF_8);
SecretKeySpec secretKey = new SecretKeySpec(data, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(secretKey);
byte[] text = encryptText.getBytes(StandardCharsets.UTF_8);
rawHmac = mac.doFinal(text);
} catch (InvalidKeyException e) {
throw new SignatureException("InvalidKeyException:" + e.getMessage());
} catch (NoSuchAlgorithmException e) {
throw new SignatureException("NoSuchAlgorithmException:" + e.getMessage());
}
return new String(Base64.encodeBase64(rawHmac));
}
private String md5(String cipherText) {
try {
byte[] data = cipherText.getBytes();
// 信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// MessageDigest对象通过使用 update方法处理数据, 使用指定的byte数组更新摘要
mdInst.update(data);
// 摘要更新之后,通过调用digest()执行哈希计算,获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char[] str = new char[j * 2];
int k = 0;
for (byte byte0 : md) { // i = 0
str[k++] = MD5_TABLE[byte0 >>> 4 & 0xf]; // 5
str[k++] = MD5_TABLE[byte0 & 0xf]; // F
}
// 返回经过加密后的字符串
return new String(str);
} catch (Exception e) {
return null;
}
}
}
错误码
错误码 | 描述 | 处理方式 |
---|---|---|
20002 | 参数错误 | 确认接口入参 |
20005 | 大纲生成失败 | 查看是否存在敏感词汇,尝试重新生成 |
20006 | PPT生成失败 | PPT导出错误,请重新生成或联系技术人员 |
20007 | 鉴权错误 | 检查鉴权信息 |
9999 | 系统异常 | 确认鉴权信息、请求方式、请求参数是否有误,或联系技术人员排查相关日志 |
接口列表
1 PPT生成(直接根据用户输入要求,获得最终PPT)
1.1 接口描述:
基于用户提示、要求等相关内容生成PPT,字数不得超过8000字。
1.2 接口地址:
https://zwapi.xfyun.cn/api/aippt/create
1.3 请求查询参数:
POST,application/json
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
query | String | 用户生成PPT要求(最多8000字) | Y | |
create_model | String | PPT生成类型:文本生成、话题生成、程序判断(默认) | N | auto |
theme | String | PPT生成主题:随机主题(默认)、紫影幽蓝…… | N | auto |
business_id | String | 业务ID(非必传)- 业务方自行决定是否使用 | N | |
author | String | PPT作者名:用户自行选择是否设置作者名 | N | 智文 |
is_card_note | Bool | 是否生成PPT演讲备注 | N | false |
1.4 可选参数列表:
-
create_model:
-
auto: 自动,由程序自行判断;
-
topic:话题生成(建议150字以内)
-
text:文本生成,基于长文本生成
-
-
theme(详细信息可通过主题查询接口获得):
-
auto:自动,随机主题
-
purple:紫色主题
-
green:绿色主题
-
lightblue:清逸天蓝
-
taupe:质感之境
-
blue:星光夜影
-
telecomRed:炽热暖阳
-
telecomGreen:幻翠奇旅
-
1.5 请求响应:
{
"code":0,
"desc":"成功",
"data":{
"sid":"zhiwen@xxxxxxxxxxxxxxxxxxxxx", // 请求唯一ID
"coverImgSrc":"xxxxxxxxxxxxxx", // 封面地址
"title" : "xxx", // 主标题
"subTitle" : "xxx" // 副标题
}
}
1.6 响应描述
响应字段 | 类型 | 描述 |
---|---|---|
code | int | 错误码 |
desc | string | 错误详情 |
data.sid | string | 请求唯一id |
data.CoverImgSrc | string | PPT封面图链接 |
data.title | string | PPT主标题 |
data.subTitle | string | PPT副标题 |
2 大纲生成
2.1 接口地址:
https://zwapi.xfyun.cn/api/aippt/createOutline
2.2 请求参数查询
POST,application/json
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
query | String | 用户生成PPT要求(最多8000字) | Y | |
create_model | String | PPT生成类型:文本生成、话题生成、程序判断(默认) | N | auto |
theme | String | PPT生成主题:随机主题(默认)、紫影幽蓝…… | N | auto |
business_id | String | 业务ID(非必传)- 业务方自行决定是否使用 | N | |
author | String | PPT作者名:用户自行选择是否设置作者名 | N | 智文 |
is_card_note | Bool | 是否生成PPT演讲备注 | N | false |
is_cover_img | Bool | 是否生成封面图 | N | false |
2.3 请求响应
{
"flag": true,
"code": 0,
"desc": "成功",
"count": null,
"data": {
"sid": "本次请求sid",
"coverImgSrc": "xxx(封面图下载链接)",
"title": "主标题",
"subTitle": "副标题",
"outline": {
"id": 68133,
"title": "主标题",
"subTitle": "副标题",
"fileUrl": "",
"fileType": 0,
"chapters": [
{
"id": 68189,
"chapterTitle": "第一章 xxx",
"fileUrl": "",
"fileType": 0,
"chartFlag": false,
"searchFlag": false,
"chapterContents": [
{
"id": 68221,
"chapterTitle": "1.1 xxx",
"fileUrl": "",
"fileType": 0,
"chartFlag": false,
"searchFlag": false,
"chapterContents": null
},
{
"id": 68223,
"chapterTitle": "1.2 xxx",
"fileUrl": "",
"fileType": 0,
"chartFlag": false,
"searchFlag": false,
"chapterContents": null
}
]
},
{
"id": 68179,
"chapterTitle": "第二章 xxx",
"fileUrl": "",
"fileType": 0,
"chartFlag": false,
"searchFlag": false,
"chapterContents": [
{
"id": 68245,
"chapterTitle": "2.1 xxx",
"fileUrl": "",
"fileType": 0,
"chartFlag": false,
"searchFlag": false,
"chapterContents": null
},
{
"id": 68247,
"chapterTitle": "2.2 xxx",
"fileUrl": "",
"fileType": 0,
"chartFlag": false,
"searchFlag": false,
"chapterContents": null
}
]
}
],
"end": "",
"fileId": null
}
}
}
2.4 响应描述
响应字段 | 类型 | 描述 |
---|---|---|
code | int | 错误码 |
desc | string | 错误详情 |
data.sid | string | 请求唯一id |
data.CoverImgSrc | string | PPT封面图链接 |
data.title | string | PPT主标题 |
data.subTitle | string | PPT副标题 |
outline.title | string | PPT主标题 |
outline.subTitle | string | PPT副标题 |
outline.chapters.chapterTitle | String | 章节标题 |
outline.end | String | 结尾 |
2.5 大纲结构体说明
public class OutlineVo {
// 大纲ID
private Long id;
// 主标题
private String title;
// 副标题
private String subTitle;
// 二级标题
private List<Chapter> chapters;
// 参考文件相关,暂未开放能力
private String fileUrl = "";
Integer fileType = 0;
private String end = "";
private String fileId;
public static class Chapter {
// 大纲ID,若为新增大纲则设为NULL
Long id;
// 章节、子章节标题名称
String chapterTitle;
// 参考文件相关,能力暂未开放
String fileUrl = "";
Integer fileType = 0;
Boolean chartFlag = false;
Boolean searchFlag = false;
List<Chapter> chapterContents = null;
}
}
3 通过sid和修改后大纲生成PPT
3.1 接口地址:
https://zwapi.xfyun.cn/api/aippt/createBySid
3.2 请求查询参数:
POST,application/json
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
sid | String | 已生成大纲后,相应返回的请求唯一id | Y | |
outline | String | 修改后大纲(若本次不传,则根据sid获得第一次生成的大纲内容进行ppt生成) | N | 首次生成的大纲 |
3.3 请求响应与说明
见1.5、1.6小节说明
4 通过大纲生成PPT
4.1 接口地址:
https://zwapi.xfyun.cn/api/aippt/createByOutline
4.2 请求查询参数:
POST,application/json
名称 | 类型 | 描述 | 必须 | 默认值 |
---|---|---|---|---|
query | String | 用户生成PPT要求(最多8000字) | Y | |
outline | String | 大纲内容(不得超过10个一级大纲) | Y | |
create_model | String | PPT生成类型:文本生成、话题生成、程序判断(默认) | N | auto |
theme | String | PPT生成主题:随机主题(默认)、紫影幽蓝…… | N | auto |
business_id | String | 业务ID(非必传)- 业务方自行决定是否使用 | N | |
author | String | PPT作者名:用户自行选择是否设置作者名 | N | 智文 |
is_card_note | Bool | 是否生成PPT演讲备注 | N | false |
4.3 请求响应与说明
见1.5、1.6小节说明
5 PPT进度查询
5.1 接口地址:
https://zwapi.xfyun.cn/api/aippt/progress?sid={}
5.2 请求查询参数:
注:该接口设置限流,三秒访问一次
GET
名称 | 类型 | 描述 | 必须 |
---|---|---|---|
sid | String | 请求唯一ID | Y |
{
"code":0,
"desc":"成功",
"data":{
"process" : 0 // 生成进度:30-大纲生成完毕、70-PPT生成完毕、100-PPT导出完毕
"pptId" : xxxx // pptId
"pptUrl" : xxxx // ppt下载链接
}
}
6 PPT主题列表查询
6.1 接口地址:
https://zwapi.xfyun.cn/api/aippt/themeList
6.2 请求查询参数:
GET
{
"flag": true,
"code": 0,
"desc": "成功",
"count": null,
"data": [
{
"key": purple, // 主题名
"name": "紫影幽蓝",
"thumbnail": "xxx", // 缩略图
}
]
}
7 扣量说明
- 基于query直接生成ppt:扣除10点量,1个并发,若需要增加备注,则增加5点量;
- 基于query生成大纲:扣除2点量1个并发
- 基于sid,获取大纲(可修改)生成ppt:扣除8点量1个并发, 若在表中记录该sid生成的ppt需要生成备注,额外扣除5点量;
- 基于大纲生成ppt:8点量,若需要生成备注:额外扣除5点量
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...