Поиск в папке Google Диск с сайта Google с использованием скрипта Apps

Я создал сайт Google, который содержит много папок на Google Диске. Всякий раз, когда я выполняю поиск с помощью функции поиска на Сайтах Google, я могу найти только те слова, которые принадлежат Сайту Google. Таким образом, папки Google Drive не включены в результаты поиска.

Во всяком случае, я искал в Интернете, и я наткнулся на этот кусок кода:

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 Search Appliance на сайте Google. (ссылка: сайт Google с измененной кнопкой поиска. (скрипт встроен в страницу: zoeken ==> просто добавьте "/zoeken" к URL-адресу.) Однако каждый раз, когда я выполняю поиск, я получаю ошибку TypeError. Есть ли кто-нибудь, кто может чтобы исправить приведенный выше сценарий или знает фрагмент кода, который позволит мне искать в папке Google Диска с сайта Google? Любая помощь будет высоко ценится.

2 ответа

Пытался сделать то же самое и нашел этот пост через гугл. Там было не так уж много, поэтому я подумал, что я добавлю то, что нашел. Решение Мэтта работало, за исключением того, что UiApp с тех пор обесценивается. Вот то же самое, не используя UiApp с некоторыми jquery и табличным сортировщиком моего коллеги. Надеясь, что другие могут использовать это, исправить любую проблему, которую они находят, и улучшить это еще немного.

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

Вот некоторый рабочий код для поиска подпапок, а также указанной папки. Обратите внимание, что если вы ищете большой каталог, запуск займет некоторое время и будет пустым. Возможно, стоит добавить что-то вроде "обработки" уведомлений и проверки ошибок. Надеюсь, это кому-нибудь поможет. Не стесняйтесь исправлять любые ошибки или плохой код практики.

    /* 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;
}
Другие вопросы по тегам