讯飞星火智能生成PPTAPi接口说明文档 python示例demo

接口调用流程图

常见问题:
1、新版和旧版相比有什么变化? 新版提供了100+主题模板,并且联网搜索、ai配图等功能
2、新版的模板全部免费吗? 新版的100+主题模板全部免费使用,不再额外扣量
3、新版和旧版的接口可以混用吗? 新版的接口地址与旧版不同,虽然两者的调用流程相似,但新版接口和旧版接口不能混用
4、如何查看旧版接口文档地址? 联系上方技术支持,获取旧版接口文档,注意:旧版接口已不再维护

#接口调用示例

部分开发语言Demo如下,其他开发语言请参照文档进行开发,欢迎大家到讯飞开放平台社区交流集成经验。

智能PPT生成(新版)Demo Java语言
智能PPT生成(新版)Demo Python语言

#接口与鉴权

#接口域名

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",str(timestamp));
request.setHeader("signature",signature);
字段名 类型 描述 必须 默认值
appId String 应用ID Y
timestamp String 时间戳,单位: 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主题列表查询

1.1 接口地址:

https://zwapi.xfyun.cn/api/ppt/v2/template/list

1.2 请求示例:

{
    "style": "简约",
    "color": "红色",
    "industry": "教育培训",
    "pageNum": 1,
    "pageSize": 10
}

1.3 请求查询参数:

POST,application/json

注意:请求体不能为空,至少有一项。

名称 类型 描述 必须 默认值
style String 风格类型: "简约","卡通","商务","创意","国风","清新","扁平","插画","节日" N
color String 颜色类型: "蓝色","绿色","红色","紫色","黑色","灰色","黄色","粉色","橙色" N
industry String 行业类型: "科技互联网","教育培训","政务","学院","电子商务","金融战略","法律","医疗健康","文旅体育","艺术广告","人力资源","游戏娱乐" N
pageNum Integer 页数 N 1
pageSize Integer 每页数量 N 10

1.4 响应参数:

{
    "flag": true,
    "code": 0,
    "desc": "成功",
    "count": null,
    "data": {
        "total": 110,
        "records": [
            {
                "templateIndexId": "202407171E27C9D",
                "pageCount": 5,
                "type": "system_template",
                "color": "蓝色",
                "industry": "教育培训",
                "style": "卡通",
                "detailImage": "{\"titleCoverImageLarge\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_W7Ct1g1723193798025-04123504173892696.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM3OTk7YWxnbz1obWFjLXNoYTI1NjtzaWc9TDFIc01LbjFuNnNhSlZLZ21MK0VNdXhnSTBkdzBzM0VnbjdpL290dWd2VT0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"titleCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_WAl06h1723193799949-04329013386342242.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDA7YWxnbz1obWFjLXNoYTI1NjtzaWc9YTFSbVJGaWpqQ3lYendNVzhHZVdvVXFQWStxNVNzN0ppck9lczZnMU00dz0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"catalogueCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_AA2WnD1723193801664-05558363837592131.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDE7YWxnbz1obWFjLXNoYTI1NjtzaWc9Ymw0UVlick9jTjVVU1hkMHU2QXFjSUZTM2JtNmVWUk9FLytkc2NWU0JjUT0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"chapterCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_5Vs2cK1723193803147-042723137781772724.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDM7YWxnbz1obWFjLXNoYTI1NjtzaWc9RmxFQTk5RWY3RElSUkEwMWQ2QUFmTi9aTFR6YVNKeU55MVJ5NUc3T05QWT0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"contentCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_FVPl8y1723193804494-07550240915105764.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDQ7YWxnbz1obWFjLXNoYTI1NjtzaWc9cTJJeE5sYTdaTk52VlBnRTAvbjQrZDRBeWptUDdERStxc3BvRWorQTZRZz0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\",\"endCoverImage\":\"https://sgw-dx.xf-yun.com/api/v1/sparkdesk/19052329831_DV5MCg1723193805753-07957067972264273.jpeg?authorization=c2ltcGxlLWp3dCBhaz1zcGFya2Rlc2s4MDAwMDAwMDAwMDE7ZXhwPTMyOTk5OTM4MDY7YWxnbz1obWFjLXNoYTI1NjtzaWc9RlIraDdTMFJkUVhoc1BkMCs4dldNSWRGNkNZdGlFZ3V6TlZlTkJGK1NLMD0=&x_location=7YfmxI7B7uKO7jlRxIftd6Mbdo==\"}"
            },
			...
			 ],
        "pageNum": 1
    }
}

1.5 响应描述

响应字段 类型 描述
flag Boolean 响应标识
code Integer 错误码
desc String 错误详情
count Integer 不用关注,预留
data.total Long PPT主题列表总数
data.records array PPT主题列表集合
data.records[]. templateIndexId String 供用户检索模板的ID
data.records[]. pageCount Integer 总页数
data.records[]. type String 类型
data.records[]. color String 颜色类型
data.records[]. industry String 行业类型
data.records[]. style String 风格类型
data.records[]. detailImage String 详细图
data.records[]. payType String 模板支付方式,注意:所有模板均已免费使用

#2、PPT生成(直接根据用户输入要求,获得最终PPT)

2.1 接口描述:

基于用户提示、文档等相关内容生成PPT,字数不得超过8000字,文件限制10M。

2.2 接口地址:

https://zwapi.xfyun.cn/api/ppt/v2/create

2.3 请求查询参数:

POST,multipart/form-data
名称 类型 描述 必须 默认值
file MultipartFile 上传文件 (file、fileUrl、query必填其一) N
query String 用户生成PPT要求(最多8000字;file、fileUrl、query必填其一) 注意:query不能为空字符串、仅包含空格的字符串 N
templateId String 直接供用户检索模板的ID,从PPT主题列表查询中获取 N
businessId String 业务ID(非必传)- 业务方自行决定是否使用 N
author String PPT作者名:用户自行选择是否设置作者名 N 智文
isCardNote Boolean 是否生成PPT演讲备注 N false
search Boolean 是否联网搜索 N false
language String 语种 N cn
fileUrl String 文件地址(file、fileUrl、query必填其一) N
fileName String 文件名(带文件名后缀;如果传file或者fileUrl,fileName必填) N
isFigure Boolean 是否自动配图 N false
aiImage String ai配图类型: normal、advanced (isFigure为true的话生效); normal-普通配图,20%正文配图;advanced-高级配图,50%正文配图 N

2.4 可选参数列表:

  • language:

    • cn:中文(简体)
    • en:英语
    • ja:日语
    • ru:俄语
    • ko:韩语
    • de:德语
    • fr:法语
    • pt:葡萄牙语
    • es:西班牙语
    • it:意大利语
    • th:泰语

2.5 请求响应:

{
    "flag": true,
    "code": 0,
    "desc": "成功",
    "count": null,
    "data": {
        "sid": "7416b894bdd54ccc95bab7400113989e",
        "coverImgSrc": "https://bjcdn.openstorage.cn/xinghuo-privatedata/zhiwen/2024-11-07/3d19478b-cac2-47c2-a238-ae25b9d4b900/81b87056834d4a1fb923dcf03bea4918.png",
        "title": "合肥天气趋势分析",
        "subTitle": "探索气候变化与城市生活影响",
        "outline": null
    }
}

2.6 响应描述

响应字段 类型 描述
flag Boolean 响应标识
code Integer 错误码
desc String 错误详情
count Integer 不用关注,预留
data.sid string 请求唯一id
data.CoverImgSrc string PPT封面图链接
data.title string PPT主标题
data.subTitle string PPT副标题
data.outline string PPT大纲

#3、大纲生成

3.1 接口地址:

https://zwapi.xfyun.cn/api/ppt/v2/createOutline

3.2 请求参数查询

POST,multipart/form-data
名称 类型 描述 必须 默认值
query String 用户生成PPT要求(最多8000字) 注意:query不能为空字符串、仅包含空格的字符串 Y
businessId String 业务ID(非必传)- 业务方自行决定是否使用 N
language String 语种 N cn
search Boolean 是否联网搜索 N false

3.3 请求响应

{
    "flag": true,
    "code": 0,
    "desc": "成功",
    "count": null,
    "data": {
        "sid": "a88306c606c746178c2816b996c45125",
        "outline": {
            "title": "秋分时节的农业管理策略",
            "subTitle": "提升农作物产量的关键措施",
            "chapters": [
                {
                    "chapterTitle": "秋分简介",
                    "chapterContents": [
                        {
                            "chapterTitle": "定义与时间"
                        },
                        {
                            "chapterTitle": "历史背景"
                        }
                    ]
                },
                {
                    "chapterTitle": "秋分的天文意义",
                    "chapterContents": [
                        {
                            "chapterTitle": "昼夜平分"
                        },
                        {
                            "chapterTitle": "太阳直射点变化"
                        }
                    ]
                }
            ]
        }
    }
}

3.4 响应描述

响应字段 类型 描述
flag Boolean 响应标识
code Integer 错误码
desc String 错误详情
count Integer 不用关注,预留
data.sid string 请求大纲唯一id,后续通过大纲生成ppt可能需要
data.outline object 大纲数据
data.outline.title string PPT主标题
data.outline.subTitle string PPT副标题
data.outline.chapters[].chapterTitle string 章节、子章节标题名称
data.outline.chapters[].chapterContents[] array 二级大纲内容

3.5 大纲结构体说明(data.outline)

public class Outline {

    // 主标题
    private String title;

    // 副标题
    private String subTitle;

    /**
     * 文档的章节列表。
     */
    private List<Outline.Chapter> chapters;

    public static class Chapter {
        // 章节、子章节标题名称
        String chapterTitle;

        // 二级大纲chapterContents为空
        List<Outline.Chapter> chapterContents = null;
    }
}

#4、自定义大纲生成

4.1 接口描述:

基于用户提示、文档等相关内容生成PPT大纲,字数不得超过8000字,文件限制10M。

上传文件支持pdf(不支持扫描件)、doc、docx、txt、md格式的文件。

4.2 接口地址:

https://zwapi.xfyun.cn/api/ppt/v2/createOutlineByDoc

4.3 请求查询参数:

POST,multipart/form-data
名称 类型 描述 必须 默认值
query String 用户生成PPT要求(最多8000字) N
businessId String 业务ID(非必传)- 业务方自行决定是否使用 N
language String 语种 N cn
search Boolean 是否联网搜索 N false
fileName String 文件名,带后缀 Y
fileUrl String 文件地址 N
file MultipartFile 上传文件 N

4.4请求响应与说明

见3.3、3.4小节说明

#5、通过大纲生成PPT

5.1 接口地址:

https://zwapi.xfyun.cn/api/ppt/v2/createPptByOutline

5.2 请求示例:

{
    "outline": {
        "title": "烧烤制作方法",
        "subTitle": "从食材准备到成品展示",
        "chapters": [
            {
                "chapterTitle": "烧烤概述",
                "chapterContents": [
                    {
                        "chapterTitle": "烧烤定义与起源与发展",
                        "chapterContents": null
                    }
                ]
            }
        ]
    },
    "language": "cn",
    "isCardNote": true,
    "aiImage": "advanced",
    "search":true,
    "isFigure":true,
    "author":"测试",
    "query":"烧烤"
}

5.3 请求查询参数:

POST,application/json
名称 类型 描述 必须 默认值
query String 用户生成PPT要求(最多8000字) 注意:query不能为空字符串、仅包含空格的字符串 Y
outlineSid String 已生成大纲后,响应返回的请求大纲唯一id (见 3.4 小节返回字段data.sid) N
outline JSONObject 大纲内容(不得超过20个一级大纲--outline.chapters[].chapterTitle,见 3.4 小节返回字段data.outline) Y
templateId String 直接供用户检索模板的ID,从PPT主题列表查询中获取;见 1.5 小节返回字段templateIndexId;为空的话,从free模板中随机取一个 N
businessId String 业务ID(非必传)- 业务方自行决定是否使用 N
author String PPT作者名:用户自行选择是否设置作者名 N 讯飞智文
isCardNote Boolean 是否生成PPT演讲备注 N false
search Boolean 是否联网搜索 N false
language String 语种(保证传入大纲语种与输入PPT语种一致) N cn
fileUrl String 文件地址 N
fileName String 文件名(带文件名后缀) ,传fileUrl的话必填 N
isFigure Boolean 是否自动配图 N false
aiImage String ai配图类型: normal、advanced (isFigure为true的话生效); normal-普通配图,20%正文配图;advanced-高级配图,50%正文配图 N

5.4 请求响应与说明

见2.5、2.6小节说明

#6、PPT进度查询

6.1 接口地址:

https://zwapi.xfyun.cn/api/ppt/v2/progress?sid={}

6.2 请求查询参数:

注:该接口设置限流,三秒访问一次

GET
名称 类型 描述 必须
sid String 请求唯一ID Y
{
    "flag": true,
    "code": 0,
    "desc": "成功",
    "count": null,
    "data": {
        "pptStatus": "done",
        "aiImageStatus": "done",
        "cardNoteStatus": "done",
        "pptUrl": "https://bjcdn.openstorage.cn/xinghuo-privatedata/zhiwen/2024-11-07/7c8fde0c-2d3e-4a1d-a6bb-b1a5688f10c0/9b1c22980ddf478c9557eedbc51a4d2d.pptx",
        "errMsg": null,
        "totalPages": 21,
        "donePages": 21
    }
}

6.3 响应描述

响应字段 类型 描述
flag Boolean 响应标识
code Integer 错误码
desc String 错误详情
count Integer 不用关注,预留
data.pptStatus String PPT构建状态:building(构建中),done(已完成),build_failed(生成失败)
data.aiImageStatus String ai配图状态:building(构建中),done(已完成)
data.cardNoteStatus String 演讲备注状态:building(构建中),done(已完成)
data.pptUrl String 生成PPT的地址
data.errMsg String 生成PPT的失败信息
data.totalPages Integer 生成PPT的总页数
data.donePages Integer 生成PPT的完成页数 (ai配图和演讲备注为异步任务,ppt页数完成,不代表配图和演讲备注也完成)

#扣量说明

  • 基于query直接生成ppt:扣除10点量,1个并发,若需要增加备注,则增加5点量
  • 基于query生成大纲:扣除2点量1个并发
  • 基于sid,获取大纲(可修改)生成ppt:扣除8点量1个并发
  • 基于大纲生成ppt:8点量,若需要生成备注:额外扣除5点量
  • PPT自动配图:普通4点量,高级8点量
  • PPT需要生成演讲备注:5点量
  • PPT多语种翻译:仅生成大纲,扣1点量;大纲生成PPT,扣2点量;
  • 开启联网搜索:2点量

python demo 完整代码

python 复制代码
# -*- coding:utf-8 -*-
import hashlib
import hmac
import base64
import json
import time

import requests
from requests_toolbelt.multipart.encoder import MultipartEncoder

class AIPPT():

    def __init__(self,APPId,APISecret,Text,templateId):
        self.APPid = APPId
        self.APISecret = APISecret
        self.text = Text
        self.header = {}
        self.templateId = templateId


    #获取签名
    def get_signature(self, ts):
        try:
            # 对app_id和时间戳进行MD5加密
            auth = self.md5(self.APPid + str(ts))
            # 使用HMAC-SHA1算法对加密后的字符串进行加密
            return self.hmac_sha1_encrypt(auth,self.APISecret)
        except Exception as e:
            print(e)
            return None

    def hmac_sha1_encrypt(self, encrypt_text, encrypt_key):
        # 使用HMAC-SHA1算法对文本进行加密,并将结果转换为Base64编码
        return base64.b64encode(hmac.new(encrypt_key.encode('utf-8'), encrypt_text.encode('utf-8'), hashlib.sha1).digest()).decode('utf-8')

    def md5(self, text):
        # 对文本进行MD5加密,并返回加密后的十六进制字符串
        return hashlib.md5(text.encode('utf-8')).hexdigest()

    #创建PPT生成任务
    def create_task(self):
        url = 'https://zwapi.xfyun.cn/api/ppt/v2/create'
        timestamp = int(time.time())
        signature = self.get_signature(timestamp)
        # body= self.getbody(self.text)

        formData = MultipartEncoder(
            fields={
                # "file": (path, open(path, 'rb'), 'text/plain'),  # 如果需要上传文件,可以将文件路径通过path 传入
                # "fileUrl":"",   #文件地址(file、fileUrl、query必填其一)
                # "fileName":"",   # 文件名(带文件名后缀;如果传file或者fileUrl,fileName必填)
                "query": self.text,
                "templateId":"20240718489569D", # 模板的ID,从PPT主题列表查询中获取
                "author":"XXXX",    # PPT作者名:用户自行选择是否设置作者名
                "isCardNote" :str(True),   # 是否生成PPT演讲备注, True or False
                "search" :str(False),      # 是否联网搜索,True or False
                "isFigure" :str(True),   # 是否自动配图, True or False
                "aiImage" :"normal"   # ai配图类型: normal、advanced (isFigure为true的话生效); normal-普通配图,20%正文配图;advanced-高级配图,50%正文配图
            }
        )

        print(formData)

        headers = {
            "appId": self.APPid,
            "timestamp": str(timestamp),
            "signature": signature,
            "Content-Type": formData.content_type
        }
        self.header = headers
        print(headers)
        response = requests.request(method="POST",url=url, data= formData,headers=headers).text
        print("生成PPT返回结果:",response)
        resp = json.loads(response)
        if(0 == resp['code']):
            return resp['data']['sid']
        else:
            print('创建PPT任务失败')
            return None

    #构建请求body体
    def getbody(self,text):
        body = {
            "query":text,
            "templateId":self.templateId  #  模板ID举例,具体使用 /template/list 查询
        }
        return body
		
		
	#轮询任务进度,返回完整响应信息
    def get_process(self,sid):
        # print("sid:" + sid)
        if(None != sid):
            response = requests.request("GET",url=f"https://zwapi.xfyun.cn/api/ppt/v2/progress?sid={sid}",headers=self.header).text
            print(response)
            return response
        else:
            return None



    #获取PPT,以下载连接形式返回
    def get_result(self,task_id):

        #创建PPT生成任务
        # task_id = self.create_task()
        # PPTurl = ''
        #轮询任务进度
        while(True):
            response = self.get_process(task_id)
            resp = json.loads(response)
            pptStatus = resp['data']['pptStatus']
            aiImageStatus = resp['data']['aiImageStatus']
            cardNoteStatus = resp['data']['cardNoteStatus']


            if('done' == pptStatus and 'done' == aiImageStatus and 'done' == cardNoteStatus):
                PPTurl = resp['data']['pptUrl']
                break
            else:
                time.sleep(3)
        return PPTurl

    def getHeaders(self):
        timestamp = int(time.time())
        signature = self.get_signature(timestamp)
        # body = self.getbody(self.text)

        headers = {
            "appId": self.APPid,
            "timestamp": str(timestamp),
            "signature": signature,
            "Content-Type": "application/json; charset=utf-8"
        }
        return headers

    def getTheme(self):
        url ="https://zwapi.xfyun.cn/api/ppt/v2/template/list"
        self.header = self.getHeaders()
        body = {
            "payType": "not_free",
            # "style": "简约",    # 支持按照类型查询PPT 模板
            # "color": "红色",   #  支持按照颜色查询PPT 模板
            # "industry": "教育培训",    # 支持按照颜色查询PPT 模板
            "pageNum": 2 ,
            "pageSize": 10
        }

        response = requests.request("GET", url=url, headers=self.header).text
        print(response)
        return response

    def createOutline(self):
        # if('' ==fileUrl and '' == filePath):
        url ="https://zwapi.xfyun.cn/api/ppt/v2/createOutline"
        body = {
            "query": self.text,
            "language": "cn",
            "search": str(False),  # 是否联网搜索,True or False
        }

        response = requests.post(url=url,json= body,headers=self.getHeaders()).text
        print("生成大纲完成:\n",response)

        return response

    def createOutlineByDoc(self,fileName,fileUrl=None,filePath =None ):
        # if('' ==fileUrl and '' == filePath):
        url ="https://zwapi.xfyun.cn/api/ppt/v2/createOutlineByDoc"
        formData = MultipartEncoder(
            fields={
                "file": (filePath, open(filePath, 'rb'), 'text/plain'),  # 如果需要上传文件,可以将文件路径通过path 传入
                "fileUrl":fileUrl,   #文件地址(file、fileUrl必填其一)
                "fileName": fileName,   # 文件名(带文件名后缀;如果传file或者fileUrl,fileName必填)
                "query": self.text,
                "language": "cn",
                "search": str(False),  # 是否联网搜索,True or False
            }
        )
        timestamp = int(time.time())
        signature = self.get_signature(timestamp)
        headers = {
            "appId": self.APPid,
            "timestamp": str(timestamp),
            "signature": signature,
            "Content-Type": formData.content_type
        }
        self.header = headers
        response = requests.post(url=url,data= formData,headers=headers).text
        print("生成大纲完成:\n",response)

        return response

    def createPptByOutline(self,outline):
        url = "https://zwapi.xfyun.cn/api/ppt/v2/createPptByOutline"
        body = {
                "query": self.text,
                "outline":outline,
                "templateId":self.templateId, # 模板的ID,从PPT主题列表查询中获取
                "author":"XXXX",    # PPT作者名:用户自行选择是否设置作者名
                "isCardNote" :True,   # 是否生成PPT演讲备注, True or False
                "search" :False,      # 是否联网搜索,True or False
                "isFigure" :True,   # 是否自动配图, True or False
                "aiImage" :"normal",   # ai配图类型: normal、advanced (isFigure为true的话生效); normal-普通配图,20%正文配图;advanced-高级配图,50%正文配图

            }
        print(body)

        response = requests.post(url,json=body,headers=self.getHeaders()).text
        print("创建生成任务成功:\n",response)
        resp = json.loads(response)
        if (0 == resp['code']):
            return resp['data']['sid']
        else:
            print('创建PPT任务失败')
            return None







if __name__ == '__main__':
    #控制台获取 
    APPId = "XXXXXXXX"
    APISecret = "XXXXXXXXXXXXXXXXXXXXXXXX"

    # 查询PPT主题列表
    # demo1 = AIPPT(APPId,APISecret,'','')
    # templateId = demo1.getTheme() # 获取模板列表
    # print("支持模板列表:\n",templateId)
    templateId = "20240718489569D"  # 该模板ID,需要通过getTheme() 方法获取模板列表,然后从中挑选

    #流程一:根据描述或者文档直接生成PPT;(流程一、流程二代码不能同时打开)
    # # 流程一开始
    Text="请帮我写一份PPT: 介绍下今年到目前位置的公司经营状况"
    demo = AIPPT(APPId,APISecret,Text,templateId)
    taskid = demo.create_task()
    # # 流程一结束


    #流程二: 先生成大纲(支持上传文本),再通过大纲生成PPT;(流程一、流程二代码不能同时打开)

    # # 流程二开始
    # title = "秋分时节的农业管理策略"   #设定大纲主题
    # filename = "test.pdf" # 需要根据文档上传时,请填写文档路径;要求:字数不得超过8000字,文件限制10M。上传文件支持pdf(不支持扫描件)、doc、docx、txt、md格式的文件。
    # filePath = "data/test.pdf" # 文件路径,也可以通过fileurl 字段上传对象存储地址,具体见方法:createOutlineByDoc
    # demo = AIPPT(APPId, APISecret, title, templateId)
    # res = demo.createOutlineByDoc(fileName=filename,filePath=filePath)
    # data = json.loads(res)
    # outline = data["data"]["outline"]
    # taskid = demo.createPptByOutline(outline)
    # # 流程二结束



    result = demo.get_result(taskid)
    print("生成的PPT请从此地址获取:\n" + result)
相关推荐
每天写点bug2 小时前
【go每日一题】 责任链模式的实现
开发语言·golang·责任链模式
半盏茶香2 小时前
C语言勘破之路-最终篇 —— 预处理(下)
c语言·开发语言·c++·算法
时雨h2 小时前
30天面试打卡计划 2024-12-25 26 27 面试题
java·开发语言·数据库
别致的影分身3 小时前
Linux 线程池
java·开发语言·jvm
CM莫问3 小时前
tokenizer、tokenizer.encode、tokenizer.encode_plus比较
人工智能·python·深度学习·语言模型·大模型·tokenizer·文本表示
web135085886354 小时前
Python毕业设计选题:基于python的白酒数据推荐系统_django+hive
python·django·课程设计
山山而川粤5 小时前
母婴用品系统|Java|SSM|JSP|
java·开发语言·后端·学习·mysql
云空6 小时前
《解锁 Python 数据分析的强大力量》
python·数据挖掘·数据分析
迷失蒲公英6 小时前
XML与Go结构互转实现(序列化及反序列化)
xml·开发语言·golang
测试盐6 小时前
c++编译过程初识
开发语言·c++