Главное Свежее Вакансии Образование
Выбор редакции:
0 19 В избр. Сохранено
Авторизуйтесь
Вход с паролем

Создаем RSS Feed бота с помощью Leecero

Привет! Сегодня мы запустили личный кабинет и в честь этого я хочу написать полноценный мануал: как с нуля создать бота для отправки себе информации из RSS.

Шаг первый. Регистрация на www.leecero.com

Самый простой шаг. Идем на сайт и жмем на кнопку Register, после чего заполняем формочку и попадаем в ЛК. Здесь мы сразу можем создать бота, что мы немедленно делаем.

b_55c3437a12b00.jpg

Шаг второй. Создание бота в Telegram

Внутри нас встречает инструкция, как создать бота в телеграм. Последуем ей.

b_55c343db5b8d6.jpg

Идем в Telegram и пишем привет BotFather

b_55c344848894b.jpgТут мы узнаем что все простые названия, типа RssBot или RssFeedBot уже заняты. Неужели и тут появились киберсквоттеры? Ну тогда хотя бы в приветствии написали бы где и как купить бота. Еще можно с помощью Leecero эту покупку автоматизировать ;)

Впрочем, имя RssyBot свободно - его и возьмем.

Мы не будем добавлять боту морфологии, сделаем поддержку простых команд. Подумав немного, мы придумываем список необходимых команд:

  • start - Start Rssy Feed bot
  • list - Show current feeds
  • add - Add new feed
  • remove - Remove old feed, call with params like "/remove 1"
  • cancel - Cancel current operation
  • stop - Stop Rssy Feed bot

И сразу скармливаем их BotFather

b_55c3458abc225.jpg

Еще добавляем описание, картинку - все эти настройки легко сделать в интерактивном режиме. И конечно сохраняем токен - он нам понадобится для подключения бота к Leecero

Шаг третий. Подключаем бота к Leecero и пишем сценарий

Тут все тоже довольно просто. Leecero просит от нас три вещи: токен полученный от BotFather, Username владельца чата для отладки и сценарий, причем заглушку сценария он уже создал

b_55c3466c6c8c8.jpg

Поэтому мы вносим все данные и начинаем писать сценарий. Сначала его стоит спроектировать, чтобы понимать как он должен выглядеть. Для этого я люблю вот этот сервис. Итак, наши предпосылки таковы:

  1. Состояние start обязательно, выход из него по команде /start
  2. Необходимо состояние из которого будут вызываться все команды
  3. Для добавления rss ссылки нужно 2 состояния: для вызова add и для передачи ссылки
  4. Нужно поддерживать команду /cancel
  5. Нужно поддерживать команду /stop для отмены рассылки и /start для повторного запуска

Рисуем!

b_55c3484e59e40.jpg

Таким образом после /start бот уходит в состояние AwaitingCommand. Из этого состояния ему доступны команды list, remove, add, stop. По команде Add будет выполнен переход в состояние AddFeed а выходом из этого состояние будет отправленная ссылка.

b_55c348f98fec5.jpgСостояние /remove требует цифру (/remove НОМЕР_ФИДА) поэтому добавим ему морфологию типа "num".

Состояние AddFeed - * должно отправить ссылку в web-service для сохранения в БД, поэтому добавим ему морфологию типа "msg".

Напомню список модификаторов морфологии которые поддерживает Leecero

  • msg - сообщение целиком
  • num - цифра или номер. отправляется первая найденная в сообщение цифра.
  • dt - дата и время
  • address - адрес
  • fio - ФИО, необходимо чтобы в сообщение были все части ФИО, иначе система не распознает его целиком

Нажимаем Save и бот готов. Уже можно слать ему сообщения и он будет отвечать. Однако пока он ничего не делает. Следующий раздел будет содержать некоторое количество кода и может быть не интересен многим на этом ресурсе. Однако он очень важен для демонстрации всех возможностей Leecero

Шаг четвертый. Пишем back-end бота на ASP.NET

Писать back-end можно на чем угодно. Я выберу ASP.NET просто потому что я его лучше знаю. В качестве back-end нам понадобиться База Данных с одной таблицей, несколько webhook для обработки команд и сервис по опросу RSS фидов

База данных

В БД нам потребуется хранить какой пользователь какой фид для себя сохранил. Структура базы данных будет максимально простая: одна таблица со следующими полями

  1. ID Чата - чтобы знать куда отправлять
  2. Имя пользователя - просто для информации
  3. Ссылка на feed
  4. Активен ли пользователь - чтобы не присылать ничего тем пользователям, которые находятся в состоянии NoData

b_55c350b37de42.jpg

Это таблица не нормализована, что не очень хорошо, так что выполним приведение к нормальным формам. Пользователей и feeds можно разделить на две таблицы и связать их связью один-ко-много. Это ускорит как опрос feedov так и рассылку данных.

Созданные таблицы выглядят следующим образом:

Webhooks для обработки команд

Вспомним список команд

  • start - Start Rssy Feed bot
  • list - Show current feeds
  • add - Add new feed
  • remove - Remove old feed, call with params like "/remove 1"
  • cancel - Cancel current operation
  • stop - Stop Rssy Feed bot

Для каждой команды нам понадобится свой webhook который будет вызван.

Если в поле action какого-либо перехода (transition) находится верная url ссылка, например http://tjnewsbot.mybluemix.net/paper, то Leecero при выполнение этого перехода выполнит GET-запрос по указанному адресу. В ответ ожидается сообщение с кодом 200 и телом в виде JSON ответа - списка сообщений для отправки пользователю. В запрос будет переданы id чата и параметры указанные в атрибуте morphology.

Не буду утомлять вас кусками кода, скажу только что я потратил ровно один час на написание backend этого бота. Класс который реализует backend выглядит вот так

b_55c35b79b4e78.jpg

Названия методов будут превращены в url адреса действий, например Add будет превращен в ссылку вида www.domain.com/api/rssy/start?id=1 где id будет идентификатором чата. Теперь мы можем опубликовать backend и поправить сценарий. В нашем случае backend будет развернут на Azure, но вы можете использовать что угодно, в т.ч. собственные сервера.

В сценарии в атрибуты action мы записываем ссылки на наши webhook'и которые будут вызваны при переходе из одного состояния в другое по action

b_55c362a01823d.jpg

Бот готов и полностью функционирует. Давайте попробуем добавить пару rss фидов

b_55c371f665e5f.jpg

Успех! Однако, пока бот ничего не присылает. Для отправки сообщения нужен сервис.

Сервис мониторинга RSS feed'ов и рассылки

Сервис мониторинга будет простым консольным приложением подключенным к веб-сервису как AzureWebJob. Он будет раз в час опрашивать все feed пользователя, формировать ему пакет сообщений и отправлять все новое за последний час в чат. Конечно не самый лучший вариант для отслеживания 1000+ источников, но для слежкой за 1-2 сайтами в самый раз.

Опять же я не буду утомлять читателя скучным кодом, покажу только самую важную часть. Для отправки чего-либо в конкретный чат нам необходимо три компонента:

  1. API Token из личного кабинет. Находится в верхней части Dashboard
    1. b_55c36b4f7a7fd.jpg
  2. Bot Token бота. Находится в Details бота
    1. b_55c36bc8d6f04.jpg
  3. Chat Id чата. Эту информацию мы собирали при добавлении пользователем ссылки в базу

После чего необходимо выполнить POST запрос следующего вида

http://leecero.com/api/chat/{API_TOKEN}/{BOT_TOKEN}/{CHAT_ID}

С телом в виде нашего сообщения в JSON.

b_55c36e581df0a.jpg

Шаг последний. Добавляем бота в каталог и радуемся.

Бот готов. Он будет раз в час присылать последние новости из выбранных RSS каналов.

b_55c37201aa285.jpg

Чтобы о нем все узнали, давайте добавим его в каталог. Есть один очень неплохой: http://storebot.me/

Добавим же нашего бота туда.

b_55c37809df95a.jpgА пока он ждет аппрува, приглашаю всех желающих попробовать бота telegram.me/RssyBot и обсудить что ему не хватает в комментариях.

0
В избр. Сохранено
Авторизуйтесь
Вход с паролем
Комментарии
LanguageBoost
Онлайн сервис для изучающих иностранный язык
Tihiro 17917
Все это выглядит очень муторно и непривлекательно (для непосвященных). Пользоваться кучей сервисов, писать код и делать разные другие телодвижения чтобы только получить то, что уже существует много лет (rss), неее.
Вот сделайте сервис, чтобы все то же самое можно было сделать в 2-3 клика в одном месте, вот тогда поговорим :)))
Ответить
Показать предыдущие комментарии
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
Да не в том суть. Пользователи будут добавлять сами ботов все больше и больше. Все перерастет в то, что ухудшится юзерфрендли телеграма из за этого. Бота сделать просто, для них сделали много всего. Ничего вводить не нужно. Нажал кнопочки и все работает.
Как итог: будет по 20 ботов у юзеров, общаться будет сложнее - люди будут использовать скорее другие системы для общения, а телеграм станет просто браузером ботов.
Ответить
ChatFirst
Автоматизируйте поддержку сотрудников с ChatFirst
Павел Осадчук
я вижу немного другое развитие ситуации: боты становятся полноценным приложением, как приложение в телефоне.
но ставятся и удаляются намного быстрее.
Вам же не мешает 20 приложений на телефоне? вот и не будет мешать 20 ботов. Все будут настраиваться как положено, их текущее состояние скорее эксперимент. Боты которые мешают - будут удаляться.
Ну в общем все как с приложениями, только проще для всех - разработчиков и пользователей.
Ответить
PushAll
Платформа мгновенных уведомлений.
Олег Карнаухов
Мне как раз мешают 20 приложений. Я делаю свой сервис как раз чтобы через одно приложение получать уведомление от 20 сервисов, а использовать эти сервисы через браузер.
У меня нет приложений к примеру по сериалам - но я получаю увдеолмение о выходе серий в хром и качаю их с компа.
У меня нет приложений для tjournal,ЦП ,спарка или хабра - но я получаю от них уведомления по ключевым словам и использую все это через браузер. Универсальное средство уже есть - и это браузер. Я сам использую не более 5 приложений. Ютуб почта браузер вк и своё приложение для уведомлений. Все :)
Ответить
LanguageBoost
Онлайн сервис для изучающих иностранный язык
Tihiro 17917
Объясните тогда, зачем мне какой-то бот, который ищет картинки или показывает мне погоду, когда я в два клика могу то же самое в браузере получить?
Ответить
Магазин Таобао
Cайт (движок) с товарами Taobao на русском языке
Магазин Таобао
Боты скорее для тех, кто в мобильном сидит больше, чем в компе.
Я в последнее время тоже думаю, что эта тема будет развиваться. В сегодняшнем состоянии оно еще не привлекательно, но вспомните сайты в 90-х годах - они тоже были не очень привлекательны и непонятны, но со временем все встало на свои места.
Я точно уверен, что для сервисов, которые не могут создать полноценное приложение - это будет выходом 100%. И у меня есть мнение, что люди привыкают к одному интерфейсу и к новому сложно привыкнуть, поэтому в том же любимом телеграме или вотсапе включить бота будет для них оптимальным выходом. Я думаю боты не заменят полноценное приложение, но возьмут свою аудиторию и она будет расти со временем и захватит свой сегмент. Через 2-3 года будет более ясная картинка по этому вопросу...
Ответить
Igor Mazevich
Есть хороший бот для RSS @RssListenerBot
Выручает
Ответить
Выбрать файл
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать

Spark использует cookie-файлы. С их помощью мы улучшаем работу нашего сайта и ваше взаимодействие с ним.