如何将Google云端硬盘文件夹添加到“我的云端硬盘”部分给其他用户

时间:2012-10-18 15:37:10

标签: google-apps-script google-drive-api google-apps

我拥有Google Drive herarchichal文件夹和子文件夹结构,我希望将其自动添加到Google Apps for Business域中所有用户的“我的云端硬盘”部分。

我该怎么做?我听说过Google Apps脚本和AddToFolder功能。 拜托,你能帮帮我吗?

提前致谢。

3 个答案:

答案 0 :(得分:3)

如果每个用户只能访问一个链接并授权一个脚本(您构建)为他们完成工作(将共享文件夹放在他们的根文件夹中),这很容易做到。

但是,如果有很多用户,你是域名的管理员,你真的想自动完成所有事情,没有人做任何事情,这是可能的,但可能很难做到。我的意思是,您需要直接访问Drive API并设置oAuth 2.0 to impersonate您的用户,因为Apps脚本内置的DocsList API没有此模拟功能。如果你真的想要它,请看看这个other question

答案 1 :(得分:3)

首先,设置一个简单的web app。谷歌应用程序脚本编辑器甚至有一个模板,可以帮助你完成大部分工作。

其次,实现类似下面的内容并从处理函数中调用它。

function addRequiredFolders() {
  var root = DocsList.getRootFolder();
  var folderIds = ["somefolderid", "anotherfolderid"];
  folderIds.map( function(id) { DocsList.getFolderById(id).addToFolder(root) } );
}
到目前为止,我已经测试过这种变体。下一步是为您的域发布Web应用程序,并将其通过电子邮件发送给人员或以其他方式分发。我认为他们将需要授予Web应用程序访问其文档的权限,这是令人不愉快的一步。

答案 2 :(得分:3)

目前我已使用“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"};
  }     

您可以创建文件或将用户添加到文件(add a wriker)。

现在我想用“Drive API”实现此功能。如果有人这样做,那么获得一些帮助会很高兴。

塞吉