使用 google-幻灯片-api 自动生成 powerpoint

generate powerpoint automatically using google-slides-api

我使用此 website 作为源,使用 google 电子表格中的内容自动生成 google 幻灯片。一切正常,但我无法将其保存到我的 google 驱动器中的文件夹中。有人可以帮助我吗?

我试过了:

folder_id = 'xxx'
file_metadata = {'title': 'spreadsheet data DEMO','parents': {'id':folder_id}}

DATA = {'title': 'Generating slides from spreadsheet data DEMO'}
rsp = SLIDES.presentations().create(body=file_metadata).execute()
deckID = rsp['presentationId']
titleSlide = rsp['slides'][0]
titleID = titleSlide['pageElements'][0]['objectId']
subtitleID = titleSlide['pageElements'][1]['objectId']

然后出现错误:

HttpError: https://slides.googleapis.com/v1/presentations?alt=json returned "Invalid JSON payload received. Unknown name "parents": Cannot find field.">

  • 您想使用 google-api-python-客户端和 python.[=77 创建一个 Google 幻灯片到特定文件夹=]
  • 您想使用云端硬盘 API v2。
    • 从你的file_metadata,我是这样理解的。
  • 您已经能够使用幻灯片 API.
  • 获取和放置 Google 个幻灯片的值

如果我的理解是正确的,这个答案怎么样?请将此视为几个可能的答案之一。

修改点:

  • SLIDES.presentations().create() 用于幻灯片 API。在这种情况下,不能使用 file_metadata = {'title': 'spreadsheet data DEMO','parents': {'id':folder_id}}。你的问题的原因是这样的。
  • 在您的情况下,需要使用驱动器 API。所以请加上https://www.googleapis.com/auth/drive.
  • 的范围

准备:

在 运行 脚本之前,请使用以下流程更新范围。如果您的访问令牌具有此范围,则不需要执行以下流程。

  1. https://www.googleapis.com/auth/drive 添加到范围。
  2. 删除包含刷新令牌和访问令牌的凭据文件。此文件创建于文件的第一个 运行。
  3. 运行 脚本。并请重新授权示波器。

由此,检索具有新范围的刷新令牌和访问令牌并创建新的凭证文件。

修改后的脚本:

模式 1:

在此模式中,首先,Google 幻灯片由幻灯片 API 创建,并将创建的 Google 幻灯片移动到特定文件夹。

修改脚本:
SLIDES = build('slides', 'v1', credentials=creds) # or  SLIDES = discovery.build('slides', 'v1', http=creds.authorize(Http()))
DRIVE = build('drive', 'v2', credentials=creds) # or  DRIVE = discovery.build('drive', 'v2', http=creds.authorize(Http()))

# Create new Google Slides using Slides API.
DATA = {'title': 'spreadsheet data DEMO'}
rsp = SLIDES.presentations().create(body=DATA).execute()
file_id = rsp['presentationId']

# Move created Google Slides to specific folder using Drive API v2.
folder_id = '###'
file_metadata = {'parents': [{'id': folder_id}]}
res = DRIVE.files().update(
    fileId=file_id,
    body=file_metadata,
).execute()
print(res)

如果使用Drive API v3,则变成如下

DRIVE = build('drive', 'v3', credentials=creds) # or  DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))

folder_id = '###'
res = DRIVE.files().update(
    fileId=file_id,
    addParents=folder_id,
    removeParents='root'
).execute()
print(res)

模式二:

在此模式中,新的 Google 幻灯片直接创建到使用驱动器 API 的特定文件夹。

示例脚本 1:使用 Drive API v2
DRIVE = build('drive', 'v2', credentials=creds) # or  DRIVE = discovery.build('drive', 'v2', http=creds.authorize(Http()))

folder_id = '###'
file_metadata = {'title': 'spreadsheet data DEMO',
                 'parents': [{'id': folder_id}],
                 'mimeType': 'application/vnd.google-apps.presentation'
                 }
res = DRIVE.files().insert(body=file_metadata).execute()
print(res)
示例脚本 2:使用 Drive API v3
DRIVE = build('drive', 'v3', credentials=creds) # or  DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))

folder_id = '###'
file_metadata = {'name': 'spreadsheet data DEMO',
                 'parents': [folder_id],
                 'mimeType': 'application/vnd.google-apps.presentation'
                 }
res = DRIVE.files().create(body=file_metadata).execute()
print(res)

注:

  • 根据你的问题,我无法理解你使用的是 oauth2client 还是 google-auth。因此,作为示例,我将 DRIVE 显示为 DRIVE = build('drive', 'v2', credentials=creds) # or DRIVE = discovery.build('drive', 'v2', http=creds.authorize(Http()))。请通过修改版本和名称来使用您正在使用的DRIVESLIDES

参考文献:

如果我误解了您的问题并且这不是您想要的方向,我深表歉意。