Как стать автором
Обновить

RSS-лента по почте

Время на прочтение 3 мин
Количество просмотров 17K
Есть одна важная для меня RSS-лента. И хочется оперативно узнавать о “новых новостях” в ней. К сожалению, почтовой рассылки этот новостной сервер не предоставляет. Для чтения RSS я привык пользоваться Web-сервисом Google Reader, а он, несмотря на своё происхождение и родственные связи с Gmail, такой возможности тоже не даёт. И его мобильный клиент никак не оповещает о появлении новостей в лентах. Может и слава Богу – некоторые фиды очень плодовиты – но ведь бывают случаи когда это полезно. Вот как я выкрутился.


Чуть погуглив, я нашел довольно простое решение. Замечательный сервис автоматизации – ifttt.com (If This Then That). Сервис позволяет создавать правила по принципу «если–то» и поддерживает тьму социальных сетей и других сервисов. В частности, можно создать правило, что при появлении новости в определенном фиде, будет отправляться письмо на такой-то ящик. Вроде бы то что надо, но несколько моментов не давали покоя. Какие недостатки я тут вижу:

  1. В Google Reader необходимо создать ленту, которой на практике пользоваться не придётся. Ведь если я буду получать почту о новых событиях, зачем мне тогда этот фид в клиенте?
  2. Значит, в этой ленте будут скапливаться непрочитанные новости. Чисти их ещё чтоб не маячили...
  3. Для ленты придётся специально создать папку, чтобы ifttt мог эту ленту идентифицировать. Это уже особенность работы ifttt с сервисом Google Reader.
  4. Для того, чтобы пользоваться ifttt, придётся в нем зарегистрироваться. Очередная учетная запись, сколько ж можно?

Что бы придумать? Определенно, нужно серверное решение. И тут на помощь приходит Корпорация Добра, вся такая в белом, если опять не закроет какой-нибудь сервис. Я вспомнил про Google Apps Script и Google Диск. Решение очень простое. Создаем таблицу на Goolge Диск и добавляем в неё вот такой сценарий (меню “Инструменты” => “Редактор скриптов...”):

function onTimer() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var maxPubDate = new Date(sheet.getRange(1, 1).getValue());
  
  var txt = UrlFetchApp.fetch("http://habrahabr.ru/rss/best/").getContentText();
  var doc = Xml.parse(txt, false);
  
  var channel = doc.getElement().getElement("channel");
  
  var mailBody = "";
  var items = channel.getElements("item")
  var curMaxPubDate = maxPubDate;
  var hasNews = false;
  for (var i in items) {
    var pubDate = new Date(items[i].getElement("pubDate").getText());
    
    if (pubDate > maxPubDate) {
      if (pubDate > curMaxPubDate) {
        curMaxPubDate = pubDate
      }
      hasNews = true;
      mailBody += "\nЗаголовок: " + items[i].getElement("title").getText();
      mailBody += "\nСсылка: " + items[i].getElement("link").getText();
      mailBody += "\nДата публикации: " + pubDate;
      mailBody += "\n";
    }
  }
  
  if (hasNews) {
    GmailApp.sendEmail("xxxxxxxx@gmail.com", "Новости Хабра!", mailBody);
    sheet.getRange(1, 1).setValue(curMaxPubDate);
  }
}

Да, надо не забыть вписать в ячейку A1 какую-нибудь древнюю дату, “30.01.2002 13:00:00”, как вариант. Затем устанавливаем скрипт на запуск, например, каждые 10 минут. Для этого в редакторе сценариев выбираем пункт меню “Ресурсы” => “Триггеры текущего проекта...” и добавляем “динамический минутный таймер”.

Скрипт получает содержимое ленты, парсит, отбирает новости, дата публикации которых превышает дату из ячейки A1, и отправляет их мне по почте. Под занавес ставит в A1 самую большую дату, какую нашёл.

В угоду простоте и лаконичности, в скрипте не хватает парсинга протокола Atom. Ну и в таблицу стоит добавить список наблюдаемых фидов, но это уже дело техники.

Получается, мне не понадобились RSS-клиенты, серверы автоматизации и дополнительные учётки. Только моя Гугловская. На всякий случай подчеркну – описанное выше, вовсе не замена RSS-клиентам. Это всего лишь вариант оповещения по почте о новостях в одной-двух любимых лентах.

К своему стыду, должен признать, что это первый раз, когда мне пришло в голову использовать Google Apps Script. А вам приходилось применять Google Apps Script? Если это не секрет, поделитесь, пожалуйста, опытом в комментариях – для каких задач?

UPD:
Я добавил парсинг протокола Atom и наблюдение за несколькими фидами. Подробности у меня в блоге.
Теги:
Хабы:
+27
Комментарии 21
Комментарии Комментарии 21

Публикации

Истории

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн