Есть одна важная для меня RSS-лента. И хочется оперативно узнавать о “новых новостях” в ней. К сожалению, почтовой рассылки этот новостной сервер не предоставляет. Для чтения RSS я привык пользоваться Web-сервисом Google Reader, а он, несмотря на своё происхождение и родственные связи с Gmail, такой возможности тоже не даёт. И его мобильный клиент никак не оповещает о появлении новостей в лентах. Может и слава Богу – некоторые фиды очень плодовиты – но ведь бывают случаи когда это полезно. Вот как я выкрутился.
Чуть погуглив, я нашел довольно простое решение. Замечательный сервис автоматизации – ifttt.com (If This Then That). Сервис позволяет создавать правила по принципу «если–то» и поддерживает тьму социальных сетей и других сервисов. В частности, можно создать правило, что при появлении новости в определенном фиде, будет отправляться письмо на такой-то ящик. Вроде бы то что надо, но несколько моментов не давали покоя. Какие недостатки я тут вижу:
- В Google Reader необходимо создать ленту, которой на практике пользоваться не придётся. Ведь если я буду получать почту о новых событиях, зачем мне тогда этот фид в клиенте?
- Значит, в этой ленте будут скапливаться непрочитанные новости. Чисти их ещё чтоб не маячили...
- Для ленты придётся специально создать папку, чтобы ifttt мог эту ленту идентифицировать. Это уже особенность работы ifttt с сервисом Google Reader.
- Для того, чтобы пользоваться 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? Если это не секрет, поделитесь, пожалуйста, опытом в комментариях – для каких задач?
Автор: DmitryDzz
получаю на почту так:
Заголовок: �������…
Как получать по русски?