StackOverflow和Google Apps脚本的新功能。我感谢任何帮助/指导。
任务:
我正在尝试编写一个Google Apps脚本,它会将指定文件夹中所有文件的所有权转让给一个所有者。我是Google企业应用专业版帐户的超级管理员。但是,我既不是原始所有者也不是新所有者,并且出于安全原因,新所有者不能是超级管理员(因此运行脚本)。原始所有者和新所有者都在同一个域中。
我找到了following code,我已经使用并调整了用于我的目的,但是我收到了“请求失败的返回代码400.服务器响应:”来自URLFetchApp调用的错误。
我做了什么:
每个人 Google Apps Documents List developers guide我更改了“base”变量以模拟新文档所有者:
var base = 'https://docs.google.com/feeds/';
到
var base = encodeURIComponent('https://docs.google.com/feeds/'+newOwnerEmail+'/private/full');
我还将使用者密钥和密码更新为googleOAuth_()方法中的正确值。有了这个,这里是代码的整个部分,包括有问题的行:
file.removeEditor(newOwnerEmail);
var base = encodeURIComponent('https://docs.google.com/feeds/'+newOwnerEmail+'/private/full');
var fetchArgs = googleOAuth_('docs', base);
fetchArgs.method = 'POST';
var rawXml = "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gAcl='http://schemas.google.com/acl/2007'>"
+"<category scheme='http://schemas.google.com/g/2005#kind' "
+"term='http://schemas.google.com/acl/2007#accessRule'/>"
+"<gAcl:role value='owner'/>"
+"<gAcl:scope type='user' value='"+newOwnerEmail+"'/>"
+"</entry>";
fetchArgs.payload = rawXml;
fetchArgs.contentType = 'application/atom+xml';
var url = base + encodeURIComponent(oldOwnerEmail + '/private/full/'+fileId+'/acl&alt=json');
try { var content = UrlFetchApp.fetch(url, fetchArgs).getContentText(); }
catch (err) { Logger.log(err.message) }
每次应用程序“尝试”执行UrlFetchApp.fetch()方法时,应用程序“捕获”400错误。
问题:
我在这里可能会缺少什么? “fetchArgs”在某种程度上是否格式错误(也许是“fetchArgs”正在被输入的“rawXML”)?使用新的Google Drive SDK,使用此API是一个更好的选择吗?我很感激我可能错过的任何指导或资源,以及改进如何提出这些问题的任何提示。提前谢谢。
答案 0 :(得分:1)
解决了这个问题。
我删除了encodeURIComponent()方法,这显然不是URL所必需的。我还使用OAuthApp库(found here)开始构造URLFetchApp.fetch()方法的获取选项。我不确定这些修补程序中是否只有一个或两个解决了这个问题,但是脚本现在一直有用,所以我很开心。
完整的更新代码如下:
function changeOwner(newOwnerEmail, file)
{
var fileId = file.getId();
var oldOwnerEmail = file.getOwner().getEmail();
if (oldOwnerEmail == newOwnerEmail) { return; }
file.removeEditor(newOwnerEmail); //should this be oldOwnerEmail?
var base = 'https://docs.google.com/feeds/';
var options = OAuthApp.getAuth('docs');
options.method = 'POST';
var rawXml = "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gAcl='http://schemas.google.com/acl/2007'>"
+"<category scheme='http://schemas.google.com/g/2005#kind' "
+"term='http://schemas.google.com/acl/2007#accessRule'/>"
+"<gAcl:role value='owner'/>"
+"<gAcl:scope type='user' value='"+newOwnerEmail+"'/>"
+"</entry>";
options.payload = rawXml;
options.contentType = 'application/atom+xml';
var API_KEY = getAPIKey();
var url = base + oldOwnerEmail+'/private/full/'+fileId+'/acl?v=3&alt=json&key='+API_KEY
try
{
var result = UrlFetchApp.fetch(url, options);
docsObject = Utilities.jsonParse(result.getContentText());
}
catch (err) { Logger.log(err.message) }
}//end changeOwner()