При попытке протестировать 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)
Любой совет о том, где искать или что было изменено на то, что высоко ценится, так как на этот вопрос, похоже, ответили несколько лет назад, так что догадки немного изменились?