автоматически генерировать powerpoint с помощью google-slides-api - PullRequest
1 голос
/ 18 января 2020

Я использовал этот веб-сайт в качестве источника для автоматического создания слайдов 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 получена полезная нагрузка . Неизвестное имя "родители": поле не найдено. ">

1 Ответ

2 голосов
/ 19 января 2020
  • Вы хотите создать Google Slides в указанной папке c, используя google-api- python -клиент с python.
  • Вы хотите использовать Drive API v2.
    • Из вашего file_metadata я так понял.
  • Вы уже можете получать и размещать значения для Google Slides с помощью Slides API.

Если мое понимание верно, как насчет этого ответа? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точки модификации:

  • SLIDES.presentations().create() используется для 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. Удалите файл учетных данных, включая refre sh токен и токен доступа. Этот файл создается при первом запуске файла.
  3. Запустите скрипт. И, пожалуйста, авторизуйте области еще раз.

Таким образом, получаются токен refre sh и токен доступа с новыми областями, и создается новый файл учетных данных.

Модифицированный скрипт:

Шаблон 1:

В этом шаблоне сначала слайды Google создаются с помощью API слайдов, а созданные слайды Google перемещаются в указанную папку c.

Измененный скрипт:
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:

В этом шаблоне новые слайды Google создаются непосредственно по заданным параметрам. Папка c с использованием Drive 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())). Пожалуйста, используйте DRIVE и SLIDES, которые вы используете, изменив версию и имя.

Ссылки:

Если я неправильно понял ваш вопрос и это не то направление, которое вам нужно, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...