Javascript.RU

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

Скрипт пересыльщик RSS
Помогите доработать скрипт пересылки RSS
Этот скрипт работает с таблицей где на ящейке A1 фид, А2 Тема письма, А3 дата последнего поста.
Скрипт отправляет только Тему , ссылку и дату поста.
Помогите скрипт доделать, чтоб он отправлял и тело RSS записи.
Все это крутится на гугл драйв.

function checkFeeds() {
  const mailAddress = "mail@mail.me";
  const feedColumn = 1;
  const mailSubjectColumn = 2;
  const lastPublicationDateColumn = 3
  
  var row = 2;
  var sheet = SpreadsheetApp.getActiveSheet();
  while (true) {
    var currentRow = row++;
    
    var feed = sheet.getRange(currentRow, feedColumn).getValue();
    if (feed == "") {
      break;
    }
    
    var mailSubject = sheet.getRange(currentRow, mailSubjectColumn).getValue();
    var mailBody = "";
    var lastPublicationDateCell = sheet.getRange(currentRow, lastPublicationDateColumn);
    
    var feedContent = UrlFetchApp.fetch(feed).getContentText();
    var doc = Xml.parse(feedContent, false);
    
    var root = doc.getElement();
    if (root == null) {
      break;
    }
    
    var rootName = root.getName().getLocalName();
    if (rootName == "rss") {
      var rssVersion = root.getAttribute("version");
      if (rssVersion == null) {
        break;
      }
      
      if (rssVersion.getValue() == "2.0") {
        mailBody = parseRssFeed(root, mailSubject, lastPublicationDateCell);
      }
    } else if (rootName == "feed") {
      mailBody = parseAtomFeed(root, mailSubject, lastPublicationDateCell);
    }
    
    if (mailBody != "") {
      GmailApp.sendEmail(mailAddress, mailSubject, mailBody);
    }
  }
}

function parseRssFeed(root, mailSubject, lastPublicationDateCell) {
  var maxPubDateText = lastPublicationDateCell.getValue();
  var maxPubDate = "2000-01-01T00:00:00Z";
  if (maxPubDateText != "") {
    maxPubDate = maxPubDateText;
  }
      
  var channel = root.getElement("channel");
  
  var mailBody = "";
  var items = channel.getElements("item")
  var curMaxPubDate = maxPubDate;
  for (var i in items) {
    var dateText = items[i].getElement("pubDate").getText();
    var pubDate = Utilities.formatDate(new Date(dateText), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
    
    if (pubDate > maxPubDate) {
      if (pubDate > curMaxPubDate) {
        curMaxPubDate = pubDate
      }
      mailBody += "\nЗаголовок: " + items[i].getElement("title").getText();
      mailBody += "\nСсылка: " + items[i].getElement("link").getText();
      mailBody += "\nДата публикации: " + pubDate;
      mailBody += "\n";
    }
  }

  lastPublicationDateCell.setValue(curMaxPubDate);
  return mailBody;
}

function parseAtomFeed(root, mailSubject, lastPublicationDateCell) {
  var maxPubDateText = lastPublicationDateCell.getValue();
  var maxPubDate = "2000-01-01T00:00:00Z";
  if (maxPubDateText != "") {
    maxPubDate = maxPubDateText;
  }
      
  var mailBody = "";
  var entries = root.getElements("entry")
  var curMaxPubDate = maxPubDate;
  for (var i in entries) {
    var pubDate = entries[i].getElement("updated").getText();
    
    if (pubDate > maxPubDate) {
      if (pubDate > curMaxPubDate) {
        curMaxPubDate = pubDate
      }
      mailBody += "\nЗаголовок: " + entries[i].getElement("title").getText();
      mailBody += "\nСсылка: " + entries[i].getElement("link").getAttribute("href").getValue();
      mailBody += "\nДата публикации: " + pubDate;
      mailBody += "\n";
    }
  }

  lastPublicationDateCell.setValue(curMaxPubDate);
  return mailBody;
}
Ответить с цитированием
  #2 (permalink)  
Старый 24.08.2015, 22:04
Новичок на форуме
Отправить личное сообщение для intermax Посмотреть профиль Найти все сообщения от intermax
 
Регистрация: 24.08.2015
Сообщений: 2

Скрипт немного переделал.
function checkFeeds() {
  const mailAddress = "my@gmail.com";
  const feedColumn = 1;
  const mailSubjectColumn = 2;
  const lastPublicationDateColumn = 3
  
  var row = 2;
  var sheet = SpreadsheetApp.getActiveSheet();
  while (true) {
    var currentRow = row++;
    
    var feed = sheet.getRange(currentRow, feedColumn).getValue();
    if (feed == "") {
      break;
    }
    
    var mailSubject = sheet.getRange(currentRow, mailSubjectColumn).getValue();
    var mailBody = "";
    var lastPublicationDateCell = sheet.getRange(currentRow, lastPublicationDateColumn);
    
    var feedContent = UrlFetchApp.fetch(feed).getContentText();
    var doc = Xml.parse(feedContent, false);
    
    var root = doc.getElement();
    if (root == null) {
      break;
    }
    
    var rootName = root.getName().getLocalName();
    if (rootName == "rss") {
      var rssVersion = root.getAttribute("version");
      if (rssVersion == null) {
        break;
      }
      
      if (rssVersion.getValue() == "2.0") {
        mailBody = parseRssFeed(root, mailSubject, lastPublicationDateCell);
      }
    } else if (rootName == "feed") {
      mailBody = parseAtomFeed(root, mailSubject, lastPublicationDateCell);
    }
    
    if (mailBody != "") {
      GmailApp.sendEmail(mailAddress, mailSubject, mailBody);
    }
  }
}

function parseRssFeed(root, mailSubject, lastPublicationDateCell) {
  var maxPubDateText = lastPublicationDateCell.getValue();
  var maxPubDate = "2000-01-01T00:00:00Z";
  if (maxPubDateText != "") {
    maxPubDate = maxPubDateText;
  }
      
  var channel = root.getElement("channel");
  
  var mailBody = "";
  var items = channel.getElements("item")
  var curMaxPubDate = maxPubDate;
  for (var i in items) {
    var dateText = items[i].getElement("pubDate").getText();
    var pubDate = Utilities.formatDate(new Date(dateText), "GMT", "yyyy-MM-dd'T'HH:mm:ss'Z'");
    
    if (pubDate > maxPubDate) {
      if (pubDate > curMaxPubDate) {
        curMaxPubDate = pubDate
      }
      mailBody += "\nЗаголовок: " + items[i].getElement("title").getText();
      mailBody += "\nСсылка: " + items[i].getElement("link").getText();
      mailBody += "\nОписание: " + items[i].getElement("description").getText();
      mailBody += "\nДата публикации: " + pubDate;
      mailBody += "\n";
    }
  }

  lastPublicationDateCell.setValue(curMaxPubDate);
  return mailBody;
}

function parseAtomFeed(root, mailSubject, lastPublicationDateCell) {
  var maxPubDateText = lastPublicationDateCell.getValue();
  var maxPubDate = "2000-01-01T00:00:00Z";
  if (maxPubDateText != "") {
    maxPubDate = maxPubDateText;
  }
      
  var mailBody = "";
  var entries = root.getElements("entry")
  var curMaxPubDate = maxPubDate;
  for (var i in entries) {
    var pubDate = entries[i].getElement("updated").getText();
    
    if (pubDate > maxPubDate) {
      if (pubDate > curMaxPubDate) {
        curMaxPubDate = pubDate
      }
      mailBody += "\nЗаголовок: " + entries[i].getElement("title").getText();
      mailBody += "\nСсылка: " + entries[i].getElement("link").getAttribute("href").getValue();
      mailBody += "\nОписание: " + entries[i].getElement("description").getText();
      mailBody += "\nДата публикации: " + pubDate;
      mailBody += "\n";
    }
  }

  lastPublicationDateCell.setValue(curMaxPubDate);
  return mailBody;
}


Как удалить
mailBody += "\nОписание: " + entries[i].getElement("description").getText();
как написать ког ,чтоб в тексте этого сообщения он удалил HTML теги
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PHP/AJAX скрипт "Нaселение мoегo гoрoдa oнлaйн" rustik-yes Работа 2 01.12.2014 22:53
2 компьютера 1 хром и 1 скрипт Megatron13 Opera, Safari и др. 1 21.07.2013 19:12
Opera + RSS. Подцепить скрипт. Xant1k Opera, Safari и др. 0 02.12.2012 17:45
Почему скрипт не работает с данными, которые вернул другой скрипт? Rooner jQuery 3 20.09.2012 14:56
Изменить скрипт Изучаю_JS Общие вопросы Javascript 0 12.02.2012 22:05