【问题标题】:How to add a Google Drive folder to "My Drive" section to other users如何将 Google Drive 文件夹添加到“我的云端硬盘”部分给其他用户
【发布时间】:2012-10-18 15:37:09
【问题描述】:

我有一个属于我的 Google 云端硬盘分层文件夹和子文件夹结构,我想将它自动添加到我们 Google Apps for Business 域中所有用户的“我的云端硬盘”部分。

我该怎么做?我听说过 Google Apps Script 和 AddToFolder 函数。 拜托,你能帮帮我吗?

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢恩里克!我是该域的管理员,但我不知道如何创建此代码...您有我可以测试的有效代码示例吗?
    • 不,我不知道。而且由于 Drive API 有点新,我怀疑有人曾经在 Apps Script 中这样做过。你可能需要雇人来做这件事。你不能给你的用户发邮件让他们点击一个链接来运行脚本吗?正如我所说,这样的脚本会容易得多。
    • 您好 Henrique,首先我要感谢您的帮助!我也认为通过链接向我们的用户发送电子邮件是最好的选择。你能帮我做这个脚本吗?提前致谢
    【解决方案2】:

    首先,设置一个简单的web app。 Google App Script 编辑器甚至有一个模板,可以帮助您完成大部分工作。

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

    function addRequiredFolders() {
      var root = DocsList.getRootFolder();
      var folderIds = ["somefolderid", "anotherfolderid"];
      folderIds.map( function(id) { DocsList.getFolderById(id).addToFolder(root) } );
    }
    

    到目前为止,我已经测试了它的一个变体。下一步是为您的域发布 Web 应用程序,并将其通过电子邮件发送给人们或以其他方式分发。我认为他们会有一个不愉快的步骤,即需要授予 Web 应用程序访问其文档的权限。

    【讨论】:

      【解决方案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”来实现这个功能。如果有人已经这样做了,得到一些帮助会很高兴。

      塞尔吉

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-02
        • 2017-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多