代码之家  ›  专栏  ›  技术社区  ›  nerya

授予Google Sheets使用Python API部署应用程序脚本的OAuth权限

  •  0
  • nerya  · 技术社区  · 2 年前

    我一直在使用Python中的Google API来创建一个以Google Sheet为其父级的应用程序脚本。在应用程序脚本中,我正在将数据写入父工作表。然而,当我尝试使用API部署应用程序脚本时,我总是收到错误“找不到请求的实体”

    我注意到,当我从web界面手动部署应用程序脚本时,我首先需要授予该脚本OAuth访问Google Sheets的权限。授予权限后,我也可以从API代码成功部署脚本。

    # Import required libraries
    from googleapiclient.discovery import build
    from google.oauth2 import service_account
    
    # Define your credentials
    credentials = service_account.Credentials.from_service_account_file('path/to/credentials.json')
    scopes = ['https://www.googleapis.com/auth/spreadsheets',
            'https://www.googleapis.com/auth/script.projects',
            'https://www.googleapis.com/auth/script.deployments'
    ]
    
    # Build the API service
    service = build('script', 'v1', credentials=credentials)
    def create_script(sheet_id):
        # Create a new Apps Script project
        request = service.projects().create(
            body={
                'title': 'My App Script',
                'parentId': sheet_id
            }
        )
        response = request.execute()
        script_id = response['scriptId']
        script_code=     '''function addRowToSheet() {
        var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
        var newRowData = ['Value 1', 'Value 2', 'Value 3'];  
        sheet.appendRow(newRowData);
        }'''
        request = {
            'files': [
                {
                    'name': 'Code',
                    'type': 'SERVER_JS',
                    'source': script_code
                },
                {
                    'name': 'appsscript',
                    'type': 'JSON',
                    'source': {}.strip()
                }
            ]
        }
        create_file_request = service.projects().updateContent(
            scriptId=script_id,
            body=request
        ).execute()
        return script_id 
    def deploy_script(script_id ):
        # Deploy the Apps Script
        request = service.projects().deployments().create(
            scriptId=script_id ,  # Replace with the ID of your Apps Script
            body={
                'scriptId': script_id,
                'versionNumber': 1,
                'manifestFileName': 'appsscript'
            }
        )
        response = request.execute()
        deployment_id = response['deploymentId']
    

    我的问题是,如何直接从API代码授予所需的OAuth权限?我可以访问具有必要权限的令牌,或者,我如何提示用户使用他们的谷歌帐户进行身份验证以授予项目权限?

    如有任何帮助或指导,我们将不胜感激。非常感谢。

    0 回复  |  直到 2 年前