Как отображать веб-сайты, содержащие искомое ключевое слово, в электронной таблице Google, используя Google Scripts - PullRequest
0 голосов
/ 29 мая 2018

В настоящее время код Google Script , который я имею, создает кнопку, которая запрашивает у пользователя ключевое слово для поиска.Затем должен вернуть результаты в электронную таблицу, извлекая их URL / имя / заголовок и отображая их в соответствующих столбцах на Google Sheets.Я хочу иметь возможность выполнять поиск, выполнять поиск по определенному сайту, на котором размещены ссылки на подстраницы сайта, и возвращать сайты, содержащие искомый термин в любом месте на этом сайте, и вставлять результаты в электронную таблицу. РЕДАКТИРОВАТЬ Проблема, с которой я сталкиваюсь при запуске кода, состоит в том, что после поиска по ключевому слову электронная таблица возвращает диалоговое окно, указывающее, что «запрошенный вами ресурс не может быть найден», но веб-сайт, который я ищу, на самом деле делаетиметь ключевое слово на нескольких страницах.Вот код, с которым мне нужна помощь:

function websearch() {
  // Prompt the user for a search term
  var websearchTerm = Browser.inputBox("Enter the keyword to search for:");

  // Get the active spreadsheet and the active sheet
  var wss = SpreadsheetApp.getActiveSpreadsheet();
  var wsheet = wss.getActiveSheet();

  // Set up the spreadsheet to display the results
  var theaders = [["Name", "Title", "Web Address"]];
  wsheet.clear();
  wsheet.getRange("A1:C1").setValues(theaders);

  // Search the webpages associated with the given URL 
  var site = SitesApp.getSite("https://sites.google.com/a/umich.edu/hb-ua/");
  //var matches = site.search(websearchTerm);
  var matches = site.search("fullText contains '"+websearchTerm.replace("'","\'")+"'");

  var woutput = [];
  // Loop through the results and get the file name, file title, and URL
  while (site.hasNext()) {
    var wfile = site.next();
    var wname = wfile.getName();
    var wtitle = wfile.getTitle();
    var wurl = wfile.getUrl();
    // push the file details to our output array (essentially pushing a row of data)
    woutput.push([wname, wtitle, wurl]);
  }
  // write data to the sheet
  wsheet.getRange(2, 1, woutput.length, 3).setValues(woutput);

}

Тогда этот код, который я точно знаю, работает, он выполняет то, о чем я прошу помощи, но выполняет поиск через Google Drive вместо сайтов Google / определенных родительских сайтов:

function search(Phrase, FolderID) {
  // Prompt the user for a search term
  var searchTerm = Browser.inputBox("Enter the string to search for:");

  // Get the active spreadsheet and the active sheet
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();

  // Set up the spreadsheet to display the results
  var headers = [["File Name", "File Type", "URL"]];
  sheet.clear();
  sheet.getRange("A1:C1").setValues(headers);

  // Search the files in the user's Google Drive for the search term based on if the word is included in thefile or name
  // Search Reference Guide: https://developers.google.com/apps-script/reference/drive/drive-app#searchFiles(String)
  var files = DriveApp.searchFiles("fullText contains '"+searchTerm.replace("'","\'")+"'");
  //var SearchString = 'fullText contains "' + Phrase + '" and "' + FolderID + '" in parents';
  //var files = DriveApp.searchFiles(SearchString);
  // create an array to store our data to be written to the sheet 
  var output = [];
  // Loop through the results and get the file name, file type, and URL
  while (files.hasNext()) {
    var file = files.next();

    var name = file.getName();
    var type = file.getMimeType();
    var url = file.getUrl();
    // push the file details to our output array (essentially pushing a row of data)
    output.push([name, type, url]);
  }
  // write data to the sheet
  sheet.getRange(2, 1, output.length, 3).setValues(output);
}

Это код запроса диалогового окна поиска:

 function onOpen() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var searchMenuEntries = [ {name: "Search in all files", functionName: "search"}];
  var websearchMenuEntries = [ {name: "Search in all files", functionName: "websearch"}];
  ss.addMenu("Search Google Drive", searchMenuEntries);
  ss.addMenu("Search UMich", websearchMenuEntries);
}

1 Ответ

0 голосов
/ 29 мая 2018

Вы не описали, что не так или какая ошибка отображается.

Но ваш аналог-скрипт, преобразованный из скрипта Drive, выглядит хорошо, за исключением одного:

Попробуйте использовать for(),foreach() или .forEach() вместо .next() до итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...