Запросить лист Google с помощью скрипта Google Apps

Я создал веб-приложение для отслеживания использования транспортных средств внутри моей организации. Одна из функций заключается в том, что приложение просматривает существующую базу данных (Google Таблицы), чтобы проверить, совпадает ли начальный пробег с последним конечным пробегом. Я делаю это с помощью Gviz и запросов на JavaScript.

К сожалению, это делается на стороне клиента. Поскольку у опытного пользователя есть возможность просмотреть исходный код и получить доступ к Google Sheet, я хотел бы переместить его на серверную сторону (в Google Script). Таким образом, они будут видеть только результаты запроса, когда они будут переданы клиенту из Google Script. Пример ниже взят не из моего веб-приложения, это то, с чем я играю, чтобы запросить Google Sheet из Google Script ... Я знаю, как передавать значения от GS клиенту, поэтому моя основная проблема - выяснить, как запрашивать лист Google из скрипта Google.

function myFunction() {

    //Google Sheet  
  var sourceSheetString = 'https://docs.google.com/spreadsheets/d/116J**SheetID**w844/gviz/tq?sheet=Sheet1&headers=1&tq=';
  var query = 'select A,B where B = "Brown" order by A desc';
  var queryString = sourceSheetString + query;
 
  var response = UrlFetchApp.fetch(queryString);
  
  var parsedResponse = JSON.parse(response.getContentText());
  
  Logger.log(parsedResponse);
  
}

К сожалению, мой домен Google Apps не позволяет делиться файлами за пределами домена, поэтому я не смогу делиться файлами и т. Д.

Я рыскал по Интернету в поисках решения, но самое близкое, что я мог придумать, - это UrlFetchApp. Это ошибка, которую я получаю при запуске функции:

SyntaxError: Неожиданный токен: ‹(строка 10 (var parsedResponse), код файла)

Когда я вставляю полную строку URL-адреса в окно браузера, она работает нормально, поэтому я знаю, что проблема не в самой строке запроса.


@SandyGood, когда я регистрирую ответ, я получаю следующее: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta content="width=300, initial-scale=1" name="viewport"> <meta name="description" content="Create a new spreadsheet and edit with others at the same time -- from your computer, phone or tablet. Get stuff done with or without an internet connection. Use Sheets to edit Excel files. Free from Google."> <meta name="google-site-verification" content="LrdT**QXZs"> <title>Google Sheets - create and edit spreadsheets online, for free.</title> <style> a bunch of CSS...


person MSG Jeff Crane    schedule 17.01.2016    source источник
comment
Похоже, вы пытаетесь настроить Execution API. У Google есть руководство с шаблонами на нескольких языках: Создать целевой проект для API выполнения скриптов приложений   -  person BMcV    schedule 17.01.2016
comment
@BMcV, вы предлагаете мне использовать Execution API для запуска автономного проекта скрипта приложений, который выполняет запросы, а затем извлекает результаты?   -  person MSG Jeff Crane    schedule 17.01.2016
comment
Я не знаю, где находится ваше приложение. Развернуто ли оно как веб-приложение? Или он существует в другом домене? Где находится скрипт Google? Это отдельный файл? Или он доступен в редакторе скриптов электронных таблиц?   -  person BMcV    schedule 17.01.2016
comment
Является ли HTTP-ответ на запрос действительным JSON? Если это не так, то его анализ, вероятно, приведет к ошибке. Зарегистрируйте ответ, затем проверьте его на соответствие JSON. Logger.log(response.getContentText()); Вы можете выполнить веб-поиск сайтов, которые проверяют действительный JSON.   -  person Alan Wells    schedule 17.01.2016
comment
См. Эту страницу developers.google.com/chart/interactive/docs/spreadsheets#gid Я бы последовал примеру и остановился на var data = response.getDataTable();, а затем сделал бы с данными все, что вы хотите. Вам нужно будет загрузить API визуализации   -  person User    schedule 18.01.2016
comment
@BMcV развертывается из автономного файла скрипта Google, который использует HTMLService для создания интерфейса / JavaScript. Технически оно не развернуто как веб-приложение, пользователи использовали ссылку на опубликованную версию для доступа к нему.   -  person MSG Jeff Crane    schedule 18.01.2016
comment
@User вот как я его использую сегодня. К сожалению, это клиентский JavaScript, который включает URL-адрес базы данных Google Sheet (строку запроса). При желании пользователь мог вставить URL-адрес в свой браузер и получить доступ ко всей базе данных. Я хочу избежать этого, не открывая строку запроса на стороне клиента, вместо этого запрашивая на стороне сервера, а затем передавая пользователю только результаты запроса.   -  person MSG Jeff Crane    schedule 18.01.2016


Ответы (1)


Как упоминалось в @SandyGood, ошибка, скорее всего, связана с ошибкой синтаксического анализа JSON. Посмотрите на исходный ответ вашей var response = UrlFetchApp.fetch(queryString); строки.

Я предполагаю, что он будет включать что-то вроде

/*O_o*/ google.visualization.Query.setResponse(

за которыми следуют данные json, а затем завершающий );

Сначала удалите эти посторонние части ответа, а затем проанализируйте JSON. Так:

var response = UrlFetchApp.fetch(queryString);
var cleanedResponse = yourCleanFunction(response.getContentText());
var parsedResponse = JSON.parse(cleanedResponse);

Где yourCleanFunction() - это написанная вами функция, которая выполняет необходимую зачистку.

person User    schedule 18.01.2016
comment
Спасибо всем, у меня не было возможности попробовать решение от @ Sandy-Good, но я согласен, возможно, это так. Отчитаюсь с выводами ... - person MSG Jeff Crane; 18.01.2016
comment
@SandyGood, когда я регистрирую ответ, я получаю следующее: `‹! DOCTYPE html ›‹ html lang = en ›‹head›‹ meta charset = utf-8 ›‹ meta content = width = 300, initial-scale = 1 name = viewport ›‹ Meta name = description content = Создайте новую таблицу и редактируйте ее вместе с другими пользователями одновременно - со своего компьютера, телефона или планшета. Делайте что-нибудь с подключением к Интернету или без него. Используйте Таблицы для редактирования файлов Excel. Бесплатно от Google. ›‹ Meta name = google-site-verify content = LrdT ** QXZs ›‹title› Google Sheets - бесплатно создавайте и редактируйте электронные таблицы. ‹/Title› ‹style› куча CSS ... ` - person MSG Jeff Crane; 18.01.2016
comment
Судя по зарегистрированному ответу, URLFetchApp ведет себя иначе, чем когда я просто ввожу строку запроса в строку браузера и нажимаю Enter ... - person MSG Jeff Crane; 18.01.2016
comment
Хотел поблагодарить всех за помощь, мне так и не удалось заставить это работать, но я нашел обходной путь, при котором я создаю запрос в другом листе Google и предоставляю доступ к этому ограниченному набору данных. - person MSG Jeff Crane; 21.01.2016