使用Apps脚本从Google Site搜索Google云端硬盘文件夹

时间:2020-12-01 00:25:18

I have made a Google Site that contains a lot of Google Drive folders. Whenever I do a search using the Google Sites search thing, I can only find words that are one the Google Site. So the Google Drive Folders are not included in the search results.

我创建了一个包含大量Google云端硬盘文件夹的Google网站。每当我使用Google协作平台搜索进行搜索时,我只能找到属于Google网站的字词。因此,Google云端硬盘文件夹不会包含在搜索结果中。

Anyway, 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;
}

I can get this script up and running using Google Search Appliance in the Google Site. (link:Google Site with changed Searchbutton. (script is embedded in page: zoeken ==> just add "/zoeken" to the url.) However, everytime I do a search, I get a TypeError. Is there anybody who is able to correct the script above or knows a piece of code that will allow me to search a Google Drive folder from a Google Site? Any help would be muchly appreciated.

我可以使用Google Site中的Google Search Appliance启动并运行此脚本。 (链接:Google Site已更改Searchbutton。(脚本嵌入页面:zoeken ==>只需将“/ zoeken”添加到网址。)但是,每次我进行搜索时,都会遇到TypeError。是否有人能够纠正上面的脚本或知道一段代码,允许我从谷歌网站搜索谷歌驱动器文件夹?任何帮助将非常感激。

2 个解决方案

#1


Was trying to do the same thing and found this post via google. Wasn't a lot out there so thought I'd add what I found. Matt's solution worked except UiApp has since be depreciated. Here is the same thing done not using UiApp with some jquery and a tablesorter a colleague of my suggested. Hoping others can use it,fix any issue they find, and enhance it some more.

试图做同样的事情,并通过谷歌发现这篇文章。在那里不是很多,所以以为我会添加我发现的东西。 Matt的解决方案起作用,但UiApp已被折旧。以下是不使用UiApp的一些jquery和一个tableorter我的建议的同事。希望其他人可以使用它,修复他们发现的任何问题,并进一步增强它。

// 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;
}

Here is the index.html for this

这是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


Here is some working code for searching subfolders as well as specified folder. Note that if you are searching a large directory this takes a while to run and appears blank. Might be worth adding some sort of "processing" notification and error checking as well. Hope this helps someone. Feel free to correct any mistakes or bad-practice code.

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

    /* 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;
}

#1


Was trying to do the same thing and found this post via google. Wasn't a lot out there so thought I'd add what I found. Matt's solution worked except UiApp has since be depreciated. Here is the same thing done not using UiApp with some jquery and a tablesorter a colleague of my suggested. Hoping others can use it,fix any issue they find, and enhance it some more.

试图做同样的事情,并通过谷歌发现这篇文章。在那里不是很多,所以以为我会添加我发现的东西。 Matt的解决方案起作用,但UiApp已被折旧。以下是不使用UiApp的一些jquery和一个tableorter我的建议的同事。希望其他人可以使用它,修复他们发现的任何问题,并进一步增强它。

// 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;
}

Here is the index.html for this

这是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


Here is some working code for searching subfolders as well as specified folder. Note that if you are searching a large directory this takes a while to run and appears blank. Might be worth adding some sort of "processing" notification and error checking as well. Hope this helps someone. Feel free to correct any mistakes or bad-practice code.

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

    /* 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;
}