64 lines
2.8 KiB
Markdown
64 lines
2.8 KiB
Markdown
# Доработка 2
|
||
|
||
## Задание
|
||
|
||
1. необходимо доработать rss адаптер, получающий новости, и модуль отправки в жаббер
|
||
|
||
### Улучшение 1
|
||
|
||
1. если RSS item содержит поле description, то текст новости необходимо снабдить этой информацией
|
||
2. в этом случае формат новости должен быть расширен:
|
||
|
||
```
|
||
title
|
||
|
||
|
||
description
|
||
|
||
|
||
link
|
||
```
|
||
|
||
т.е. между title и description - 2 перевода строки, и между description и link - тоже 2 перевода строки
|
||
|
||
3. если description содержит HTML тэги, то выводить нужно голый текст, предварительно очистив от тэгов
|
||
|
||
### Улучшение 2
|
||
|
||
1. если RSS item содержит элемент enclosure с параметром type="image/*" (любой image, но у меня пример только для image/jpeg есть - возможно, бывают другие варианты, нужно отработать по маске)
|
||
2. то нужно воспользоваться XEP-0071 и отправить картинку вместе с текстом новости - шаблонный пример использования
|
||
|
||
```
|
||
import slixmpp
|
||
from slixmpp.stanza import Message
|
||
from slixmpp.plugins.xep_0071 import XHTML_IM
|
||
|
||
class XHTMLBot(slixmpp.ClientXMPP):
|
||
async def send_xhtml(self, jid_to):
|
||
msg = self.make_message(mto=jid_to)
|
||
|
||
# Устанавливаем обычный текст (обязательно для fallback)
|
||
msg['body'] = 'Посмотри картинку: https://example.com/image.jpg'
|
||
|
||
# Формируем XHTML-содержимое
|
||
# Обратите внимание: тег <img> должен быть внутри <body> в пространстве имен XHTML
|
||
xhtml_body = '<body xmlns="http://www.w3.org/1999/xhtml">' + \
|
||
' <p>Смотри: <img src="https://example.com/image.jpg" /></p>' + \
|
||
'</body>'
|
||
|
||
# Включаем XHTML-IM плагин
|
||
msg['html']['body'] = xhtml_body
|
||
|
||
msg.send()
|
||
```
|
||
|
||
3. картинка должна размещаться ДО текста новости
|
||
4. Fallback (msg['body']) при XHTML-сообщении — для клиентов без XEP-0071 в тексте писать просто текст без ссылок на картинку
|
||
5. при наличии нескольких enclosure брать первый с подходящим type
|
||
|
||
|
||
### Если новость имеет и enclosure-картинку, и description
|
||
|
||
— порядок в XHTML-теле: <img> → title → description → link
|
||
|