当前位置: 首页 > article >正文

讯飞星火智能生成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)






 


http://www.kler.cn/a/459146.html

相关文章:

  • 集线器,交换机,路由器,mac地址和ip地址知识记录总结
  • python爬虫--小白篇【selenium自动爬取文件】
  • 如何通过深度学习提升大分辨率图像预测准确率?
  • mybatis 和 mybatisPlus 兼容性问题
  • Unity-Mirror网络框架-从入门到精通之Basic示例
  • Java开发工具-Jar命令
  • wget基本使用
  • Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例
  • 如何优化Python网络爬虫的数据清洗流程,以提升数据质量并有效应对网站反爬虫机制?
  • pd.Timestamp接收的参数类型
  • 在K8S中,节点状态哪个组件负责上报?
  • 人形机器人全身运动规划相关资料与文章
  • JVM实战—JVM垃圾回收的算法和全流程
  • FPGA中三模冗余的4项关键技术(一)
  • 大数据Scala面试题汇总
  • LVS 负载均衡原理 | 配置示例
  • Ubuntu安装MinIO
  • 【蓝桥杯研究生组】第15届Java试题答案整理
  • 操作系统之死锁
  • HarmonyOS NEXT 实战之元服务:静态案例效果---我的热门应用服务
  • 人工智能在肿瘤亚型分类、药物筛选以及模型可解释性方面的最新进展|顶刊速递·24-12-30
  • 【RISC-V CPU debug 专栏 4 -- RV CSR寄存器介绍】
  • 基于STM32的智能家庭能源管理系统设计
  • SpringBoot(Ⅱ-2)——,SpringBoot版本控制,自动装配原理补充(源码),自动导包原理补充(源码),run方法
  • Node.js 记账本项目总结
  • PyTorch快速入门教程【小土堆】之全连接层