Logo 2Slides
Automatyzacja tworzenia prezentacji w Pythonie: Tutorial API 2Slides
2Slides Team
4 min read

Automatyzacja generowania prezentacji z Python: Tutorial API 2Slides

Python to język idealny do automatyzacji, potoków danych i przepływów pracy AI. Ten tutorial pokazuje, jak używać REST API 2Slides z poziomu Pythona do automatycznego generowania prezentacji — od prostych pojedynczych slajdów po złożone zautomatyzowane potoki.

Wymagania wstępne

pip install requests python-dotenv

Utwórz plik .env:

TWOSLIDES_API_KEY=sk-2slides-twoj-klucz-api

Szybki start: Wygeneruj swoje pierwsze slajdy

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'): """Generuje prezentację z tematu tekstowego.""" payload = { 'userInput': topic, 'mode': mode, 'responseLanguage': 'pl', '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): """Odpytuje do momentu zakończenia zadania.""" 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' Zadanie {job_id}: {status}') if status == 'success': return data if status == 'failed': raise Exception(f'Zadanie nie powiodło się: {data}') time.sleep(interval) raise TimeoutError(f'Zadanie {job_id} przekroczyło limit czasu {timeout}s') # Generowanie prezentacji job = generate_slides('10 najważniejszych trendów AI na 2026 rok') print(f'ID zadania: {job["jobId"]}') result = wait_for_job(job['jobId']) print(f'Pobierz: {result["downloadUrl"]}')

Konwertowanie dokumentów na slajdy

def convert_file_to_slides(file_url, prompt='', theme_id=None): """Konwertuje pliki PDF, DOCX, XLSX lub inne na slajdy.""" 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']) # Konwersja raportu kwartalnego PDF result = convert_file_to_slides( file_url='https://twoja-przestrzen.com/raport-q1.pdf', prompt='Podsumowanie zarządcze dla zarządu, maksymalnie 10 slajdów' ) print(f'Pobierz: {result["downloadUrl"]}')

Slajdy dopasowane do wzorca (Utwórz w tym stylu)

def create_like_this(topic, reference_image_url, resolution='2K'): """Generuj slajdy dopasowane do wzorcowego projektu.""" 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']) # Dopasuj do szablonu Twojej marki result = create_like_this( topic='Miesięczna aktualizacja zespołu — Marzec 2026', reference_image_url='https://your-brand.com/slide-template.png' )

Dodaj narrację głosową

def add_narration(job_id, mode='single', voice='Charon', content_mode='concise'): """Dodaj narrację głosową AI do istniejących slajdów.""" 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): """Pobierz slajdy z plikami audio narracji.""" response = requests.post( f'{BASE_URL}/slides/download-slides-pages-voices', headers=HEADERS, json={'jobId': job_id} ) response.raise_for_status() return response.json()

Przeglądaj motywy

def search_themes(query=''): """Wyszukaj dostępne motywy slajdów.""" 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']}")

Przykład Pipeline'u Produkcyjnego

""" Automatyczny pipeline raportów tygodniowych. Uruchamiany przez cron: 0 9 * * MON python weekly_report.py """ import json from datetime import datetime def weekly_report_pipeline(): print(f'Generowanie raportu tygodniowego: {datetime.now().isoformat()}') # 1. Wygeneruj slajdy job = generate_slides( topic='''Cotygodniowa Aktualizacja Inżynierska — Tydzień 23 marca 2026: - Wdrożono v2.4 na produkcję (99.9% uptime) - 3 nowe endpointy API dostarczone - Wydajność: p99 latencja spadła o 40% - Prędkość sprintu: 42 story points (cel: 40) - Następny tydzień: migracja bazy danych, nowy system auth''', theme_id='corporate-standard-id' ) result = wait_for_job(job['jobId']) print(f'Slajdy gotowe: {result["downloadUrl"]}') # 2. Dodaj narrację add_narration(job['jobId'], mode='single', voice='Kore') print('Narracja dodana') # 3. Pobierz pakiet package = download_with_audio(job['jobId']) print(f'Pełny pakiet: {json.dumps(package, indent=2)}') return result['downloadUrl'] if __name__ == '__main__': url = weekly_report_pipeline() print(f'\nURL raportu: {url}')

Najlepsze Praktyki Obsługi Błędów

from requests.exceptions import HTTPError, Timeout, ConnectionError def safe_generate(topic, retries=3): """Generuj slajdy z logiką ponownych prób.""" 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 # Wykładniczy backoff print(f'Ograniczenie częstotliwości. Czekanie {wait}s...') time.sleep(wait) elif e.response.status_code == 402: raise Exception('Niewystarczająca liczba kredytów') else: raise except (Timeout, ConnectionError) as e: print(f'Błąd sieci (próba {attempt + 1}): {e}') time.sleep(5) raise Exception(f'Niepowodzenie po {retries} próbach')

Najczęściej Zadawane Pytania

Jaka wersja Python jest wymagana?

Python 3.7+ dla kompatybilności z f-strings i requests.

Czy mogę używać asynchronicznego Python (asyncio/aiohttp)?

Tak — zamień requests na aiohttp dla asynchronicznych wywołań HTTP. Wzorzec pollingu działa w ten sam sposób.

Jak obsługiwać duże zadania wsadowe?

Użyj asyncio do równoczesnego uruchamiania wielu generacji, respektując limit częstotliwości (60 żądań/min).


Zacznij automatyzować — uzyskaj swój klucz API 2Slides i generuj prezentacje z Python.

About 2Slides

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

Try For Free
2Slides logo

Twój Agent AI dla slajdów. Oszczędzaj czas, błyszcz szybciej dzięki inteligentnemu tworzeniu prezentacji.

Podsumuj za pomocą AI

ChatGPTClaudeGrokPerplexity
Wszystkie usługi działają

© 2026 2slides. Wszelkie prawa zastrzeżone.