IT61 / it61.info

Сайт Ростовского IT-сообщества
www.it61.info
MIT License
40 stars 35 forks source link

HTML разметка в RSS #123

Open LibertyPaul opened 7 years ago

LibertyPaul commented 7 years ago

Привет IT61,

Новая версия RSS ленты содержит в сообщениях HTML разметку, и, поскольку текст из фида напрямую отправляется в Телеграм канал, теперь в апдейтах все выглядит не очень хорошо: image

Я писал в #events о вариантах решения проблемы, но ответа так и не получил, поэтому приведу их здесь:

  1. Создать второй RSS фид без разметки (или с разметкой, поддерживаемой телеграмом).
  2. Расширить функционал бота, чтобы тот вместо простого копирования текста вырезал из него HTML-теги (и, по возможности, заменял их табуляцией, переносом строк, и т.д.)
  3. Переложить функционал отправки апдейтов в канал на сайт IT61 - я передам access token бота под обещание отправлять туда исключительно оповещения о предстоящих мероприятиях ростовского IT-сообщества.

Второй вариант я бы мог реализовать своими силами, но он наиболее костыльный из всех вышеперечисленных, поэтому я хочу, чтобы была рассмотрена возможность реализации 1-го или 3-го.

Regards, Павел

kovalevsky commented 7 years ago

@LibertyPaul RSS 2.0 поддерживает HTML внутри description. Если телеграм-бот позиционирует себя, как кросс-постер RSS-фида, то приведение контента источников данных в формат поддеживаемый телеграм – это его прямая обязанность, поэтому п.2 я не считаю костыльным.

Технически, удаление недопустимых телеграмом html-тегов и добавление \r для переносов строк – задача тривиальная и сделать ее можно, как в рамках бота, так и в рамках адаптера, который может отправлять боту сообщения, по аналогии с реализацией публикации событий в слек.

Но в первую очередь я бы постарался привести фид к валидному виду. Сейчас в нем есть ошибки по мнению w3c-валидатора. Часть этих ошибок не является ошибками, например, для Яндекса, который живет своей жизнью, но с точки зрения Яндекса.Новостей фид тоже не валидный :)

LibertyPaul commented 7 years ago

@kovalevsky Второй вариант костылен в первую очередь из за того, что он зависит от меня. До этих пор, что бы не произошло со мной/моим сервером, эвенты продолжали бы отправляться в канал (спасибо IFTTT за это). Но теперь я вынужден писать десяток строк кода и размещать их у себя на VPS, и париться о том, чтобы все работало.

Как по мне, если даже и писать такой "workaround", то на стороне сайта. Ибо пока сайт работает, будет работать и канал. Я бы сам сделал Pull-Request, но Ruby не моя тема, поэтому предлагаю вам написать эти 10 строк самостоятельно чтобы все было по уму.

kovalevsky commented 7 years ago

Идея создания кастомного фида для конкретной реализации бота кажется мне сомнительной.

Ничего не имею против существующего бота, но в случае решения проблем на уровне приложения, мне кажется более логичным публиковать сообщения в телеграм напрямую, без дополнительных сервисов, например с помощью https://github.com/atipugin/telegram-bot-ruby Я телеграм особо не пользуюсь, поэтому не знаю, о функционале бота, судя по упоминанию IFTTT он только публикует новые ивенты?

LibertyPaul commented 7 years ago

На данный момент схема такая: Есть канал в телеграме и бот, который имеет право туда писать. IFTTT чекает RSS и при появлении нового сообщения шлет в API телеграма (с токеном бота) сообщение в канал. IT61 RSS <-----> IFTTT -----> Telegram API -----> Subscribers

Из схемы можно легко выкинуть IFTTT и RSS, если при публикации новости сайт будет посылать POST запрос к API телеграма с токеном бота, именем канала и описанием: IT61 -----> Telegram API -----> Subscribers ИМХО, для одного HTTP запроса впихивать целую либу это оверкилл, но это уже не мне решать.

Токен я с удовольствием отдам в пользование команде разработчиков сайта, как прежде оговаривалось, в замен на обещание использовать его исключительно для публикации информации об эвентах.

LibertyPaul commented 7 years ago

А, ну еще было бы неплохо на главную сайта повесить линк на канал.

timocov commented 7 years ago

В качестве альтернативы еще могу предложить юзать RSS фид и @TheFeedReaderBot. Тут либо каждый себе настраивает бота с фидом, либо бот вроде как умеет писать в ченнелы - можно попробовать прикрутить. Правда я его использую в режиме "title only", поэтому не знаю, есть ли у него такие же проблемы с HTML внутри описания.

LibertyPaul commented 7 years ago

@timocov, спасибо за совет, добавил этого бота, посмотрим как он работает.