2Slides Logo
Python 自動化簡報製作:2Slides API 完整教學
2Slides Team
3 min read

使用 Python 自動化簡報生成:2Slides API 教學

Python 是自動化、資料管線和 AI 工作流程的首選語言。本教學將展示如何從 Python 使用 2Slides REST API 自動生成簡報 — 從簡單的一次性投影片到複雜的自動化管線。

前置作業

pip install requests python-dotenv

建立一個

.env
檔案:

TWOSLIDES_API_KEY=sk-2slides-your-api-key

快速入門:生成您的第一份簡報

import os import time import requests from dotenv import load_dotenv load_dotenv() API_KEY = os.getenv('TWOSLIDES_API_KEY') BASE_URL = 'https://2slides.com/api/v1' HEADERS = { 'Authorization': f'Bearer {API_KEY}', 'Content-Type': 'application/json' } def generate_slides(topic, theme_id=None, mode='async'): """從文字主題生成簡報。""" payload = { 'userInput': topic, 'mode': mode, 'responseLanguage': 'en', 'resolution': '2K', } if theme_id: payload['themeId'] = theme_id response = requests.post( f'{BASE_URL}/slides/generate', headers=HEADERS, json=payload ) response.raise_for_status() return response.json() def wait_for_job(job_id, timeout=300, interval=3): """輪詢直到任務完成。""" start = time.time() while time.time() - start < timeout: response = requests.get( f'{BASE_URL}/jobs/{job_id}', headers=HEADERS ) data = response.json() status = data.get('status') print(f' 任務 {job_id}: {status}') if status == 'success': return data if status == 'failed': raise Exception(f'任務失敗: {data}') time.sleep(interval) raise TimeoutError(f'任務 {job_id}{timeout} 秒後逾時') # 生成一份簡報 job = generate_slides('Top 10 AI Trends for 2026') print(f'任務 ID: {job["jobId"]}') result = wait_for_job(job['jobId']) print(f'下載連結: {result["downloadUrl"]}')

將文件轉換為簡報

def convert_file_to_slides(file_url, prompt='', theme_id=None): """將 PDF、DOCX、XLSX 或其他檔案轉換為簡報。""" payload = { 'fileUrl': file_url, 'userInput': prompt, 'mode': 'async' } if theme_id: payload['themeId'] = theme_id response = requests.post( f'{BASE_URL}/slides/create-pdf-slides', headers=HEADERS, json=payload ) response.raise_for_status() job = response.json() return wait_for_job(job['jobId']) # 轉換一份季度報告 PDF result = convert_file_to_slides( file_url='https://your-storage.com/q1-report.pdf', prompt='Executive summary for the board, 10 slides max' ) print(f'下載連結: {result["downloadUrl"]}')

設計風格匹配的簡報(以此為範本建立)

def create_like_this(topic, reference_image_url, resolution='2K'): """生成與參考設計匹配的簡報。""" payload = { 'userInput': topic, 'designStyle': { 'global': { 'referenceImageUrl': reference_image_url } }, 'resolution': resolution, 'mode': 'async' } response = requests.post( f'{BASE_URL}/slides/create-like-this', headers=HEADERS, json=payload ) response.raise_for_status() job = response.json() return wait_for_job(job['jobId']) # 匹配您的品牌範本 result = create_like_this( topic='Monthly Team Update — March 2026', reference_image_url='https://your-brand.com/slide-template.png' )

新增語音旁白

def add_narration(job_id, mode='single', voice='Charon', content_mode='concise'): """為現有簡報新增 AI 語音旁白。""" payload = { 'jobId': job_id, 'mode': mode, 'voice': voice, 'contentMode': content_mode } response = requests.post( f'{BASE_URL}/slides/generate-narration', headers=HEADERS, json=payload ) response.raise_for_status() return response.json() def download_with_audio(job_id): """下載包含語音音訊檔案的簡報。""" response = requests.post( f'{BASE_URL}/slides/download-slides-pages-voices', headers=HEADERS, json={'jobId': job_id} ) response.raise_for_status() return response.json()

瀏覽主題

def search_themes(query=''): """搜尋可用的簡報主題。""" params = {'query': query} if query else {} response = requests.get( f'{BASE_URL}/themes', headers=HEADERS, params=params ) response.raise_for_status() return response.json() themes = search_themes('corporate') for theme in themes.get('themes', []): print(f"{theme['id']}: {theme['name']}")

生產管線範例

""" 自動化週報管線。 透過 cron 執行:0 9 * * MON python weekly_report.py """ import json from datetime import datetime def weekly_report_pipeline(): print(f'正在生成週報: {datetime.now().isoformat()}') # 1. 生成簡報 job = generate_slides( topic='''Weekly Engineering Update — Week of March 23, 2026: - Deployed v2.4 to production (99.9% uptime) - 3 new API endpoints shipped - Performance: p99 latency down 40% - Sprint velocity: 42 story points (target: 40) - Next week: database migration, new auth system''', theme_id='corporate-standard-id' ) result = wait_for_job(job['jobId']) print(f'簡報已準備就緒: {result["downloadUrl"]}') # 2. 新增旁白 add_narration(job['jobId'], mode='single', voice='Kore') print('旁白已新增') # 3. 下載套件 package = download_with_audio(job['jobId']) print(f'完整套件: {json.dumps(package, indent=2)}') return result['downloadUrl'] if __name__ == '__main__': url = weekly_report_pipeline() print(f'\n報告網址: {url}')

錯誤處理最佳實踐

from requests.exceptions import HTTPError, Timeout, ConnectionError def safe_generate(topic, retries=3): """使用重試邏輯生成簡報。""" for attempt in range(retries): try: job = generate_slides(topic) return wait_for_job(job['jobId']) except HTTPError as e: if e.response.status_code == 429: wait = 2 ** attempt * 5 # 指數退避 print(f'達到速率限制。等待 {wait} 秒...') time.sleep(wait) elif e.response.status_code == 402: raise Exception('點數不足') else: raise except (Timeout, ConnectionError) as e: print(f'網路錯誤 (嘗試 {attempt + 1}): {e}') time.sleep(5) raise Exception(f'在 {retries} 次重試後失敗')

常見問題

需要哪個 Python 版本?

Python 3.7+,以支援 f-strings 和

requests
相容性。

我可以使用非同步 Python (asyncio/aiohttp) 嗎?

可以 — 將

requests
替換為
aiohttp
以進行非同步 HTTP 呼叫。輪詢模式的工作方式相同。

如何處理大型批次任務?

使用 asyncio 同步執行多個生成任務,同時遵守速率限制(每分鐘 60 個請求)。


開始自動化 — 取得您的 2Slides API 金鑰 並從 Python 生成簡報。

About 2Slides

Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.

Try For Free