gpt4 book ai didi

google-apps-script - 使用 Apps 脚本代码用另一个 Apps 脚本文件更新(覆盖)一个 Apps 脚本文件

转载 作者:行者123 更新时间:2023-12-03 19:39:48 26 4
gpt4 key购买 nike

覆盖文件。覆盖 Apps 脚本文件。

这是不是 创建一个新的 Apps 脚本文件的问题。那对我没有帮助。我需要更新 现有的 Apps 脚本文件。这个问题类似于创建一个新文件,但不是同一个问题。更新的语法和更新的要求可能与创建新文件有很大不同,我无法从有关创建新文件的答案中获得解决方案。我查看了创建新文件的答案,但没有回答我的问题。

我曾尝试使用高级驱动器服务将现有的 Apps 脚本文件更新为另一个 Apps 脚本文件。

function updateMyScript() {
var targetFileID = 'File ID';

var dataSource = {
"files": [
{
"id":"739a57da-f77c-4e1a-96df-7d86ef227d62",
"name":"Code",
"type":"server_js",
"source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n"
},
{
"id":"2c7e8b5a-dbc5-4cd2-80e9-77b6291b3167",
"name":"index",
"type":"html",
"source":"\u003chtml\u003e\n \u003cbody\u003e\n New message!!\n \u003c/body\u003e\n\u003c/html\u003e"
}
]
};

var filesResource = Drive.Files.get(targetFileID);
var blob = Utilities.newBlob(JSON.stringify(dataSource), "application/vnd.google-apps.script+json");
var whatRezult = Drive.Files.update(filesResource, targetFileID, blob, {"convert":"true"});

Logger.log('whatRezult: ' + whatRezult);
};
id dataSource 中的属性对象是每个特定的 ID .gshtml项目内的文件。我通过将“目标”Apps 脚本文件下载到 JSON,然后打开 JSON 文件并复制文件 ID 来获得这些 ID。所以,我知道那些是正确的。我想要一种使用代码从项目中检索这些单个文件 ID 的方法。关于创建一个的帖子 新品 应用程序脚本文件,不解释如何从项目文件中获取“子”ID。项目文件 ID 与项目内部的每个文件 ID 不同。 nametype属性很明显。从示例中,只有两种类型的文件具有 server_js 类型。和“html”。它看起来像 source Apps 脚本项目文件的内部文件可以是字符串文字。因此,您可以输入任何您想要的替换内容。
target ID是不言自明的。

如果有办法使用高级驱动器服务或 UrlFetchApp.fetch() 执行此操作那将回答我的问题。我只想使用 Apps 脚本。所以,我不是在寻找用其他语言编写的解决方案,或者从 Apps 脚本外部运行的解决方案。

使用上面的代码,从下一行到最后一行出现错误:
Drive.Files.update(filesResource, targetFileID, blob, {"convert":"true"});

错误是:

The app does not have the required scope to update Apps Scripts.



因此,很明显,它正在寻找要在某处指示的范围设置。我猜它会进入选项的第四个参数。

最佳答案

您需要要求特殊的 Drive-AppsScript scope :

https://www.googleapis.com/auth/drive.scripts

由于您无法告诉 Apps 脚本为您询问此范围(它通过分析您的代码自动确定自己的范围)。您需要自己进行 oAuth 舞蹈(例如使用 Eric's lib)。但是,由于您也无法设置此 token ,您自己检索脚本以在其内置或高级服务调用中使用(无论如何我都不知道),因此您也必须手动执行 UrlFetch 调用,并传递您的标题中的“自定义”标记(如“ create new script ”问题所示。

UrlFetch 调用 updateinsert 非常相似一。只需将方法更改为 PUT并在路径中添加应用程序脚本项目 ID。

var url = "https://www.googleapis.com/upload/drive/v2/files/" + scriptID;
var requestBody = ...; //the same
var options = {
"headers": {
'Authorization': 'Bearer ' + yourManuallyFetchedToken,
},
"contentType": "application/vnd.google-apps.script+json",
"method" : "PUT", //changed here from POST to PUT
"payload": JSON.stringify(requestBody)
}

关于google-apps-script - 使用 Apps 脚本代码用另一个 Apps 脚本文件更新(覆盖)一个 Apps 脚本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34474625/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com