Google Slides API 自動生成
概要
Python + Google Slides REST API を使い、ネイティブ Google Slides プレゼンテーションをコードから自動生成する。PPTX経由と違いフォント崩れが発生しない。
前提条件
- 必要なツール: Python 3.x / Antigravity
- 必要なAPI/認証:
- Google Cloud Console の「デスクトップアプリ」OAuthクライアント
- Google Slides API の有効化
- 必要なライブラリ:
google-api-python-client,google-auth,google-auth-oauthlib - 認証情報:
- credentials JSON:
C:\Users\umecc\Downloads\client_secret_640671132144-iaptvn045pcsfroc71m9ndu923nec9co.apps.googleusercontent.com.json - トークン保存先:
~\.google_slides_token.json(初回認証後に自動保存、以降は認証不要)
- credentials JSON:
- Google Cloud プロジェクト: n8n project(プロジェクト番号:
640671132144) - 接続仕様: Google_Slides_API連携仕様
実行手順(プロンプト/コード)
Antigravityへの呼び出しプロンプト
Google Slides API を使って、以下の内容でプレゼンテーションを作成してください。
n8n projectのOAuth認証情報を使い、ネイティブGoogle Slidesとして出力してURLを教えてください。
[スライドの内容をここに記述]
初回セットアップ(済み)
- Google Cloud Console でプロジェクト「n8n project」を選択
- Google Slides API を有効化
- 「認証情報 → OAuthクライアントID → デスクトップアプリ」で作成
- credentials JSON をダウンロード
- スクリプト実行 → ブラウザでOAuth認証 → トークン自動保存
コード / スクリプト
スクリプト保存先: C:\ai_work\B-space\hospital-sms-proposal\create_google_slides.py
# 基本構成
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
SCOPES = ['https://www.googleapis.com/auth/presentations',
'https://www.googleapis.com/auth/drive']
# 認証(初回はブラウザOAuth、以降はトークンでリフレッシュ)
creds = get_credentials()
# スライド作成
slides_service = build('slides', 'v1', credentials=creds)
prs = slides_service.presentations().create(
body={'title': 'プレゼンテーション名'}
).execute()
prs_id = prs['presentationId']
# SlideBuilder でテキストボックス・図形・矢印などを配置
sb = SlideBuilder()
sb.create_slide('slide_1')
sb.set_bg('slide_1', rgb(255, 255, 255))
sb.add_textbox('slide_1', inch(1), inch(1), inch(8), inch(1),
'タイトル', 36, rgb(0,0,0), True)
# バッチ送信(500件ずつ分割)
slides_service.presentations().batchUpdate(
presentationId=prs_id,
body={'requests': sb.requests}
).execute()
url = f'https://docs.google.com/presentation/d/{prs_id}/edit'主要API操作
| 操作 | APIリクエスト |
|---|---|
| スライド追加 | createSlide (predefinedLayout: BLANK) |
| 背景色設定 | updatePageProperties (pageBackgroundFill) |
| テキストボックス | createShape (TEXT_BOX) + insertText + updateTextStyle |
| 角丸四角形 | createShape (ROUND_RECTANGLE) + fillColor |
| 矢印 | createShape (RIGHT_ARROW) |
| 円 | createShape (ELLIPSE) |
| テキストスタイル | updateTextStyle (fontFamily, fontSize, foregroundColor, bold) |
| 段落配置 | updateParagraphStyle (alignment: CENTER/START/END) |
座標系
- 単位: EMU (English Metric Units)
- 1インチ = 914,400 EMU
- 1pt = 12,700 EMU
- ワイドスライド (16:9): 10in × 5.625in
期待される結果
- Google Slides のURLが出力される
- フォントは Noto Sans JP でネイティブ表示(崩れなし)
- Google Drive に自動保存される
- トークンが
~\.google_slides_token.jsonに保存され、次回以降は認証不要
注意事項
- バッチサイズ: API リクエストは500件ずつ分割して送信(上限対策)
- トークン有効期限: refresh_token は長期有効だが、Google Cloud プロジェクトが「テスト」モードの場合は7日で失効 → 再認証が必要
- PPTX経由は非推奨: フォント・デザイン崩れが発生するため、必ずこのAPI方式を使うこと
関連リンク
- 接続情報: Google_Slides_API連携仕様
- 完成品: 病院SMS提案書
- 参考知識: 04_Knowledge
変更履歴
| 日付 | 変更内容 |
|---|---|
| 2026-02-28 | 初版登録。病院SMS提案書の生成で動作確認済み |