google-apps-script - 在另一个项目文件中调用 Google Apps 脚本
问题描述
我正在尝试使用 UrlFetchApp.fetch在此处的示例之后调用另一个项目文件中的 Google Apps 脚本文件。
我遇到了与原始海报提到的相同的错误,但我的样本没有成功。
Google 在过去 4 年中是否更改了某些内容以阻止我调用其他脚本文件?
请参阅下面的脚本。
下面是我用来调用其他项目文件的函数
function makeRequest()
{
var webAppUrl = "https://script.google.com/macros/s/***/exec";
var auth = ScriptApp.getOAuthToken();
var header = { 'Authorization': 'Bearer ' + auth };
var options = { 'method':'post', 'headers':header };
var resp = UrlFetchApp.fetch(webAppUrl, options);
Logger.log(resp);
}
下面是我试图调用的函数。此外,我已经运行了 authorizeDrive 函数并作为 webapp 发布。
function authorizeDrive()
{
var forScope = DriveApp.getRootFolder();
}
function doPost()
{
var ss = SpreadsheetApp.openById('ssID');
var name = ss.getName();
Logger.log('called');
return ContentService.createTextOutput(name);
}
解决方案
- 您想通过从 GAS 项目 B 访问 Web 应用程序来运行 GAS 项目 A 中的 Google Apps 脚本。
- 在您的情况下,Web 应用程序由
Who has access to the app:
ofOnly myself
或部署Anyone
。- 您想使用访问令牌访问 Web 应用程序。
- GAS 项目 A 和 B 在您的 Google Drive 中。
如果我的理解是正确的,这个答案怎么样?请认为这只是几个可能的答案之一。
我认为在您的情况下,需要将范围添加到项目中,包括makeRequest()
. 那么为了增加使用访问令牌访问Web Apps的范围,下面的修改如何?
修改后的脚本:
function makeRequest()
{
var webAppUrl = "https://script.google.com/macros/s/***/exec";
var auth = ScriptApp.getOAuthToken();
var header = { 'Authorization': 'Bearer ' + auth };
var options = { 'method':'post', 'headers':header };
var resp = UrlFetchApp.fetch(webAppUrl, options);
Logger.log(resp);
}
// DriveApp.getFiles() // This comment line is used for automatically detecting the scope.
- 请添加
// DriveApp.getFiles()
注释行的。此注释行用于自动检测范围。 - 在这种情况下,
https://www.googleapis.com/auth/drive.readonly
被添加到范围。如果这不能解决您的问题,请添加// DriveApp.createFile(blob)
. 在这种情况下,https://www.googleapis.com/auth/drive
添加。
笔记:
- Web Apps端脚本修改后,请重新部署为新版本。这样,最新的脚本就会反映到 Web 应用程序中。请注意这一点。
- 如果 Web Apps 的 GAS 项目的所有者不是您的帐户,该帐户有脚本
makeRequest()
,请首先将 Web Apps 的 GAS 项目文件共享到您的帐户。那么,请测试一下。此规范已于 2018 年 4 月 11 日添加。另外,请注意这一点。
参考:
如果我误解了您的问题并且这不是您想要的结果,我深表歉意。
推荐阅读
- python - Chart JS 使用 1,2,3 作为我的第二个数据集的点的 y 值,而不是它们传入的标签
- swift - Swift allSatisfy 允许“输入”或换行
- javascript - 获取请求用户名 firebase [VUE]
- vba - 在访问 vba 中,如果我尝试手动步进代码,它会工作 2-3 行,然后执行其余的不步进
- node.js - TypeError: (depth0 || container.hooks.helperMissing).call 不是函数
- javascript - Next js:将钩子作为参数传递给另一个文件中存在的函数是否很好?
- django - PUT方法中django rest框架的html形式没有CSRF输入字段
- postgresql - 如何在 PostgreSQL SELECT 语句中使用自定义类型枚举?
- python - 如何提示输入直到日期格式和时间格式正确?
- r - 使用 R (CRAN) 在多列中以特定模式分隔