Чуть погуглив, я нашел довольно простое решение. Замечательный сервис автоматизации – 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? Если это не секрет, поделитесь, пожалуйста, опытом в комментариях – для каких задач?
ссылка на оригинал статьи http://habrahabr.ru/post/168569/
Добавить комментарий