Объявление: В ближайшее врема, возможность комментировать записи в блогах с учетной записью социальной сети ВКонтакте, будет удалена! В силу неприятия данной социально сети владельцем блога. Комментарии постараюсь сохранить.

Слава Україні! Ла-ла-ла-ла!...

Блог Морозов

Заметки, идеи, мысли...

Huginn: агрегатор інформації

Автор: MadHead
MadHead
DevOps, Системный администратор, работающий как с Windows, так и UNIX системами.
Пользователей в сайте сейчас нет
Создано: Пятница, 02 Декабрь 2016 в Software

Потік інформації, що потрапляє до нас з різних джерел, давно перевищив ту кількість, яку можна спокійно і помірковано обробити без значних втрат часу та сил. У моєму випадку ці цифри приблизно такі (за один день): 700-800 повідомлень в твітері, 150-300 у RSS стрічці, 50-100 в пошті, а ще соціальні мережі, месенджери і просто цікаві сайти... Іноді кажеш "СТОП" і натискаєш кнопку "помітити все прочитаним" або пролистуєш до останнього повідомлення. При цьому втрачаєш частину дійсно цікавих подій. Чи все так безнадійно?! Виявилося, що ні...

 

Одного разу під час обіду з моїм колегою (дякую Олексій), він згадав про систему Huginn, яку використовує для фільтрації повідомлень в RSS стрічці Хабра... Я сам якийсь час був підписаний на стрічку Хабра, але відписався, так як більша половина повідомлень була не цікавою мені особисто, вона стосувалася розробки або інших галузей, далеких від моїх інтересів...

Не буду вдаватися в глибокі технічні подробиці, розкажу коротко і "на пальцях". Huginn базується на агентах (одні відповідають за отримання інформації, інші за її обробку/фільтрацію, треті за вивід інформації в тому чи іншому вигляді через різні канали) і побудові конвеєру з цих агентів.

Систему можна розгорнути кількома способами: локальна інсталяція, контейнер Docker або у Heroku. Оскільки маю невеличкий сервер на Linux, то я зупинився на контейнері cantino/huginn (там досить непогано все розписано, тому на запуску і базових налаштуваннях зупинятися не буду)

Перше, що я зробив, це фактично скопіював рішення Олексія: забирати RSS з Хабру, відкидати повідомлення, які мені не цікаві, за категорією і формувати нову RSS стрічку (в неї попадають лише повідомелення, які не містять категорій, що занесені до чорного списку). З Хабром розібрався - чудово! Але тримати таку систему лише  для того, щоб фільтрувати одну єдину RSS стрічку... Йдемо далі!

Далі я вирішив трохи навести порядки у Твітер стрічці. В мене вийшли наступні сценарії, виділити повідомлення від 2-3 аккаунтів, чиї твіти я не хочу пропустити, і сформувати на їх основі RSS стрічку. Є кілька аккантів, які повідомляють про значні інциденти і попередження, такі повідомлення відправляти прямо у канал месенджеру Telegram. Подивився я на це - круто! Потім згадав про те, що мені на пошту приходять сповіщення від КМДА. Було б чудово отримувати їх теж оперативно - в Telegram.

Поки в мене вийшла наступна схема:

huginn-agents-flow

Трошки поясню схему: тут видно, що з Хабра я отримую приблизно 60% повідомлень, які можу пролистати, коли мені зручно. З твітером взагалі цікаво, приблизно 1% - повідомлення які я не хочу пропустити, і 0.1% це повідомлення, які я хочу отримати негайно (мається на увазі відразу після того, як їх отримає агент з твітера). Що стосується пошти, то поки відбираються лише повідомлення від КМДА і відправляються в канал Telegram. Думаю тут теж буде все кладніше, але ще руки не дійшли...

Кого не цікавить реалізація, далі і читати годі... З зацікавленими поділюсь своєю реалізацією.

Перший сценарій найпростіший (RSS стрічка з Хабру), з нього і почнемо:

RSS habrahabr SRC
Type: Rss Agent
Options:
{
"expected_update_period_in_days": "7",
"clean": "false",
"url": "https://habrahabr.ru/rss/hubs/all/"
}

Цей агент відповідає за отримання інформації з RSS стрічки Хабру, він бере звідти всі повідомлення, які є... Наступний агент відкидає записи з категорій, які не цікаві мені

RSS habrahabr Trigger
{
Type: Trigger Agent
Options:
"expected_receive_period_in_days": "7",
"keep_event": "true",
"rules": [
 {
  "type": "!regex",
  "value": "Управление разработкой|Управление проектами|Программирование",
  "path": "categories"
 }
]
}

 Ну і останній агент у цьому конвеєрі формує RSS стрічку:

RSS habrahabr OUT
Type: Data Output Agent
Options:
{
"secrets": [
 "a-rss-habrahabr"
],
"expected_receive_period_in_days": "7",
"template": {
 "title": "Habrahabr reformated",
 "description": "This is a feed of recent RSS habrahabr, generated by Huginn",
 "item": {
  "title": "{{title}}",
  "description": "{{description}}",
  "link": "{{url}}"
}
},
"ns_media": "false",
"events_to_show": "300"
}

Як результат, отримуємо 2 посилання
http://yoursite.com/users/1/web_requests/10/a-rss-habrahabr.json http://yoursite.com/users/1/web_requests/10/a-rss-habrahabr.xml
Цю стрічку можна підключити до вашого улюбленого RSS агенту і читати лише цікаві новини

Всім дякую за увагу, якщо буде цікава реалізація інших конвеєрів, пишіть в коментарях або мені особисто. Якщо будуть зацікавлені я доповню статтю.

 

0 голоса(ов)
Облака: пока не существует

Не достаточно прав для добавления комментариев (только зарегистрированные пользователи)

Tekstkontent