script.google.com - запись JSON в Google Sheet
Здравствуйте
Для рабочих нужд необходимо записывать любое количество/набор данных в гугл таблицу из внешнего(для гугла) сервиса. В пределах разумного, конечно. Для реализации используется script.google.com, который добавляет JSON в мою Google Sheet. Собственно, сам код: function doGet(request) { var content = JSON.parse(request.postData.contents); var row = []; for (var elem in content) { row.push(content[elem]); } var ss = SpreadsheetApp.openById("14#############################kOFZ4") var sheet = ss.getSheetByName("Sheet1"); sheet.appendRow(row); var result = {"result":"ok"}; return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); } Ошибка возникает сначала в самом скрипте, при его проверке в script.google.com: "TypeError: Не удается прочитать свойство "postData" объекта undefined. (строка 3, файл code)" Внешний сервис, который вызывает script.google.com, дает ошибку: "Невалидный JSON" Описание запросов (через знак "#" скрываю ключи и т.п.): request_url: https://script.google.com/macros/s/AKfycby############################ETMp/exec?param0=test_task_0&#####signature=4882285###################cac4da&#####time=1470859946&#####id=1###2 request_header: {"User-Agent":"##########","Connection":"close","Accept-Charset":"utf-8","Content-Type":"application/json;charset=UTF-8","##############":"1###2"} response_body: TypeError: Не удается прочитать свойство "contents" объекта undefined. (рядок 3, файл "Код", проект "111") <!DOCTYPE html><html><head><link rel="shortcut icon" href="//ssl.gstatic.com/docs/script/images/favicon.ico"><title>Ошибка</title><style type="text/css">body {background-color: #fff; margin: 0; padding: 0;}.errorMessage {font-family: Arial,sans-serif; font-size: 12pt; font-weight: bold; line-height: 150%; padding-top: 25px;}</style></head><body><div><img src="//ssl.gstatic.com/docs/script/images/logo.png"></div><center>[B]TypeError: Не удается прочитать свойство "contents" объекта undefined. (рядок 3, файл "Код", проект "111")[/B]</center></body></html> Доступы из скрипта открыты для любых пользователей включая анонимных. Буду благодарен, и Вашу помощь оценю донатами по 5$ (WMZ) за решение каждой из 2 задачек: 1. Исправить код таким образом, чтобы записать наконец {"param0"="test_task_0"} из этого сервиса в гугл таблицы. И чтобы работало для любого набора данных с JSON... 2. После выполнения п.1 представим, что в таблице уже 100 записей. Туда записывается набор параметров на начале выполнения какой-то процедуры на внешнем сервисе, когда param0=test_task_0, в это время на внешнем сервисе продолжает выполняться процедура, и когда по ней есть конечный ответ param0=succes или param0=error,- нужно перезаписать (modify) строку из гугл таблицы новым значением. Повторюсь, должно работать для любого набора данных с JSON. -------------------------------------------------- каждый труд должен быть оплачен |
Цитата:
|
Вот так обрами
try{ var content = JSON.parse(request.postData.contents); }catch(err){console.log(err)}; И наступит тишина. |
Цитата:
Записал следующим образом: function doGet(request) { try { var content = JSON.parse(request.postData.contents); } catch(err){console.log(err)}; var row = []; for (var elem in content) { row.push(content[elem]); } var ss = SpreadsheetApp.openById("14_r############################Z4") var sheet = ss.getSheetByName("Sheet1"); sheet.appendRow(row); var result = {"result":"ok"}; return ContentService.createTextOutput(JSON.stringify(result)) .setMimeType(ContentService.MimeType.JSON); } Скрипт дает ошибку: ReferenceError: Объект "console" не определен. (строка 7, файл code) response_body: TypeError: Не удается прочитать свойство "contents" объекта undefined. (рядок 3, файл "Код", проект "111") |
Еще раз. Показывай код, который использует doGet.
|
Проблема в том, что другого кода у меня нет :(
Скрипт взят из инструкции. Полученные request и response записал в своем первом сообщении. |
Ну так корезоиды же тебе написали отгружать json методом GET по указанному урлу. А ты что отгружаешь?
Где тут твои данные? Вот это что ли - &#####id=1###2 - ? Чтобы передать json методом GET надо или превратить данные в набор имя=значение (но тогда никаких других пар имя=значение быть не должно) или воткнуть как значение в заранее известное имя, например &json={one:two,three:four} Короче, выноси мозг корезоидам, это же их креатура. |
Часовой пояс GMT +3, время: 17:45. |