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

接口调用流程图

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

#接口调用示例

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

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

#接口与鉴权

#接口域名

zwapi.xfyun.cn

#获取签名

在HTTP请求头 header 中设置参数:appIdtimestampsignature

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);
字段名类型描述必须默认值
appIdString应用IDY
timestampString时间戳,单位: s,与服务端时间相差五分钟之内Y
signatureString签名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大纲生成失败查看是否存在敏感词汇,尝试重新生成
20006PPT生成失败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

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

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

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 响应描述

响应字段类型描述
flagBoolean响应标识
codeInteger错误码
descString错误详情
countInteger不用关注,预留
data.totalLongPPT主题列表总数
data.recordsarrayPPT主题列表集合
data.records[]. templateIndexIdString供用户检索模板的ID
data.records[]. pageCountInteger总页数
data.records[]. typeString类型
data.records[]. colorString颜色类型
data.records[]. industryString行业类型
data.records[]. styleString风格类型
data.records[]. detailImageString详细图
data.records[]. payTypeString模板支付方式,注意:所有模板均已免费使用

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

2.1 接口描述:

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

2.2 接口地址:

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

2.3 请求查询参数:

POST,multipart/form-data
名称类型描述必须默认值
fileMultipartFile上传文件 (file、fileUrl、query必填其一)N
queryString用户生成PPT要求(最多8000字;file、fileUrl、query必填其一)
注意:query不能为空字符串、仅包含空格的字符串
N
templateIdString直接供用户检索模板的ID,从PPT主题列表查询中获取N
businessIdString业务ID(非必传)- 业务方自行决定是否使用N
authorStringPPT作者名:用户自行选择是否设置作者名N智文
isCardNoteBoolean是否生成PPT演讲备注Nfalse
searchBoolean是否联网搜索Nfalse
languageString语种Ncn
fileUrlString文件地址(file、fileUrl、query必填其一)N
fileNameString文件名(带文件名后缀;如果传file或者fileUrl,fileName必填)N
isFigureBoolean是否自动配图Nfalse
aiImageStringai配图类型: 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 响应描述

响应字段类型描述
flagBoolean响应标识
codeInteger错误码
descString错误详情
countInteger不用关注,预留
data.sidstring请求唯一id
data.CoverImgSrcstringPPT封面图链接
data.titlestringPPT主标题
data.subTitlestringPPT副标题
data.outlinestringPPT大纲

#3、大纲生成

3.1 接口地址:

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

3.2 请求参数查询

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

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 响应描述

响应字段类型描述
flagBoolean响应标识
codeInteger错误码
descString错误详情
countInteger不用关注,预留
data.sidstring请求大纲唯一id,后续通过大纲生成ppt可能需要
data.outlineobject大纲数据
data.outline.titlestringPPT主标题
data.outline.subTitlestringPPT副标题
data.outline.chapters[].chapterTitlestring章节、子章节标题名称
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
名称类型描述必须默认值
queryString用户生成PPT要求(最多8000字)N
businessIdString业务ID(非必传)- 业务方自行决定是否使用N
languageString语种Ncn
searchBoolean是否联网搜索Nfalse
fileNameString文件名,带后缀Y
fileUrlString文件地址N
fileMultipartFile上传文件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
名称类型描述必须默认值
queryString用户生成PPT要求(最多8000字)
注意:query不能为空字符串、仅包含空格的字符串
Y
outlineSidString已生成大纲后,响应返回的请求大纲唯一id (见 3.4 小节返回字段data.sid)N
outlineJSONObject大纲内容(不得超过20个一级大纲--outline.chapters[].chapterTitle,见 3.4 小节返回字段data.outline)Y
templateIdString直接供用户检索模板的ID,从PPT主题列表查询中获取;见 1.5 小节返回字段templateIndexId;为空的话,从free模板中随机取一个N
businessIdString业务ID(非必传)- 业务方自行决定是否使用N
authorStringPPT作者名:用户自行选择是否设置作者名N讯飞智文
isCardNoteBoolean是否生成PPT演讲备注Nfalse
searchBoolean是否联网搜索Nfalse
languageString语种(保证传入大纲语种与输入PPT语种一致)Ncn
fileUrlString文件地址N
fileNameString文件名(带文件名后缀) ,传fileUrl的话必填N
isFigureBoolean是否自动配图Nfalse
aiImageStringai配图类型: 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
名称类型描述必须
sidString请求唯一IDY
{
    "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 响应描述

响应字段类型描述
flagBoolean响应标识
codeInteger错误码
descString错误详情
countInteger不用关注,预留
data.pptStatusStringPPT构建状态:building(构建中),done(已完成),build_failed(生成失败)
data.aiImageStatusStringai配图状态:building(构建中),done(已完成)
data.cardNoteStatusString演讲备注状态:building(构建中),done(已完成)
data.pptUrlString生成PPT的地址
data.errMsgString生成PPT的失败信息
data.totalPagesInteger生成PPT的总页数
data.donePagesInteger生成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 完整代码

# -*- 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)






 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/943561.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

win系统B站播放8k视频启用HEVC编码

下载HEVC插件 点击 HEVC Video Extension 2.2.20.0 latest downloads&#xff0c;根据教程下载安装 安装 Random User-Agent 点击 Random User-Agent 安装 配置 Random User-Agent ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/dda0ea75096c42c0a79ef6f6f5521…

JVM调优实践篇

理论篇 1多功能养鱼塘&#xff0d;JVM内存 大鱼塘O&#xff08;可分配内存&#xff09;&#xff1a; JVM可以调度使用的总的内存数&#xff0c;这个数量受操作系统进程寻址范围、系统虚拟内存总数、系统物理内存总数、其他系统运行所占用的内存资源等因素的制约。 小池塘A&a…

OSI 七层模型 | TCP/IP 四层模型

注&#xff1a;本文为 “OSI 七层模型 | TCP/IP 四层模型” 相关文章合辑。 未整理去重。 OSI 参考模型&#xff08;七层模型&#xff09; BeretSEC 于 2020-04-02 15:54:37 发布 OSI 的概念 七层模型&#xff0c;亦称 OSI&#xff08;Open System Interconnection&#xf…

Microsoft 365 Copilot模型多元化,降低对OpenAI依赖并降低成本

最近微软的新闻比较多&#xff0c;其中最令人瞩目的一条是&#xff0c;GitHub的copilot免费开放了&#xff0c;虽然次数较少&#xff08;代码补全每月2000次&#xff0c;chat对话每月50次&#xff09;&#xff0c;但至少是一个标志性事件&#xff0c;并且模型也由原来的单一的G…

国内用户怎么注册PayPal账户?

国内怎么用paypal&#xff1f;虽然国内用户注册PayPal账户相对简单&#xff0c;但由于PayPal在中国的服务保障有限&#xff0c;注册过程中可能会遇到地区限制或账户关联的问题。使用 OKBrow指纹浏览器 可以有效解决这些问题&#xff0c;避免因地域、IP和指纹信息相似而导致的账…

AIA - IMSIC之二(附IMSIC处理流程图)

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 ​​​​​​​通过IMSIC接收外部中断的CSR 软件通过《AIA - 新增的CSR》描述的CSR来访问IMSIC。 machine level 的 CSR 与 IMSIC 的 machine level interrupt file 可相互互动;而 supervisor level 的 CSR…

攻防世界web第三题file_include

<?php highlight_file(__FILE__);include("./check.php");if(isset($_GET[filename])){$filename $_GET[filename];include($filename);} ?>这是题目 惯例&#xff1a; 代码审查&#xff1a; 1.可以看到include(“./check.php”);猜测是同级目录下有一个ch…

矢量网络分析仪(VNA)基础解析与应用指南

矢量网络分析仪&#xff08;VNA&#xff09;是一种极其精密的仪器&#xff0c;能够对电气网络的阻抗进行表征&#xff0c;测量结果可提供幅度和相位细节&#xff0c;从而深入了解其行为。被测设备&#xff08;DUT&#xff09;通常用于射频&#xff08;RF&#xff09;应用&#…

力扣刷题:单链表OJ篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.反转链表&#xff08;1&#xff09;题目描述…

三维激光扫描及逆向工程-构建复杂工业产品模型

关于三维激光扫描&#xff1a; 三维扫描技术是一种先进的高精度立体扫描技术&#xff0c;通过测量空间物体表面点的三维坐标值&#xff0c;得到物体表面的点云信息&#xff0c;并转化为计算机可以直接处理的三维模型&#xff0c;又称为“实景复制技术” 。 三维激光技术能够快…

速度更快、功能更强 | Q-Tester V4.7工程诊断仪全新升级!

Q-Tester.Expert是一大基于ODX&#xff08;ASAM MCD-2D/ISO 22901-1&#xff09;和OTX&#xff08;ISO 13209&#xff09;国际标准的工程诊断仪&#xff0c;通过此诊断仪可实现与ECU控制器之间的数据交互。基于ODX/OTX国际标准的解决方案&#xff0c;其优势在于&#xff1a;ODX…

大定活动场景全链路性能压测

压测背景 满足V23小程序大定场景下的性能 批量造10万的token数据进行压测 性能测试名词解释 术语 释义 VU 并发用户数 RT 响应时间 TPS 吞吐量的一种&#xff0c;指每秒处理的事务数&#xff0c;每个事务可以是一个接口或者多个接口 QPS 吞吐量的一种,指每秒服务器…

C/C++ 数据结构与算法【树和森林】 树和森林 详细解析【日常学习,考研必备】带图+详细代码

一、树的存储结构 1&#xff09;双亲表示法实现&#xff1a; 定义结构数组存放树的结点&#xff0c;每个结点含两个域: 数据域&#xff1a;存放结点本身信息。双亲域&#xff1a;指示本结点的双亲结点在数组中的位置。 特点&#xff1a;找双亲简单&#xff0c;找孩子难 C语…

基于Ubuntu2404桌面版制作qcow2镜像

kvm 本地安装导入现有磁盘 环境&#xff1a;Ubuntu2404桌面版&#xff0c;且开启虚拟化引擎 本次实验使用本地安装的方式用centos7.9 ISO格式镜像创建一台虚拟机&#xff0c;创建后默认的磁盘格式为qcow2&#xff0c;然后对该磁盘进行压缩&#xff0c;再次使用导入现有磁盘的方…

华为战略解码-162页 八大章节 精读

该文档主要解读了华为战略解码的过程和内容&#xff0c;强调了领导力在战略管理中的重要性&#xff0c;介绍了华为战略管理的七个关键点以及领导力的七个特质。文档详细阐述了华为在战略解码过程中如何利用BLM模型等工具&#xff0c;以及如何从市场洞察、业务设计等方面制定和执…

【2024年最新】BilibiliB站视频动态评论爬虫

废话不多说&#xff0c;直接先放git仓库&#xff1a;GitHub - linyuye/Bilibili_crawler: bilibili爬虫&#xff0c;基于selenium获取oid与cookie&#xff0c;request获取api内容 〇&#xff1a;概念简述 oid&#xff1a;视频/动态的uuid&#xff0c;b站对于发布内容的通用唯…

BAPI_BATCH_CHANGE在更新后不自动更新批次特征

1、问题介绍 在CL03中看到分类特性配置了制造日期字段&#xff0c;并绑定了生产日期字段MCH1~HSDAT MSC2N修改批次的生产日期字段时&#xff0c;自动修改了对应的批次特性 但是通过BAPI&#xff1a;BAPI_BATCH_CHANGE修改生产日期时&#xff0c;并没有更新到批次特性中 2、BAPI…

SQL中的窗口函数

1.窗口函数简介 窗口函数是SQL中的一项高级特性&#xff0c;用于在不改变查询结果集行数的情况下&#xff0c;对每一行执行聚合计算或者其他复杂的计算&#xff0c;也就是说窗口函数可以跨行计算&#xff0c;可以扫描所有的行&#xff0c;并把结果填到每一行中。这些函数通常与…

转运机器人推动制造业智能化转型升级

​在当今制造业智能化转型的浪潮中&#xff0c;技术创新成为企业脱颖而出的关键。富唯转运机器人凭借一系列先进技术&#xff0c;成为智能转型的卓越之选。 一体化 AMR 控制系统是富唯的一大亮点。它采用低代码流程搭建和配置模式&#xff0c;极大地缩短了部署时间。企业无需耗…

同步异步日志系统:设计模式

设计模式是前辈们对代码开发经验的总结&#xff0c;是解决特定问题的⼀系列套路。它不是语法规定&#xff0c;⽽是⼀ 套⽤来提⾼代码可复⽤性、可维护性、可读性、稳健性以及安全性的解决⽅案。 为什么会产生设计模式这样的东西呢&#xff1f;就像人类历史发展会产生兵法。最开…