Google Apps Script API - разрешения для моего Python скрипта на выполнение функции скрипта приложений - PullRequest
0 голосов
/ 05 августа 2020

это мой первый вклад здесь.

Я пытаюсь получить доступ к Gmail с помощью сценария python. Для этого я создал функцию скрипта Google Apps и использовал API скрипта приложений между двумя двумя ( Это do c отображает то, что я пытаюсь сделать)

Таким образом, сценарий python правильно обращается к API, но не может выполнить функцию . Хотя он работает в редакторе сценариев, в Python возникает проблема с разрешениями:

'errorMessage': 'Exception: The script does not have permission to perform that action.
Required permissions: (
https://www.googleapis.com/auth/gmail.labels ||
https://www.googleapis.com/auth/gmail.metadata ||
https://www.googleapis.com/auth/gmail.readonly ||
https://www.googleapis.com/auth/gmail.modify ||
https://mail.google.com/
)',
'errorType': 'ScriptError'

Я думаю, это связано с идентификатором клиента OAuth, так как я не смог найти, где предоставить ему разрешения . Я только что:

  • создал учетные данные в Google Cloud Platform,
  • экспортировал их в виде кредитов. json в моей python папке скриптов.

Вот мой код, почти скопированный из учебника:

import pickle
import os.path
from googleapiclient import errors
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# Here I've edited the scopes of authorizations required
SCOPES = [
    "https://www.googleapis.com/auth/gmail.labels",
    "https://www.googleapis.com/auth/gmail.metadata",
    "https://www.googleapis.com/auth/gmail.readonly",
    "https://www.googleapis.com/auth/gmail.modify",
    "https://mail.google.com/"
  ]
    
def get_scripts_service():
    creds = None
    # The file token.pickle stores the user's access and refresh tokens, and is
    # created automatically when the authorization flow completes for the first
    # time.
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    if not creds or not creds.valid:
        if creds and creds.expired and creds.refresh_token:
            creds.refresh(Request())
        else:
            # Here I've placed the downloaded credentials .json file
            flow = InstalledAppFlow.from_client_secrets_file(
                'creds.json', SCOPES)  
            creds = flow.run_local_server(port=0)
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

    return build('script', 'v1', credentials=creds)


service = get_scripts_service()

API_ID = # Here i've pasted my API_ID

request = {"function": # Here i've pasted my functionName} 

try:
    response = service.scripts().run(body=request, scriptId=API_ID).execute()

    print (response)
except errors.HttpError as error:
    # The API encountered a problem.
    print(error.content)

Как мне предоставить разрешения для моего скрипта?

1 Ответ

1 голос
/ 05 августа 2020

Просто, как сказали Антенны! Спасибо. Это произошло потому, что идентификатор клиента был создан до того, как я отредактировал области. Я удалил токен и создал новый.

...