mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
Initial import: vesti.nixg.ru — новостной апрув-проект (web, crawler, classifier, publisher, openspec)
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
## Why
|
||||
|
||||
Пользователь опубликовал несколько постов через веб-approve в канал @dedinit_vesti
|
||||
и увидел, что в канале пост выглядит «как простой агрегатор»:
|
||||
|
||||
- только ссылка на чужой канал (заголовок-сниппет из первых 120 символов текста),
|
||||
- служебная информация по направлениям (📁 направление/язык, 📰 источник, 👁 просмотры),
|
||||
- в конце Telegram добавляет предпросмотр ссылки (link preview).
|
||||
|
||||
Такой репост никому не интересен: не видно ни медиа из оригинального поста, ни
|
||||
полного текста, ни комментария модератора — только «голая» ссылка и служебка.
|
||||
|
||||
## What Changes
|
||||
|
||||
Формат публикуемого поста (карточка) меняется на «богатый репост»:
|
||||
|
||||
1. **Медиа из оригинального поста** — если у поста есть media_path (фото/видео),
|
||||
оно отправляется **первым сообщением** (sendPhoto/sendVideo), а текст — следующим.
|
||||
Сейчас sendPhoto есть, но caption обрезается до 1024 и текст дублируется вторым
|
||||
сообщением; видео (content_type=video) вообще не отправляется как медиа (фильтр в card.py).
|
||||
|
||||
2. **Полный текст поста** — вместо сниппета из первых 120 символов (make_card) или
|
||||
summary отправляется полный текст исходного поста (обрезанный до Telegram-лимита 4096).
|
||||
|
||||
3. **Комментарий модератора** — в веб-форме approve добавляется поле «Комментарий
|
||||
(по желанию)»; комментарий публикуется первым (или в начале текста), чтобы в канале
|
||||
было видно мнение/контекст редактора, а не только пересказ.
|
||||
|
||||
4. **Ссылка на оригинал БЕЗ предпросмотра** — ссылка на исходный пост остаётся в тексте,
|
||||
но Telegram-предпросмотр ссылки отключается (sendMessage параметр
|
||||
`link_preview_options={"is_disabled": True}`), чтобы канал не выглядел как агрегатор
|
||||
ссылок с превью.
|
||||
|
||||
5. **Служебная информация** — частично убирается/переформатируется: направление/язык,
|
||||
источник, просмотры больше НЕ обязательны в теле поста (внешняя ссылка на оригинал
|
||||
уже даёт контекст). Остаётся атрибуция для своего контента («Дед в АйТи»).
|
||||
|
||||
## Impact
|
||||
|
||||
- `publisher/card.py` — построение текста карточки (полный текст + комментарий + ссылка
|
||||
+ атрибуция, служебка по минимуму).
|
||||
- `services/publisher/app/telegram.py` — поддержка видео (sendVideo), параметр
|
||||
`link_preview_options` для sendMessage; send_photo с полным caption без обрезания
|
||||
(или без дублирования текста).
|
||||
- `services/publisher/app/main.py` — Card модель: +`comment`; передача link_preview_options.
|
||||
- `web/app.py` (approve) — чтение комментария из формы, проброс в card.
|
||||
- `web/templates/candidates.html` — поле ввода комментария в форме approve.
|
||||
- `publisher/card.py` — фильтр медиа: разрешить video (mp4), не только картинки.
|
||||
- Rollback: вернуть прежний make_card и вызовы; карточки станут как раньше.
|
||||
- Безопасность: комментарий — пользовательский ввод → HTML-экранирование как текст поста.
|
||||
Reference in New Issue
Block a user