
2Slides Team
3 min read

Python 是自動化、資料管線和 AI 工作流程的首選語言。本教學將展示如何從 Python 使用 2Slides REST API 自動生成簡報 — 從簡單的一次性投影片到複雜的自動化管線。
pip install requests python-dotenv
建立一個
.envTWOSLIDES_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 3.7+,以支援 f-strings 和
requests可以 — 將
requestsaiohttp使用 asyncio 同步執行多個生成任務,同時遵守速率限制(每分鐘 60 個請求)。
開始自動化 — 取得您的 2Slides API 金鑰 並從 Python 生成簡報。
Create stunning AI-powered presentations in seconds. Transform your ideas into professional slides with 2slides AI Agent.
Try For FreeYour AI Agent for slides. Save time, shine faster with intelligent presentation creation.
All services online© 2026 2slides. All rights reserved.