Google应用脚本自定义驱动器搜索延迟

时间:2015-11-17 23:00:23

标签: google-apps-script

我已经设置了Google网站,使用this tutorial中详述的自定义搜索引擎,以便能够在云端硬盘中搜索文件。我对此设置的一个问题是它似乎无法递归搜索。所以我点了Developers Reference并对其进行了修改以便能够做到这一点:

function doGet(e) {
  var folders = DriveApp.getFolders();
  var app = UiApp.createApplication();
  var panel = app.createVerticalPanel();
  while(folders.hasNext()) {
    var folderIterator = folders.next();
    var results = folderIterator.searchFiles('fullText contains "' + e.parameter.q + '"');
    while(results.hasNext()) {
      var file = results.next();
      panel.add(app.createAnchor(file.getName(), file.getUrl()));
    } 
  }
  var scrollPanel = app.createScrollPanel(panel).setHeight(200);
  app.add(scrollPanel);

  return app;
}

问题是,原始解决方案(特定于文件夹)大约需要1分钟才能返回。递归解决方案(搜索用户有权访问的所有文件)最多可能需要2分钟。有什么想法我们如何优化它返回,比方说,10秒或更短?鉴于我们正在讨论少于200个文件的顺序,考虑到谷歌的搜索能力,这应该是完全可行的。这不合理吗?

1 个答案:

答案 0 :(得分:0)

我的问题的主要动机是延迟 - 自定义驱动器搜索在Google网站中使用的时间太长。感谢Sandy Good指出UiApp is deprecated. Use HTML Service.。如果你发布这个作为答案,我很高兴标记:)

将所有内容移动到驱动器中的单个文件夹后,这就是我想出的内容:

// rewrite
function doGet(e) {
  var results = DriveApp.getFolderById('<drive id here>').searchFiles('fullText contains "' + e.parameter.q + '"');
  var output = HtmlService.createHtmlOutput('Results: <br /><br /><ul>');
  while (results.hasNext()) {
    var file = results.next();
    output.append('<li><a href="' + file.getUrl() + '">' + file.getName() + '</a></li>');
  }
  output.append('</ul>');
  return output;
}