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

от автора

Есть одна важная для меня 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? Если это не секрет, поделитесь, пожалуйста, опытом в комментариях – для каких задач?

ссылка на оригинал статьи http://habrahabr.ru/post/168569/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *