网淘吧来吧,欢迎您!

返回首页 微信
微信
手机版
手机版

Google Slides

2026-03-24 新闻来源:网淘吧 围观:92
电脑广告
手机广告

Google 幻灯片

通过托管的 OAuth 身份验证访问 Google Slides API。创建和管理演示文稿、添加幻灯片、插入文本和图像,以及控制格式。

快速开始

# 创建新演示文稿
python <<'EOF'
import urllib.request, os, json
data = json.dumps({'title': 'My Presentation'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/google-slides/v1/presentations', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

基本 URL

https://gateway.maton.ai/google-slides/{native-api-path}

{native-api-path}替换为实际的 Google Slides API 端点路径。网关会将请求代理到slides.googleapis.com并自动注入您的 OAuth 令牌。

身份验证

所有请求都需要在 Authorization 标头中包含 Maton API 密钥:

Authorization: Bearer $MATON_API_KEY

环境变量:将您的 API 密钥设置为MATON_API_KEY

export MATON_API_KEY="YOUR_API_KEY"

获取您的 API 密钥

  1. 登录或在maton.ai
  2. 创建账户前往
  3. maton.ai/settings

复制您的 API 密钥

连接管理https://ctrl.maton.ai

管理您的 Google OAuth 连接

列出连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections?app=google-slides&status=ACTIVE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

创建连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

响应:

{
  "connection": {
    "connection_id": "21fd90f9-5935-43cd-b6c8-bde9d915ca80",
    "status": "ACTIVE",
    "creation_time": "2025-12-08T07:20:53.488460Z",
    "last_updated_time": "2026-01-31T20:03:32.593153Z",
    "url": "https://connect.maton.ai/?session_token=...",
    "app": "google-slides",
    "metadata": {}
  }
}

在浏览器中打开返回的URL以完成 OAuth 授权。

删除连接

python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections/{connection_id}', method='DELETE')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

指定连接

如果您有多个 Google Slides 连接,请通过Maton-Connection标头指定要使用哪一个:

python <<'EOF'
import urllib.request, os, json
data = json.dumps({'title': '我的演示文稿'}).encode()
req = urllib.request.Request('https://gateway.maton.ai/google-slides/v1/presentations', data=data, method='POST')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
req.add_header('Content-Type', 'application/json')
req.add_header('Maton-Connection', '21fd90f9-5935-43cd-b6c8-bde9d915ca80')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

如果省略,网关将使用默认的(最早的)活动连接。

API 参考

演示文稿

创建演示文稿

POST /google-slides/v1/presentations
Content-Type: application/json

{
  "title": "我的演示文稿"
}

获取演示文稿

GET /google-slides/v1/presentations/{presentationId}

页面(幻灯片)

获取页面

GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}

获取页面缩略图

GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}/thumbnail

使用自定义尺寸:

GET /google-slides/v1/presentations/{presentationId}/pages/{pageId}/thumbnail?thumbnailProperties.mimeType=PNG&thumbnailProperties.thumbnailSize=LARGE

批量更新

batchUpdate端点用于大多数修改操作。它接受一个请求数组,这些请求会以原子方式应用。

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [...]
}

创建幻灯片

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "createSlide": {
        "objectId": "slide_001",
        "slideLayoutReference": {
          "predefinedLayout": "TITLE_AND_BODY"
        }
      }
    }
  ]
}

可用的预定义布局:

  • 空白
  • 标题
  • 标题和正文
  • 标题和两栏
  • 仅标题
  • 章节标题
  • 单栏文本
  • 要点
  • 大数字

插入文本

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "insertText": {
        "objectId": "{shapeId}",
        "text": "Hello, World!",
        "insertionIndex": 0
      }
    }
  ]
}

删除文本

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "deleteText": {
        "objectId": "{shapeId}",
        "textRange": {
          "type": "ALL"
        }
      }
    }
  ]
}

创建形状

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "createShape": {
        "objectId": "shape_001",
        "shapeType": "TEXT_BOX",
        "elementProperties": {
          "pageObjectId": "{slideId}",
          "size": {
            "width": {"magnitude": 300, "unit": "PT"},
            "height": {"magnitude": 100, "unit": "PT"}
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 100,
            "translateY": 100,
            "unit": "PT"
          }
        }
      }
    }
  ]
}

创建图片

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "createImage": {
        "objectId": "image_001",
        "url": "https://example.com/image.png",
        "elementProperties": {
          "pageObjectId": "{slideId}",
          "size": {
            "width": {"magnitude": 200, "unit": "PT"},
            "height": {"magnitude": 200, "unit": "PT"}
          },
          "transform": {
            "scaleX": 1,
            "scaleY": 1,
            "translateX": 200,
            "translateY": 200,
            "unit": "PT"
          }
        }
      }
    }
  ]
}

删除对象

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "deleteObject": {
        "objectId": "{objectId}"
      }
    }
  ]
}

更新文本样式

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "updateTextStyle": {
        "objectId": "{shapeId}",
        "textRange": {
          "type": "ALL"
        },
        "style": {
          "bold": true,
          "fontSize": {"magnitude": 24, "unit": "PT"},
          "foregroundColor": {
            "opaqueColor": {
              "rgbColor": {"red": 0.2, "green": 0.4, "blue": 0.8}
            }
          }
        },
        "fields": "bold,fontSize,foregroundColor"
      }
    }
  ]
}

替换所有文本

POST /google-slides/v1/presentations/{presentationId}:batchUpdate
Content-Type: application/json

{
  "requests": [
    {
      "replaceAllText": {
        "containsText": {
          "text": "{{placeholder}}",
          "matchCase": true
        },
        "replaceText": "实际值"
      }
    }
  ]
}

代码示例

JavaScript

// 创建演示文稿
const response = await fetch(
  'https://gateway.maton.ai/google-slides/v1/presentations',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    },
    body: JSON.stringify({ title: '我的演示文稿' })
  }
);

const presentation = await response.json();
const presentationId = presentation.presentationId;

// 添加幻灯片
await fetch(
  `https://gateway.maton.ai/google-slides/v1/presentations/${presentationId}:batchUpdate`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': `Bearer ${process.env.MATON_API_KEY}`
    },
    body: JSON.stringify({
      requests: [
        {
          createSlide: {
            slideLayoutReference: { predefinedLayout: 'TITLE_AND_BODY' }
          }
        }
      ]
    })
  }
);

Python

import os
import requests

headers = {
    'Content-Type': 'application/json',
    'Authorization': f'Bearer {os.environ["MATON_API_KEY"]}'
}

# 创建演示文稿
response = requests.post(
    'https://gateway.maton.ai/google-slides/v1/presentations',
    headers=headers,
    json={'title': '我的演示文稿'}
)
presentation = response.json()
presentation_id = presentation['presentationId']

# 添加幻灯片
requests.post(
    f'https://gateway.maton.ai/google-slides/v1/presentations/{presentation_id}:batchUpdate',
    headers=headers,
    json={
        'requests': [
            {
                'createSlide': {
                    'slideLayoutReference': {'predefinedLayout': 'TITLE_AND_BODY'}
                }
            }
        ]
    }
)

注意事项

  • 对象ID在演示文稿中必须是唯一的
  • 所有修改(添加幻灯片、文本、形状等)请使用 batchUpdate
  • batchUpdate 中的多个请求是原子性应用的
  • 尺寸和位置使用 PT(点)作为单位(72 点 = 1 英寸)
  • 使用replaceAllText用于基于模板的演示文稿生成
  • 重要提示:当使用curl命令时,如果URL中包含方括号,请使用curl -g以禁用通配符解析
  • 重要提示:当通过管道将curl输出传递给jq或其他命令时,某些shell环境中可能无法正确展开环境变量,例如$MATON_API_KEY。通过管道传递时,您可能会遇到"无效API密钥"的错误。

错误处理

状态码含义
400缺少Google Slides连接
401Maton API密钥无效或缺失
404未找到演示文稿
429请求频率受限(每个账户10次/秒)
4xx/5xx来自Google Slides API的穿透性错误

故障排除:API密钥问题

  1. 检查MATON_API_KEY环境变量是否已设置:
echo $MATON_API_KEY
  1. 通过列出连接来验证API密钥是否有效:
python <<'EOF'
import urllib.request, os, json
req = urllib.request.Request('https://ctrl.maton.ai/connections')
req.add_header('Authorization', f'Bearer {os.environ["MATON_API_KEY"]}')
print(json.dumps(json.load(urllib.request.urlopen(req)), indent=2))
EOF

故障排除:无效的应用名称

  1. 请确保您的URL路径以google-slides开头。例如:
  • 正确:https://gateway.maton.ai/google-slides/v1/presentations
  • 错误:https://gateway.maton.ai/slides/v1/presentations

资源

免责申明
部分文章来自各大搜索引擎,如有侵权,请与我联系删除。
打赏
文章底部电脑广告
手机广告位-内容正文底部

相关文章

您是本站第236422名访客 今日有38篇新文章/评论