Google apps script 如何使用GoogleAPI将GoogleSheet部署为Web应用程序

Google apps script 如何使用GoogleAPI将GoogleSheet部署为Web应用程序,google-apps-script,web-applications,google-drive-api,google-sheets-api,google-apps-script-api,Google Apps Script,Web Applications,Google Drive Api,Google Sheets Api,Google Apps Script Api,我对Google Sheets API有点小问题 我的GDrive上有一个谷歌表单文档。我可以使用GoogleSheetsAPI和GoogleDriveAPI使用它。所以我可以移动它,更新它或复制它 我的任务是: 1.复制此文档(我可以这样做) 2.将此副本发布为web应用程序。因此,每个副本内部都有一个doGet()函数,因此可以作为Web应用程序发布。可以手动执行,如:发布->部署为web应用..但我找不到任何API来执行此操作 获取已发布服务的URL 更新 我阅读了文档,我想创建一个新的部

我对Google Sheets API有点小问题

我的GDrive上有一个谷歌表单文档。我可以使用GoogleSheetsAPI和GoogleDriveAPI使用它。所以我可以移动它,更新它或复制它

我的任务是: 1.复制此文档(我可以这样做) 2.将此副本发布为web应用程序。因此,每个副本内部都有一个
doGet()
函数,因此可以作为Web应用程序发布。可以手动执行,如:发布->部署为web应用..但我找不到任何API来执行此操作

  • 获取已发布服务的URL
  • 更新

    我阅读了文档,我想创建一个新的部署(在此之前我应该创建一个版本),但我的新部署NT没有web访问,没有url等。如果我通过
    projects.deployments.list检查,它显示:

    {
      "deploymentId": "AKfycbxVfuoeIQmumgy_Efhw12NCcqE7vqosYoxbDiKj5CT4mL_GbtybXsh1ppMIX22wQX20",
      "deploymentConfig": {
        "scriptId": "1zfjbALVe0jGbZCtqjFR0RP2-O___hR7MtAlx3biuJGXKsrKh3y1W0hMT",
        "versionNumber": 1,
        "manifestFileName": "appsscript",
        "description": "v1"
      },
      "updateTime": "2019-05-13T22:33:23.760Z"
    }
    
    如果我将通过web界面手动执行此操作,看起来

    {
      "deploymentId": "AKfycbyn3smPKxJcZwsm9SzSTtzNCAcWJzf1OVs4WTslvHo",
      "deploymentConfig": {
        "scriptId": "1zfjbALVe0jGbZCtqjFR0RP2-O___hR7MtAlx3biuJGXKsrKh3y1W0hMT",
        "manifestFileName": "appsscript"
      },
      "updateTime": "1970-01-01T00:00:00Z",
      "entryPoints": [
        {
          "entryPointType": "WEB_APP",
          "webApp": {
            "url": "https://script.google.com/macros/s/AKfycbyn3smPKxJcZwsm9SzSTtzNCAcWJzf1OVs4WTslvHo/exec",
            "entryPointConfig": {
              "access": "ANYONE_ANONYMOUS",
              "executeAs": "USER_DEPLOYING"
            }
          }
        }
      ]
    }
    

    需要使用应用程序脚本API。您可以使用RESTAPI并发出
    UrlFetchApp.fetch(url)
    请求。这是一个分两步的过程。首先必须创建新的应用程序脚本文件,然后必须使用清单文件中的新内容更新新的应用程序脚本文件。清单文件必须具有指定部署类型的
    webapp
    属性

    代码可能如下所示:

    function deployA_project() {
      var id, OAuthToken,options,payload,rtrn,url;
    
      id = ScriptApp.getScriptId();//Get the project ID of this script project
      Logger.log('id: ' + id)
    
      url = 'https://script.googleapis.com/v1/projects/' + id + '/deployments';//For REST
    
      OAuthToken = ScriptApp.getOAuthToken();
    
      payload = {
        "versionNumber": number,
        "manifestFileName": string,
        "description": string
      }
    
      options = {
        "method" : "POST",
        "muteHttpExceptions": true,
        "headers": {
          'Authorization': 'Bearer ' +  OAuthToken
        },
        "contentType": "application/json",
        "payload": JSON.stringify(payload)
      };
    
      rtrn = UrlFetchApp.fetch(url,options);
    
      Logger.log('rtrn: ' + rtrn)
    
    
    }
    
    请参阅文档:

    应用程序脚本项目的部署方式在清单文件中指定:

    {
      "timeZone": "America/New_York",
      "dependencies": {
      },
      "webapp": {
        "access": "MYSELF",
        "executeAs": "USER_DEPLOYING"
      },
      "exceptionLogging": "STACKDRIVER"
    }
    
    API不提供用于创建部署类型的配置设置。因此,将部署转化为Web应用程序是通过更新清单文件来完成的。这必须是一个两步的过程。首先,创建新的项目文件,然后使用文件内容的JSON对象对其进行更新。您可以指定名为“appsscript.json”的清单文件的文件内容

    内容必须是JSON,格式如下:

    {
      "scriptId": "scriptId",
      "files": [{
        "name": "appsscript",
        "type": "JSON",
        "source": "{\"timeZone\":\"America/New_York\", \"webapp\": {\"access\": \"MYSELF\",\"executeAs\": \"USER_DEPLOYING\"},\"exceptionLogging\":\"STACKDRIVER\"}",
        "lastModifyUser": {
          "name": "MyName",
          "email": "example@gmail.com",
        }
      }]
    }
    
    您需要向其他url发出另一个请求,并且该请求必须是PUT请求才能进行更新:

      url = 'https://script.googleapis.com/v1/projects/' + id + '/deployments/' + {deploymentId}
    
      var newContent = {
        "scriptId": "scriptId",
        "files": [{
          "name": "appsscript",
          "type": "JSON",
          "source": "{\"timeZone\":\"America/New_York\", \"webapp\": {\"access\": \"MYSELF\",\"executeAs\": \"USER_DEPLOYING\"},\"exceptionLogging\":\"STACKDRIVER\"}",
          "lastModifyUser": {
            "name": "MyName",
            "email": "example@gmail.com",
          }
        }]
      }
    
      var requestBody = {};
      requestBody.files = newContent;
    
      requestBody.deploymentConfig = {
          "scriptId": string,
          "versionNumber": number,
          "manifestFileName": string,
          "description": string
        }
    
      options = {
        "method" : "PUT",
        "muteHttpExceptions": true,
        "headers": {
          'Authorization': 'Bearer ' +  OAuthToken
        },
        "contentType": "application/json",
        "payload": JSON.stringify(requestBody)
      };
    
      rtrn = UrlFetchApp.fetch(url,options);
    
      Logger.log('rtrn: ' + rtrn)
    

    谢谢。我设法创建了一个部门,但我不知道下一步该怎么做。我的部署中没有web入口点。我已经更新了我的帖子。