使用google-slides-api自动生成Powerpoint

问题描述 投票:0回答:1

我当时使用此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返回“收到无效的JSON有效负载。未知名称“父母”:找不到字段。“>

python-3.x google-drive-api google-slides-api
1个回答
0
投票
  • 您想使用带有python的google-api-python-client创建到特定文件夹的Google幻灯片。
  • 您要使用Drive API v2。
    • 从您的file_metadata,我这样理解。
  • 您已经能够使用Slides API获取和放置Google幻灯片的值。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

修改点:

  • SLIDES.presentations().create()用于Slides API。在这种情况下,无法使用file_metadata = {'title': 'spreadsheet data DEMO','parents': {'id':folder_id}}。您的问题的原因是这样。
  • 根据您的情况,必须使用Drive API。因此,请添加https://www.googleapis.com/auth/drive的范围。

准备:

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

  1. https://www.googleapis.com/auth/drive添加到合并范围。
  2. 删除凭证文件,包括刷新令牌和访问令牌。该文件是在文件的第一次运行时创建的。
  3. 运行脚本。并请再次授权范围。

这样,将检索具有新作用域的刷新令牌和访问令牌,并创建新的凭证文件。

修改的脚本:

模式1:

在此模式下,首先,由Google Slides API创建Google幻灯片,并将创建的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)

模式2:

在这种模式下,使用Drive API将新的Google幻灯片直接创建到特定文件夹。

示例脚本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

参考:

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

© www.soinside.com 2019 - 2024. All rights reserved.