@palnamalina said in Как включить пересылку в Gmail?:
Актуально
https://community.bablosoft.com/topic/24964/bas-не-открывает-всплывающую-диалоговую-страницу/28
@senerg said in Как в гет запросе в качестве параметра передать url адрес целиком?:
А я где-то видео смотрел, что все русское надо кодировать.
так почему бы и не закодировать?
@senerg что же вы за человек такой?)) Примерно 99% людей сначала 100 раз попробует по разному, потом загуглят и ещё раз 100 попробует и только после этого будут писать где то и спрашивать помощи.
А вы, увидели, что не отправляется и сразу бежать и спрашивать что но так и почему... а самое главное по подробнее и в деталях)
@uraabk, я пытаюсь не столько код написать, сколько изучить возможности баса. Я увидел, что не отправляется, вспомнил, что уже слышал о том, что русские буквы и спецсимволы надо кодировать. Поэтому и решил, не откладывая в долгий ящик разобраться с этим вопросом.
Гугл скрипт и ява скрипт я тоже толком не знаю, но это не мешает мне нагуглить все, что надо. С басом ситуация другая: документации нет, вот и собираю по крохам информацию, сначала перечитав форум по искомому ключевику, а затем написав тему.
@senerg так тут никто разжевывать не любит. Тут задают вопросы "а как сделать вот это" и получают ответ "вот так" (грубо говоря)
А для теории и разжевывания существуют специальные обучающие сайты.
На тоже самое кодирование/декодирование в инете много информации, а как только будет понятно, как это делается, допустим в javascript - то не составит труда сделать это в Басе или составить более грамотный поиск на форуме.
@senerg Для передачи параметров в get-запросе содержащих спецзнаки, используют метод encodeURIComponent(). Сайт для наглядности.
Ссылки будут выглядеть примерно так:
exec?p1=https%3A%2F%2Fwww.aliexpress.com%2Fitem%2FUSLION-Phone-Case-For-iPhone-7-6-6s-Plus-5-5s-SE-Simple-Solid-Color-Ultrathin%2F32808065488.html
да вроде пропускает... и пробелы пропускает, и спецсимволы... А я где-то видео смотрел, что все русское надо кодировать. Ничего не понимаю, но гугл скрипт исправил пока работает.
Попробуйте передать скрипту url с параметрами:
exec?p1=https://www.google.ru/search?q=site%3Acommunity.bablosoft.com+здесь+могла+бы+быть+ваша+реклама&oq=site%3Acommunity.bablosoft.com+здесь+могла+бы+быть+ваша+реклама
Я вам до этого уже говорил, что данные в таблицу лучше передавать post-запросом. Это позволит без перекодирования передать большое количество данных одним запросом.
Гугл скрипт и ява скрипт я тоже толком не знаю, но это не мешает мне нагуглить все, что надо.
Значит вопросов о методе encodeURIComponent() мы от вас не увидим?
@fox said in Как в гет запросе в качестве параметра передать url адрес целиком?:
Попробуйте передать скрипту url с параметрами
Передалось:

Поэтому не понятна вообще цель кодирования.
@fox said in Как в гет запросе в качестве параметра передать url адрес целиком?:
Я вам до этого уже говорил, что данные в таблицу лучше передавать post-запросом.
Можете поделиться ссылкой на пример того как это делается, я с post запросами еще не сталкивался?
@fox said in Как в гет запросе в качестве параметра передать 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 я бы рассказал.
Мануал простой:
{
"p1": [[URL]],
"p2": [[PIC_A]],
"p3": [[PIC_B]],
"p4": [[TITLE]]
}
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);
подставив туда нужное значение.