# Google Slides API voor automatisering [[TOC]] ## Inleiding tot de Slides API De Google Slides API is een REST-API waarmee je programmatisch presentaties kunt aanmaken, lezen en aanpassen. Typische use cases zijn: - Automatisch rapport-presentaties genereren uit data - Tekst of afbeeldingen vervangen in een sjabloon (mail merge voor slides) - Consistente branding afdwingen over meerdere presentaties - Dia's samenvoegen uit meerdere bronbestanden De API is beschikbaar via directe REST-aanroepen, de Google API Client Libraries (Python, Node.js, Java, Go) en Google Apps Script. ## Authenticatie instellen De Slides API vereist OAuth 2.0 of een serviceaccount. Voor persoonlijk gebruik of kleine scripts gebruik je OAuth 2.0: :::howto title="OAuth 2.0 opzetten in de Cloud Console" 1. Ga naar de [Google Cloud Console](https://console.cloud.google.com/). 2. Maak een project aan of selecteer een bestaand project. 3. Activeer de **Google Slides API** via APIs & Services en dan Library. 4. Maak OAuth 2.0-aanmeldingsgegevens aan (type: Desktop application). 5. Download de `credentials.json`. ::: Voor server-side automatisering gebruik je een **serviceaccount** en deel je de presentatie met het serviceaccount-e-mailadres. Geef het serviceaccount alleen toegang tot de bestanden die het echt nodig heeft. :::warn title="Houd je sleutels uit versiebeheer" Sla `credentials.json` en serviceaccount-sleutels nooit op in je repository. Gebruik omgevingsvariabelen of Google Secret Manager, en roteer sleutels regelmatig. ::: ## Presentatie ophalen ```python from googleapiclient.discovery import build from google.oauth2.credentials import Credentials creds = Credentials.from_authorized_user_file('token.json') service = build('slides', 'v1', credentials=creds) presentation = service.presentations().get( presentationId='PRESENTATION_ID' ).execute() slides = presentation.get('slides') print(f'Presentatie heeft {len(slides)} dia(s)') ``` De `presentationId` vind je in de URL van je presentatie: `docs.google.com/presentation/d/PRESENTATION_ID/edit`. ## Tekst vervangen via batchUpdate De krachtigste methode is `batchUpdate`, waarmee je meerdere wijzigingen in één aanroep doorstuurt. Dat is efficiënter en telt voor je quotum als één write-verzoek per batch: ```python requests = [ { 'replaceAllText': { 'containsText': {'text': '{{NAAM}}', 'matchCase': True}, 'replaceText': 'Jan de Vries' } }, { 'replaceAllText': { 'containsText': {'text': '{{DATUM}}', 'matchCase': True}, 'replaceText': '1 juni 2026' } } ] service.presentations().batchUpdate( presentationId='PRESENTATION_ID', body={'requests': requests} ).execute() ``` Dit is de basis van een mail-merge systeem voor presentaties: maak een sjabloon met placeholders en vervang ze via de API met variabele data. ## Afbeelding vervangen ```python requests = [ { 'replaceAllShapesWithImage': { 'imageUrl': 'https://example.com/foto.jpg', 'imageReplaceMethod': 'CENTER_INSIDE', 'containsText': {'text': '{{FOTO}}'} } } ] ``` :::tip title="Zorg dat afbeeldingen bereikbaar zijn" Gebruik openbaar toegankelijke afbeeldings-URLs, of upload afbeeldingen eerst naar Google Drive en gebruik de Drive-URL met openbare leesrechten. De API moet de afbeelding kunnen ophalen op het moment van de aanroep. ::: ## Presentatie aanmaken vanuit sjabloon De aanbevolen workflow is: :::howto title="Sjabloon kopiëren en vullen" 1. Maak een sjabloon-presentatie handmatig in Slides met placeholders zoals `{{NAAM}}`. 2. Kopieer het bestand via de Drive API met `drive.files().copy(fileId='TEMPLATE_ID', body={'name': 'Nieuwe presentatie'})`. 3. Vervang de placeholders in de kopie via de Slides API met `batchUpdate`. ::: ```python from googleapiclient.discovery import build drive = build('drive', 'v3', credentials=creds) slides = build('slides', 'v1', credentials=creds) kopie = drive.files().copy( fileId='TEMPLATE_ID', body={'name': f'Rapport {datum}'} ).execute() nieuwe_id = kopie['id'] slides.presentations().batchUpdate( presentationId=nieuwe_id, body={'requests': vervang_requests} ).execute() ``` Werk altijd op een kopie en nooit rechtstreeks op het sjabloon, anders raken je placeholders na de eerste run definitief overschreven. ## Apps Script als alternatief Voor gebruikers zonder Python-ervaring is Google Apps Script een laagdrempeliger alternatief. De `SlidesApp`-service biedt directe toegang tot presentaties zonder externe authenticatie: ```javascript function vervangTekst() { const presentatie = SlidesApp.openById('PRESENTATION_ID'); presentatie.replaceAllText('{{NAAM}}', 'Jan de Vries'); } ``` ## Quota en limieten Standaard gebruik van de Slides API is op dit moment gratis. Google heeft aangekondigd dat het overschrijden van de quotumlimieten later in 2026 kosten kan opleveren op je Cloud-factuur. Houd daarom rekening met de actuele limieten en bouw exponential backoff in. De officiële limieten (per project, controleer de [documentatie](https://developers.google.com/workspace/slides/api/limits) voor de laatste stand): | Type verzoek | Per minuut per project | Per minuut per gebruiker | | --- | --- | --- | | Leesverzoeken | 3.000 | 600 | | Schrijfverzoeken | 600 | 60 | | Thumbnail (dure read) | 300 | 60 | Bij overschrijding krijg je een `429`-statuscode. Vang die op met een retry met exponentieel oplopende wachttijd, en bundel waar mogelijk wijzigingen in één `batchUpdate` om verzoeken te besparen. :::faq ### Wat zijn de quotumlimieten van de Slides API? Per project geldt standaard ongeveer 600 schrijfverzoeken en 3.000 leesverzoeken per minuut. Per gebruiker is dat ongeveer 60 schrijf- en 600 leesverzoeken per minuut. Je kunt een verhoging aanvragen via de Cloud Console, maar dat wordt niet gegarandeerd toegekend. ### Kan ik via de API dia-overgangen of animaties instellen? Nee. De Slides API ondersteunt het lezen en schrijven van dia-inhoud en opmaak, maar niet de overgangen tussen dia's of element-animaties. ### Welke bestandsformaten kan ik exporteren? Het exporteren gaat via de Drive API met het `files.export`-endpoint. Je kunt onder meer naar PDF en PPTX exporteren, en per dia een afbeelding ophalen als PNG of JPEG via het thumbnail-endpoint. ### Is de Slides API gratis? Standaard gebruik is op dit moment gratis. Google heeft wel aangekondigd dat het overschrijden van de quotumlimieten later in 2026 in rekening gebracht kan worden op je Cloud-factuur, dus controleer de actuele voorwaarden voor productiegebruik. ### Wat is het verschil tussen OAuth 2.0 en een serviceaccount? OAuth 2.0 werkt namens een ingelogde gebruiker en is geschikt voor scripts en desktoptools. Een serviceaccount werkt zonder gebruiker en is bedoeld voor server-side automatisering. Bij een serviceaccount moet je de presentatie expliciet delen met het serviceaccount-e-mailadres. ::: ## Praktijkvoorbeeld: weekrapporten Een typisch praktijkgeval is een wekelijks rapport dat automatisch gegenereerd wordt uit een Google Spreadsheet: 1. Lees data uit de Spreadsheet via de Sheets API. 2. Kopieer het sjabloon via de Drive API. 3. Vervang placeholders in de kopie via de Slides API. 4. Stuur de link naar het rapport via de Gmail API. Dit hele proces automatiseer je met een Cloud Run-functie die elke maandag wordt getriggerd via Cloud Scheduler.