Добавил еще ведущие нули к миллисекундам, если кому-то еще когда-то этот код понадобится
log = function (text, color, define){ var id, time, thread, logHtml, textLog; define = (typeof define == 'string') ? define.split(/[\s,.|:;]+/g) : define; if(typeof define === 'object' && define !== null){ if(Array.isArray(define)){ id = define.indexOf('id') > -1; time = define.indexOf('time') > -1; thread = define.indexOf('thread') > -1; } else{ id = define.id == true; time = define.time == true; thread = define.thread == true; } } else id = time = thread = true; id = id ? '<a href="action://action' + ScriptWorker.GetCurrentAction() + '" style="color:gray;">[' + ScriptWorker.GetCurrentAction() + ']</a>' : ''; time = time ? ' ' + getTime() : ''; thread = thread ? ' Поток №' + thread_number() : ''; logHtml = (id || time || thread) ? id + '<span style="color: white">' + time + thread + ' : </span>' : ''; logHtml += '<span style="color:' + (color ? color : 'white') + '">' + text + '</span>'; textLog = '[' + ScriptWorker.GetCurrentAction() + ']' + time + thread + ' : ' + text function getTime(){ var checkTime = function(i){ return (i < 10) ? "0" + i : i; }; var checkMilliSeconds = function(ms){ if (ms < 10) { return "00" + ms; } else if (ms < 100) { return "0" + ms; } else { return ms; } }; var d = new Date(); var hh = checkTime(d.getHours()); var mm = checkTime(d.getMinutes()); var ss = checkTime(d.getSeconds()); var ms = checkMilliSeconds(d.getMilliseconds()); return '[' + hh + ':' + mm + ':' + ss + '.' + ms + ']'; }; Logger.WriteHtml(logHtml, textLog); }Как в гет запросе в качестве параметра передать url адрес целиком?
-
@fox , Нашел все таки что не работает. В строке гет запроса в басе написано это:
"https://script.google.com/macros/s/.../exec?p1=writeTitle&p2=" + [[URL]] + "&p3=" + [[PIC_A]] + "&p4=" + [[PIC_B]] + "&p5=" + [[TITLE]]Выбран expression. Все значения переменных в басе определяются правильно. А возвращается это:
Error 400 (Bad Request)Когда я беру эту же строчку, вставляю ее в браузер и вручную заменяю переменные, копируя их из баса, то возвращает все как надо "success". Или открываю анализ трафика в бас, проверяю отправленный урл: все правильно. Копирую этот урл из отправленных баса в браузер... Приходит опять "success" и записывается все куда нужно. Оказывается это все из-за пробелов, которые у меня есть в переменной [[TITLE]]. При чем обычный браузер и с пробелами все нормально отрабатывает, а бас с пробелами выдает ошибку 400.
-
При чем обычный браузер и с пробелами все нормально отрабатывает, а бас с пробелами выдает ошибку 400.
Потому что браузер уже давно экранирует всё автоматом. Но в запросах эта автоматика не нужна, бывают разные ситуации, под которые нужно кодировать строку по разному.
-
@fox said in Как в гет запросе в качестве параметра передать url адрес целиком?:
Я вам до этого уже говорил, что данные в таблицу лучше передавать post-запросом
Записываю вроде как надо:
https://script.google.com/macros/s/.../{ "p1": "writeTitle", "p2": [[URL]], "p3": [[PIC_A]], "p4": [[PIC_B]], "p5": [[TITLE]] }application/jsonНо все равно не работает, что не так?
-
@senerg said in Ошибка с базой данных:
@cacats знаю только как использовать google sheets для работы с таблицами, базами в БАСе не пользовался.
Учитывая, что в той теме лично вас не спрашивали и вы не знали ответ на нужный вопрос, значит просто хотели похвастаться
:D. Думаю пользователи бы лучше оценили мануал по использованию google sheets в BAS, даже в общих чертах. -
@fox , перед кем мне тут хвастаться, что за глупость? Я же не знаю целей человека, если ему подходят google sheets я бы рассказал.
Мануал простой:- Делаем JSON объект с необходимыми данными в БАСе.
{ "p1": [[URL]], "p2": [[PIC_A]], "p3": [[PIC_B]], "p4": [[TITLE]] }- Этому объекту делаем JSON.stringify, полученный результат вставляем в тело пост запроса. В url пишем:
https://script.google.com/macros/s/.../exec?p1=writeвыбираем application/json.
3. В скрипте гугл пишем функцию:function doPost(e){ if (e.parameter.p1 == "write") { return write(e); } } function write(e) { var parsedJson = JSON.parse(e.postData.contents); }И делаем все что хотим с данными, которые теперь находятся в объекте parsedJson. Если нужно вернуть данные в БАС, то снова создаем JSON объект:
var dataObject = []; var rows = sheet.getRange("A2:E5").getValues(); for (var i = 0; i < rows.length; i++) { var dataRow = rows[i]; var record = {}; record['url'] = dataRow[0]; record['pic_a'] = dataRow[1]; record['pic_b'] = dataRow[2]; record['title'] = dataRow[3]; record['title2'] = dataRow[4]; dataObject.push(record); }и дописываем к функции write это:
return ContentService.createTextOutput(JSON.stringify(dataObject[0])).setMimeType(ContentService.MimeType.JSON);подставив туда нужное значение.