Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Google SpreadSheets: ограничение 50к символов, в пользовательских функциях 
:(
    Опции темы
ProgramerForever
  Дата 9.7.2018, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 554
Регистрация: 15.11.2006
Где: Новосибирск

Репутация: нет
Всего: 5



Добрый день, уважаемые форумчане.
Написал пользовательскую функцию получения HTML кода страницы

Код

/**
* ОТкрывает URL и возращает код страницы
*
* @param {string} URL URL который нужно открыть
* @param {boolean} isCut Указывакт, нужно ли обрезать страницу до 50000 символов по длине, по умолчанию false
* @param {boolean} noScript Указывакт, нужно ли удалять скрипты из кода
* @return Исходный код страницы
* @customfunction
*/
function getHTML(URL,isCut,noScript) {
  if ((URL === undefined)||(URL == "")) { return "#ОШИБКА Пустой URL";};
  if (isCut === undefined) {var isCut=true;};
  if (noScript === undefined) {var noScript=true;};
  if (URL.map){     //Если задан диапазон
    return URL.map(getHTML);
  }else{
    try {
      var response = UrlFetchApp.fetch(URL);
      var charset=response.getAllHeaders["charset"];
      var responseText=response.getContentText(charset?charset:"windows-1251");
      if (noScript){ 
        responseText=responseText.replace(/<script[^>]*>(?:(?!<\/script>)[^])*<\/script>/gmi,"");
        responseText=responseText.replace(/<!--.*?-->/gmi,"");
        responseText=responseText.replace(/<link.*?\/>/gmi,"");
        responseText=responseText.replace(/<meta.*?\/>/gmi,"");
        responseText=responseText.replace(/[\n\r\t]/gmi,"");
        
      };
      if (isCut&&(responseText.length>50000)){return responseText.substring(0,50000);}else{return responseText;};
    } catch (err) {
      //return JSON.stringify(err);
      return "#ОШИБКА "+err.message;
    };
  };
};

Обнаружил, что при вызове из таблицы (даже если нет записи этой огромной строки в ячейку, а просто передача в качестве аргумента для другой функции) скрипт запинается на ограничении длины строки в 50000 символов. При этом если вызывать такую функцию не из таблицы, а внутри скрипта, то всё нормально работает. Но это не очень удобно. Делаю парсер, и удобно было бы получить текст страницы, положить в ячейку и потом его дербанить на кусочки. А так приходится за каждым чихом лезть на сайт и забирать страницу заново. И при переоткрытии книги формулы пересчитываются и опять же - нагрузка на сайт, трафик, таблицу в целом.
Как решить данную проблему?
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1167 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.