403 с `scripts.run` с клиентом API Google Python - PullRequest
0 голосов
/ 02 декабря 2018

При попытке протестировать API выполнения с клиентом Python Google API, в котором в настоящее время у нас есть только одна функция, которая выводит строку, мы, похоже, получаем 403 с сообщением "The caller does not have permission".Мы смогли заставить библиотеку работать с созданием новых скриптов в соответствии с быстрым стартом.Другие люди задавали аналогичные вопросы, например:

Почему сценарий моих приложений, развернутый как исполняемый файл API, возвращает «Отказано в доступе»?

Но я вижу общий потоксам сценарий должен иметь консольный проект, связанный как Resources > Developer Console Project, но теперь он изменен на Resources > Cloud Platform Project, и изменение идентификатора на тот, который принадлежит консольному проекту, который мы имеем с кредитами OAuth2, не работает, так каккажется, что этот проект не существует.До того, как наткнуться на этот поток, даже не казалось очевидным, что нам нужно подключиться к облачной платформе для выполнения scripts.run.Между прочим, у нас также включен API сценариев приложений для консольного проекта.

Включенный здесь код (наполовину завершенный, поэтому есть цикл for, который просто выполняется один раз с жестко закодированным идентификатором сценария):

from googleapiclient import errors
from googleapiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
from pprint import pprint
from time import sleep

SCOPES = ['https://www.googleapis.com/auth/drive.readonly', 'https://www.googleapis.com/auth/forms']

if __name__ == '__main__':
    store = file.Storage('token-app.json')
    creds = store.get()

    if not creds or creds.invalid:
        flow = client.flow_from_clientsecrets('credentials.json', SCOPES)
        creds = tools.run_flow(flow, store)

    store_cloud = file.Storage('token-cloud.json')
    creds_cloud = store_cloud.get()

    if not creds_cloud or creds_cloud.invalid:
        flow = client.flow_from_clientsecrets('credentials-cloud.json', SCOPES)
        creds_cloud = tools.run_flow(flow, store_cloud)

    service = build('drive', 'v3', http=creds.authorize(Http()))
    apps_service = build('script', 'v1', http=creds_cloud.authorize(Http()))

    results = service.files().list(
        q=("mimeType='application/vnd.google-apps.form'"), pageSize=10, 
            fields="nextPageToken, files(id, name)").execute()
    items = results.get('files', [])

    if not items:
        print('No files found.')
    else:
        print('Files:')
        for item in items:
            # print(item.keys())
            print(u'{0} ({1})'.format(item['name'], item['id']))
            script_id = 'SCRIPT_ID'

            try:
                response = apps_service.scripts().run(scriptId=script_id, 
                    body={'function': 'myFunction'}).execute()
                pprint(response.to_json())
            except errors.HttpError as error:
                pprint(error.content)

Любой совет о том, где искать или что было изменено на то, что высоко ценится, так как на этот вопрос, похоже, ответили несколько лет назад, так что догадки немного изменились?

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