我有一个属于我的 Google Drive 分层文件夹和子文件夹结构,我想将它自动添加到我们 Google Apps for Business 域中所有用户的“我的云端硬盘”部分。
我怎样才能做到这一点?我听说过 Google Apps Script 和 AddToFolder 函数。拜托,你能帮帮我吗?
提前致谢。
我有一个属于我的 Google Drive 分层文件夹和子文件夹结构,我想将它自动添加到我们 Google Apps for Business 域中所有用户的“我的云端硬盘”部分。
我怎样才能做到这一点?我听说过 Google Apps Script 和 AddToFolder 函数。拜托,你能帮帮我吗?
提前致谢。
首先,设置一个简单的网络应用程序。Google App Script 编辑器甚至有一个模板,可以帮助您完成大部分工作。
其次,实现类似以下的内容并从处理函数中调用它。
function addRequiredFolders() {
var root = DocsList.getRootFolder();
var folderIds = ["somefolderid", "anotherfolderid"];
folderIds.map( function(id) { DocsList.getFolderById(id).addToFolder(root) } );
}
到目前为止,我已经测试了这个变体。下一步是为您的域发布 Web 应用程序,并将其通过电子邮件发送给人们或以其他方式分发。我认为他们会有一个不愉快的步骤,即需要授予 Web 应用程序访问其文档的权限。
如果每个用户都可以访问一个链接并授权一个脚本(您构建的)为他们完成这项工作(在他们的根文件夹中放置一个共享文件夹),这很容易做到。
但是如果有很多用户,你是域的管理员,你真的想在没有人做任何事情的情况下自动完成这一切,这是可能的,但可能很难做到。我的意思是,你需要直接访问Drive API并设置oAuth 2.0 来模拟你的用户,因为 Apps Script 内置的 DocsList API 没有这个模拟功能。如果您真的要这样做,请查看this other question。
现在我已经使用“Google Documents List API”实现了这个功能。我知道这个 API 已被弃用,但现在它可以工作。
(代码未完成)
(...)
//var user = Session.getActiveUser().getUserLoginId() OR
var user = e.parameter.user_email
var TB_folder = e.parameter.TB_folder
var TB_sub_folder = e.parameter.TB_sub_folder
var base = 'https://docs.google.com/feeds/';
var fetchArgs = googleOAuth_('docs', base);
fetchArgs.method = 'POST';
var rawXml = "<?xml version='1.0' encoding='UTF-8'?>" + "<entry xmlns='http://www.w3.org/2005/Atom'>"
+ "<category scheme='http://schemas.google.com/g/2005#kind' "
+ "term='http://schemas.google.com/docs/2007#folder'/>"
+ "<title>" + TB_folder +"</title>"
+ "</entry>";
fetchArgs.payload = rawXml;
fetchArgs.contentType = 'application/atom+xml';
fetchArgs.contentLength = 245;
// POST a https://docs.google.com/feeds/default/private/full
var url = base + user + '/private/full/?v=3&alt=json';
var content = UrlFetchApp.fetch(url, fetchArgs).getContentText()
var json = Utilities.jsonParse(content)
var folder = json.entry.gd$resourceId.$t // -> I get "folder:folder_id"
var id_folder = folder.split(':')[1]
var folder_created_by = json.entry.gd$lastModifiedBy.email.$t
var folder_owner = json.entry.author['0'].email.$t
(...)
现在,您有了文件夹 ID,并且可以使用它来创建另一个子文件夹或文件...
你需要这个功能:
//Google oAuth
function googleOAuth_(name,scope) {
var oAuthConfig = UrlFetchApp.addOAuthService(name);
oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oAuthConfig.setConsumerKey("XXXXXXXX");
oAuthConfig.setConsumerSecret("XXXXXXXXXXXXXXXXXXX");
//oAuthConfig.setConsumerKey("anonymous");
//oAuthConfig.setConsumerSecret("anonymous");
return {oAuthServiceName:name, oAuthUseToken:"always"};
}
您可以创建文件或将用户添加到文件(添加 wriker)。
现在我想用“Drive API”来实现这个功能。如果有人这样做了,得到一些帮助会很好。
塞尔吉