Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.08.2016, 23:47
Новичок на форуме
Отправить личное сообщение для denndota Посмотреть профиль Найти все сообщения от denndota
 
Регистрация: 10.08.2016
Сообщений: 3

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.

--------------------------------------------------
каждый труд должен быть оплачен

Последний раз редактировалось denndota, 11.08.2016 в 00:02.
Ответить с цитированием
  #2 (permalink)  
Старый 11.08.2016, 05:46
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Сообщение от denndota
Собственно, сам код:
Это не код, а калбек, в который уже приходит undefined и смотреть на этот калбек бесполезно, надо смотреть на то место, где он профтыкается как таковой. Все остальные сообщения об ошибках попросту вытекают из того факта, что в этот калбек приходит ничего.

Последний раз редактировалось warren buffet, 11.08.2016 в 05:49.
Ответить с цитированием
  #3 (permalink)  
Старый 11.08.2016, 05:50
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Вот так обрами

try{

    var content = JSON.parse(request.postData.contents);

}catch(err){console.log(err)};


И наступит тишина.
Ответить с цитированием
  #4 (permalink)  
Старый 11.08.2016, 06:58
Новичок на форуме
Отправить личное сообщение для denndota Посмотреть профиль Найти все сообщения от denndota
 
Регистрация: 10.08.2016
Сообщений: 3

Сообщение от warren buffet Посмотреть сообщение
Вот так обрами

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")
Ответить с цитированием
  #5 (permalink)  
Старый 11.08.2016, 19:13
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Еще раз. Показывай код, который использует doGet.
Ответить с цитированием
  #6 (permalink)  
Старый 11.08.2016, 20:18
Новичок на форуме
Отправить личное сообщение для denndota Посмотреть профиль Найти все сообщения от denndota
 
Регистрация: 10.08.2016
Сообщений: 3

Проблема в том, что другого кода у меня нет
Скрипт взят из инструкции. Полученные request и response записал в своем первом сообщении.
Ответить с цитированием
  #7 (permalink)  
Старый 12.08.2016, 01:31
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Ну так корезоиды же тебе написали отгружать json методом GET по указанному урлу. А ты что отгружаешь?

Цитата:
https://script.google.com/macros/s/A...####id =1###2
Где тут твои данные? Вот это что ли - &#####id=1###2 - ? Чтобы передать json методом GET надо или превратить данные в набор имя=значение (но тогда никаких других пар имя=значение быть не должно) или воткнуть как значение в заранее известное имя, например &json={one:two,three:four}

Короче, выноси мозг корезоидам, это же их креатура.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись в JSON файл Sergei-b84 AJAX и COMET 0 13.04.2016 20:14
Google создание таблицы и запись данных aleks_lv Общие вопросы Javascript 2 07.12.2015 15:05
Запись данных в json файл inflexible AJAX и COMET 6 31.07.2015 21:49
Google Chart - не получается построить график из данных приходящих через json FRIE Общие вопросы Javascript 7 18.04.2014 19:07
Вытащить картинку из JSON для Google Maps claudsp jQuery 0 29.07.2011 01:16