jcc*_*ell 2 google-apps-script google-apps-script-api
我正在尝试编写一个独立的 Google Apps 脚本,该脚本使用Google Apps 脚本 API来更新许多 Google 表格的绑定脚本内容。
我有大约 200 个根据模板创建的 Google 表格的工作表 ID。我想更新每张纸上绑定脚本的项目内容,使其与一组主脚本相同。
在使用 urlFetchApp 获取一张纸的绑定脚本的内容作为测试时,我遇到了身份验证错误。错误看起来像:
Request failed for
https://script.googleapis.com/v1/projects/<SCRIPTID>/content returned code 401.
Truncated server response: { "error": { "code": 401,
"message": "Request is missing required authentication credential.
Expected OAuth 2 access token, login cookie ...
(use muteHttpExceptions option to examine full response) (line 34, file "AddScriptsToSheets")
Run Code Online (Sandbox Code Playgroud)
我正在使用的测试函数如下所示:
function getSheetScriptContent(sheetId) {
var sheet = SpreadsheetApp.openById(sheetId);
// Make a POST request with a JSON payload.
// Make a GET request and log the returned content.
var url = PROJECTS_GET_CONTENT_URL.format(sheetId);
var response = UrlFetchApp.fetch(url);
Logger.log(response.getContentText());
}
Run Code Online (Sandbox Code Playgroud)
我认为这个OAuth2 库在这种情况下可能有用,我只是不确定如何使用它。有人能指出我正确的方向吗?
如果您拥有所有文件,则无需使用 OAuth 库或任何特殊代码来获取访问令牌。您可以从类中获取访问令牌ScriptApp。
var theAccessTkn = ScriptApp.getOAuthToken();
Run Code Online (Sandbox Code Playgroud)
您可能需要手动编辑 appsscript.json 清单文件并添加范围:
https://www.googleapis.com/auth/script.projects
Run Code Online (Sandbox Code Playgroud)
{
"timeZone": "Yours will display here",
"dependencies": {
},
"webapp": {
"access": "MYSELF",
"executeAs": "USER_DEPLOYING"
},
"exceptionLogging": "STACKDRIVER",
"oauthScopes": [
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/script.projects",
"https://www.googleapis.com/auth/drive.scripts",
"https://www.googleapis.com/auth/script.container.ui",
"https://www.googleapis.com/auth/script.external_request"
],
"runtimeVersion": "DEPRECATED_ES5"
}
Run Code Online (Sandbox Code Playgroud)
function updateContent(scriptId,content,theAccessTkn) {
try{
var options,payload,response,url;
if (!content) {
//Error handling function
return;
}
if (!theAccessTkn) {
theAccessTkn = ScriptApp.getOAuthToken();
}
//https://developers.google.com/apps-script/api/reference/rest/v1/projects/updateContent
url = "https://script.googleapis.com/v1/projects/" + scriptId + "/content";
options = {
"method" : "PUT",
"muteHttpExceptions": true,
"headers": {
'Authorization': 'Bearer ' + theAccessTkn
},
"contentType": "application/json",//If the content type is set then you can stringify the payload
"payload": JSON.stringify(content)
};
response = UrlFetchApp.fetch(url,options);
//Logger.log('getResponseCode ' + response.getResponseCode())
//Logger.log("Response content: " + response.getContentText())
} catch(e) {
console.log("Error: " + e + "\nStack: " + e.stack)
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1598 次 |
| 最近记录: |