【问题标题】:Search Google Drive folder from Google Site using Apps Script使用 Apps 脚本从 Google 站点搜索 Google Drive 文件夹
【发布时间】:2015-05-07 19:04:46
【问题描述】:

我创建了一个包含大量 Google Drive 文件夹的 Google 站点。 每当我使用 Google Sites 搜索功能进行搜索时,我只能找到属于 Google Site 的单词。因此搜索结果中不包含 Google Drive 文件夹。

不管怎样,I was looking on the web and I came across this piece of code:

function doGet(e) {
  var results = DriveApp.getFolderById('File ID').searchFiles('fullText contains "' + e.parameter.q + '"');
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();

  while(results.hasNext()) {
    var file = results.next();
    panel.add(app.createAnchor(file.getName(), file.getUrl()));
  }

  var scrollPanel = app.createScrollPanel(panel).setHeight(800);
  app.add(scrollPanel);
  return app;
}

我可以使用 Google 站点中的 Google Search Appliance 启动并运行此脚本。 (链接:Google Site with changed Searchbutton. (script is embedded in page: zoeken ==> just add "/zoeken" to the url.) 但是,每次我进行搜索时,都会收到 TypeError。有没有人能够更正上面的脚本或知道一段代码可以让我从 Google 站点搜索 Google Drive 文件夹?任何帮助将不胜感激。

【问题讨论】:

  • 收到 TypeError 后,进入脚本编辑器,在 VIEW 菜单下,选择 EXECUTION TRANSCRIPT。在日志的底部,查找说明脚本失败以及在哪一行的消息。如果您能找出代码在哪一行失败,那将有所帮助。
  • 嗨,我将脚本实现为网络应用程序,并且摆脱了 TypeError... 但是,当我执行脚本时(通过搜索:'Blogger'on this site , 它显示了一个空白页面。这可能是非常愚蠢的事情,但我无法让它工作。
  • 也许在你的代码中加入一些错误处理会有所帮助;像try, catch 块。
  • 嗨,我不知道该怎么做... :-)
  • doGet(e)函数名中,括号内有e。那是获取一些数据。然后使用e.parameter.q 检索数据。输入这行代码,就在顶部:Logger.log('e.parameter.q: ' + e.parameter.q) 然后运行您的代码,进入脚本编辑器,使用 VIEW,菜单并选择 LOGS。希望那里会有一行告诉您使用e.parameter.q 检索到的内容。评论它是什么。

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


【解决方案1】:

正在尝试做同样的事情,并通过谷歌找到了这篇文章。那里不是很多,所以我想我会添加我发现的东西。 Matt 的解决方案有效,但 UiApp 已被贬值。这是我建议的同事不使用带有一些 jquery 和 tablesorter 的 UiApp 的相同事情。希望其他人可以使用它,解决他们发现的任何问题,并进一步增强它。

// This code is designed to list files in a google drive folder and output the results as a table.
function doGet(e) {
  var gotResults = getDriveFiles(DriveApp.getFolderById('File ID'), e.parameter.q);

 var output = HtmlService.createTemplateFromFile('index.html');
 output.results = gotResults;
 output.query = e.parameter.q;

  return output.evaluate();
}
function getDriveFiles(folder,search) {
  var files = [];
  var fileIt = folder.searchFiles('fullText contains "' + search + '"');;
  while ( fileIt.hasNext() ) {
    var f = fileIt.next();
    files.push({id: f.getId(), name: f.getName(), URL: f.getUrl(), lastupdate: f.getLastUpdated(), MIME: f.getMimeType(), owner: f.getOwner(), parents: f.getParents()});
  }

  // Get all the sub-folders and iterate
  var folderIt = folder.getFolders();
  while(folderIt.hasNext()) {
    fs = getDriveFiles(folderIt.next(),search);
    for (var i = 0; i < fs.length; i++) {
      files.push(fs[i]);
    }
  }
    return files;
}

这里是 index.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_blank">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.26.2/css/theme.blue.min.css">
    <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.26.2/js/jquery.tablesorter.min.js"></script>
    <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tablesorter/2.26.2/js/jquery.tablesorter.widgets.min.js"></script>   
  </head>
  <body>
    <b>Search:</b> <?= query ?>
    <table>
          <thead>
           <tr>
            <th>File</th>
            <th>Directory</th>
            <th>Owner</th>
            <th>Last Updated</th>
            <th>File Type</th>
           </tr>
          </thead>
          <tbody>
          <? 
          for(var x=0; x<results.length; x++){
            ?><tr>
            <td><a href="<?= results[x].URL ?>" target="_blank"><?= results[x].name ?></a></td>
            <td> <? while (results[x].parents.hasNext()) { ?>
              <?= results[x].parents.next().getName() ?>/
            <? }  ?> </td>
            <td><?= results[x].owner.getName() ?></td>
            <td><?= Utilities.formatDate(results[x].lastupdate, "EDT", "yyyy-MM-dd h:mm a ") ?></td>
            <td><?= results[x].MIME ?></td>
            </tr>
           <? } ?>
           </tbody>
    </table>

    <script>
       $(document).ready(function() { 
          $("table").tablesorter({
            theme: 'blue',
            widgets: ["uitheme","zebra"],
            widgetOptions : {
               zebra : ["even", "odd"],         
            },                  
          });
       });      
    </script>
  </body>
</html>

【讨论】:

    【解决方案2】:

    这是一些用于搜索子文件夹以及指定文件夹的工作代码。请注意,如果您正在搜索大型目录,则需要一段时间才能运行并显示为空白。可能值得添加某种“处理”通知和错误检查。希望这可以帮助某人。随时纠正任何错误或不良实践代码。

        /* adapted origional code and code from here: http://qiita.com/atsaki/items/60dbdfe5ab5133a5f875 */
        function doGet(e) {
      var results = getDriveFiles(DriveApp.getFolderById('File Id'), e.parameter.q);
      var app = UiApp.createApplication();
      var panel = app.createVerticalPanel();
      for(var x=0; x<results.length; x++){
        panel.add(app.createAnchor(results[x].name, results[x].URL));
      }
      var scrollPanel = app.createScrollPanel(panel).setHeight(200);
      app.add(scrollPanel);
      return app;
    }
    function getDriveFiles(folder,search) {
        var files = [];
        var fileIt = folder.searchFiles('fullText contains "' + search + '"');;
        while ( fileIt.hasNext() ) {
            var f = fileIt.next();
            files.push({id: f.getId(), name: f.getName(), URL: f.getUrl()});
        }
    
        // Get all the sub-folders and iterate
        var folderIt = folder.getFolders();
        while(folderIt.hasNext()) {
            fs = getDriveFiles(folderIt.next(),search);
            for (var i = 0; i < fs.length; i++) {
                files.push(fs[i]);
            }
        }
    
        return files;
    }
    

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 2015-07-10
      • 2013-06-26
      • 2020-11-26
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多