Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Скрипт пересыльщик RSS (https://javascript.ru/forum/misc/57874-skript-peresylshhik-rss.html)

intermax 24.08.2015 21:37

Скрипт пересыльщик 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;
}

intermax 24.08.2015 22:04

Скрипт немного переделал.
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 теги


Часовой пояс GMT +3, время: 12:20.