update-3
This commit is contained in:
parent
ef870b985b
commit
50a3f54fff
20
docs/update-3.md
Normal file
20
docs/update-3.md
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
# Обновление 3
|
||||||
|
|
||||||
|
## Задача
|
||||||
|
|
||||||
|
1. в обновлении docs/update-2.md были добавлены description и картинка новости в ее текст
|
||||||
|
2. но оформление новости выглядит хорошим (user exp) только в случае, когда есть заголовок, описание и ссылка
|
||||||
|
3. необходимо для всех вариантов наполнения новостей из RSS разделить двумя переводами строки блоки:
|
||||||
|
|
||||||
|
- картинка (если есть, то отделяем разрывом в два перевода строки)
|
||||||
|
- заголовок (есть всегда, после него разрыв)
|
||||||
|
- дескрипшен (если есть, то отделяем после него разывом)
|
||||||
|
- ссылка (есть всегда, после нее не нужен разрыв, т.к. это завершающий блок)
|
||||||
|
|
||||||
|
## Техническая реализация
|
||||||
|
|
||||||
|
1. в docs/update-2.md было реализовано 2 метода отправки новостей: _build_plain и _build_xhtml - выбор определяется наличием ссылки на картинку
|
||||||
|
2. необходимо отказаться от _build_plain в пользу _build_xhtml при любых вариантах - это даст новостям одинаковый вид
|
||||||
|
3. но блоки <p> необходимо отделять друг от друга двумя блоками <br/>
|
||||||
|
4. fallback <body> должен содержать двойные '\n' после каждого блока (кроме завершающего - ссылки), описанного выше
|
||||||
|
|
||||||
@ -14,32 +14,31 @@ class JabberNewsPublisher(NewsPublisher):
|
|||||||
|
|
||||||
async def publish(self, room_jid: str, item: NewsItem) -> bool:
|
async def publish(self, room_jid: str, item: NewsItem) -> bool:
|
||||||
"""
|
"""
|
||||||
Отправляет новость в комнату.
|
Отправляет новость в комнату через XHTML-IM (XEP-0071) с plain-text fallback.
|
||||||
Если есть картинка — использует XHTML-IM (XEP-0071).
|
|
||||||
Возвращает False если бот не в комнате.
|
Возвращает False если бот не в комнате.
|
||||||
"""
|
"""
|
||||||
plain = self._build_plain(item)
|
plain = self._build_plain(item)
|
||||||
if item.image_url:
|
|
||||||
xhtml = self._build_xhtml(item)
|
xhtml = self._build_xhtml(item)
|
||||||
logger.debug(
|
|
||||||
"Публикация XHTML в %s\n--- plain ---\n%s\n--- xhtml ---\n%s",
|
|
||||||
room_jid, plain, xhtml,
|
|
||||||
)
|
|
||||||
return await self._connection.send_to_room_xhtml(room_jid, plain, xhtml)
|
return await self._connection.send_to_room_xhtml(room_jid, plain, xhtml)
|
||||||
logger.debug("Публикация plain-text в %s\n%s", room_jid, plain)
|
|
||||||
return await self._connection.send_to_room(room_jid, plain)
|
|
||||||
|
|
||||||
def _build_plain(self, item: NewsItem) -> str:
|
def _build_plain(self, item: NewsItem) -> str:
|
||||||
|
blocks = []
|
||||||
|
if item.image_url:
|
||||||
|
blocks.append(item.image_url)
|
||||||
|
blocks.append(item.title)
|
||||||
if item.summary:
|
if item.summary:
|
||||||
return f"{item.title}\n\n{item.summary}\n\n{item.link}"
|
blocks.append(item.summary)
|
||||||
return f"{item.title}\n{item.link}"
|
blocks.append(item.link)
|
||||||
|
return "\n\n".join(blocks)
|
||||||
|
|
||||||
def _build_xhtml(self, item: NewsItem) -> str:
|
def _build_xhtml(self, item: NewsItem) -> str:
|
||||||
|
SEP = "<br/><br/>"
|
||||||
parts = ['<body xmlns="http://www.w3.org/1999/xhtml">']
|
parts = ['<body xmlns="http://www.w3.org/1999/xhtml">']
|
||||||
parts.append(f'<p><img src="{item.image_url}" alt="" /></p>')
|
if item.image_url:
|
||||||
parts.append(f'<p>{item.title}</p>')
|
parts.append(f'<p><img src="{item.image_url}" alt="" /></p>{SEP}')
|
||||||
|
parts.append(f'<p>{item.title}</p>{SEP}')
|
||||||
if item.summary:
|
if item.summary:
|
||||||
parts.append(f'<p>{item.summary}</p>')
|
parts.append(f'<p>{item.summary}</p>{SEP}')
|
||||||
parts.append(f'<p><a href="{item.link}">{item.link}</a></p>')
|
parts.append(f'<p><a href="{item.link}">{item.link}</a></p>')
|
||||||
parts.append('</body>')
|
parts.append('</body>')
|
||||||
return ''.join(parts)
|
return ''.join(parts)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user