rss-formatting-preserve: сохранять абзацы и разметку из RSS (html_to_text/extract_full_text normalize; safe_html bleach для предпросмотра; пересборка старых постов)

This commit is contained in:
kpa39l
2026-09-15 18:53:57 +00:00
parent b25054e1df
commit 582dc3cf66
11 changed files with 521 additions and 4 deletions
@@ -0,0 +1,27 @@
# rss-formatting-preserve
Сохранять форматирование RSS-новостей (абзацы, разметка) при скачивании и в предпросмотре.
## Why
Пользователь: в RSS omarchy внутри текста новости есть HTML-символы, мы их выкидываем
из текста, поэтому вся новость в предпросмотре — сплошной текст, ничего не понять.
Нужно при скачивании из RSS сохранять заложенное форматирование.
## What Changes
- **crawler/rss_crawler.py**: html_to_text() вставляет переносы вокруг блочных тегов
(p/li/h1-6/blockquote/pre), чтобы абзацы и списки сохранялись; parse_entries() больше
не схлопывает все пробелы в один — нормализует: 3+ переноса → 2, пробелы по краям
строк убираются, внутренние сохраняются.
- **web/app.py**: новый фильтр `safe_html` (bleach.clean allowlist + linkify) для
безопасного рендера HTML-разметки исходных RSS-текстов в предпросмотре.
- **web/templates/candidates.html / selected.html**: `| safe_html` для `selected.text`.
- **requirements.txt**: +bleach.
## Impact
- Тексты в БД: появляются абзацы (\n\n), форматирование сохраняется читаемым.
- Предпросмотр кандидатов/отобранных: разметка (b/i/a/списки) рендерится безопасно.
- Markdown-пересказы (rewritten_text) и комментарии не задеваются — md_filter без изменений.
- Публикация (card.py) — plain text, абзацы \n\n дойдут в Telegram.