Google Slides API: нет "client_secret.json" - PullRequest
0 голосов
/ 28 ноября 2018

Я новичок в Google Slides API и пытаюсь создать слайд-колоду для ежедневных заголовков новостей, заменив графические и текстовые заполнители (для справки см. https://www.youtube.com/watch?v=8LSUbKZq4ZY и http://wescpy.blogspot.com/2016/11/using-google-slides-api-with-python.html).

Но когда я пытаюсь запустить свою модифицированную программу, я получаю сообщение об ошибке, в котором говорится, что файл или каталог не существует, называется client_secret.json "(который включен в код учебника API). Код учебника рассчитан на 2 годаназад, поэтому я не уверен, были ли какие-либо обновления в API Слайдов Google, но я очень признателен за помощь в решении этой проблемы. Ниже приведен мой код (примечание: "очищенный список" представляет собой список словарей с каждым словаремсодержит значение для ключей "заголовок" и "imgURL".)

from __future__ import print_function
from apiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
from datetime import date

from scrapef2 import scrape

scrapedlist = scrape()

TMPLFILE = 'CrimsonTemplate'   # use your own!
SCOPES = (
    'https://www.googleapis.com/auth/drive',
    'https://www.googleapis.com/auth/presentations',
)
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
    flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
    creds = tools.run_flow(flow, store)
HTTP = creds.authorize(Http())
DRIVE  = discovery.build('drive',  'v3', http=HTTP)
SLIDES = discovery.build('slides', 'v1', http=HTTP)

rsp = DRIVE.files().list(q="name='%s'" % TMPLFILE).execute().get('files')[0]
DATA = {'name': '[DN] '+ str(date.today())}
print('** Copying template %r as %r' % (rsp['name'], DATA['name']))
DECK_ID = DRIVE.files().copy(body=DATA, fileId=rsp['id']).execute().get('id') # TO DO: How to copy into a specific folder

for i in range(3):
    print('** Get slide objects, search for image placeholder')
    slide = SLIDES.presentations().get(presentationId=DECK_ID,
            fields='slides').execute().get('slides')[i]
    obj = None
    for obj in slide['pageElements']:
        if obj['shape']['shapeType'] == 'RECTANGLE':
            break

    print('** Replacing placeholder text and icon')
    reqs = [
        {'replaceAllText': {
            'containsText': {'text': '{{Headline}}'},
            'replaceText': scrapedlist[i]["headline"]
        }},
        {'createImage': {
            'url': scrapedlist[i]["imgURL"],
            'elementProperties': {
                'pageObjectId': slide['objectId'],
                'size': obj['size'],
                'transform': obj['transform'],
            }
        }},
        {'deleteObject': {'objectId': obj['objectId']}},
    ]
    SLIDES.presentations().batchUpdate(body={'requests': reqs},
            presentationId=DECK_ID).execute()
    print('DONE')

1 Ответ

0 голосов
/ 28 ноября 2018

Никогда не использовал python google api, но ошибка указывает, что у вас нет файла 'client_secret.json' или он находится не в том месте.

Сценарий 1 - у вас нет файла 'client_secret.json'

Этот файл используется API для автоматической проверки того, что вы являетесь вами.При этом все вызовы API выполняются от вашего имени.Чтобы получить этот файл:

  • перейдите на Консоль API Google
  • откройте свой проект (или создайте новый)
  • нажмите «Включить API»и службы », чтобы найти и включить Google Slides API
  • , нажмите« Учетные данные »в левом меню, а затем« Создать учетные данные »->« Идентификатор клиента oAuth »
  • выберите веб-приложение, примите все окна
  • теперь вы должны увидеть новые учетные данные в списке, вы можете нажать на них, и в верхнем меню появится кнопка с названием «скачать JSON», там вы получите свои учетные данные (которые по имени являются секретными, поэтому храните их где-нибудьsafe)

Сценарий 2 - ваш файл 'client_secret.json' находится в неправильном месте

В этом случае я не могу быть очень полезным, просто попробуйте проверить библиотеку, чтобы узнать, гдеон ищет файл и помещает его туда (каталог библиотеки, корневой каталог проекта, трудно сказать).

Дайте мне знать, сработало ли это, поскольку API Google и их библиотеки иногда работают неожиданно.

...