mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 18:05:03 +00:00
Initial import: vesti.nixg.ru — новостной апрув-проект (web, crawler, classifier, publisher, openspec)
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
## Why
|
||||
|
||||
У пользователя есть собственные ресурсы (канал Telegram «Дед в АйТи» @dedinit, сайт dedinit.ru,
|
||||
далее — феды/видео), но они живут разрозненно: контент, опубликованный в одном месте, не
|
||||
попадает в другие. Цель — **собственный контент-хаб**: единая точка сбора ВСЕХ постов
|
||||
пользователя из разных платформ, один банк своего контента, и **автораспространение**
|
||||
этого контента по тематическим новостным ботам VESTI (и в перспективе — по другим
|
||||
платформам), чтобы органически росла аудитория на всех площадках.
|
||||
|
||||
Задача НЕ «сделать копию канала»: канал @dedinit — полноценный источник данных в общей
|
||||
логике проекта (как любой TG-канал): краулер → классификатор → кандидат → подтверждение →
|
||||
публикация в тематические каналы → банк статей. Отличие от внешних источников — это
|
||||
СВОЙ контент (is_own=1): он всегда кандидат на публикацию («инъекция» в ленту),
|
||||
не блокируется политикой чужих форвардов и помечается атрибуцией автора.
|
||||
|
||||
## What Changes
|
||||
|
||||
- Добавить канал @dedinit (id 1150165846) в sources.yaml как источник `own: true`
|
||||
(свой контент пользователя), направление определяется классификатором (канал
|
||||
разносторонний: Linux, IT, AI, игры...).
|
||||
- Краулер: посты своего канала помечаются `is_own=1`, для них продолжает работать
|
||||
дедуп (sha256/url); политика форвардов для своего канала — как обычно (чужие
|
||||
форварды → fwd-поля без медиа).
|
||||
- Классификатор: свой контент с relevance critical/high → «сильные кандидаты»
|
||||
(самокатегоризация; приоритет в ленте подтверждения).
|
||||
- **Автораспространение (distribution)**: подтверждённый пост рассылается НЕ только
|
||||
в один канал @dedinit_vesti_<dir>_<lang>_bot, а во ВСЕ тематические боты/каналы,
|
||||
соответствующие направлениям поста (один пост может попасть в несколько лент).
|
||||
Режим — по-прежнему «черновик на подтверждение», но подтверждение ведёт к
|
||||
множественной публикации (fan-out).
|
||||
- Веб: фильтр «Свои» (только is_own посты), отображение бейджа «СВОЙ», выбор
|
||||
направлений для рассылки при подтверждении.
|
||||
- Расширить таблицы: posts.is_own, posts.is_own_canonical (первичный экземпляр),
|
||||
sources.own, published.distributed_dirs (какие направления розданы).
|
||||
|
||||
## Capabilities
|
||||
|
||||
### New Capabilities
|
||||
- `own-content`: Свой контент-хаб: пометка постов пользователя (is_own), приоритет
|
||||
в кандидатах, сквозная ссылка на оригинал во всех публикациях.
|
||||
|
||||
### Modified Capabilities
|
||||
- `tg-crawler`: пометка is_own по источникам с own: true; политика форвардов для
|
||||
своих каналов не отличается от внешних (dedup + fwd-поля).
|
||||
- `classifier`: свой контент → «сильный кандидат» (relevance critical/high при
|
||||
словарном попадании; classified=True даже без LLM-подтверждения, если есть
|
||||
направление).
|
||||
- `tg-publisher`: fan-out по нескольким направлениям; атрибуция «Дед в АйТи» +
|
||||
ссылка на оригинал.
|
||||
- `vesti-web`: фильтр «Свои», бейдж, выбор направлений рассылки при подтверждении.
|
||||
- `news-store`: бандл своего поста помечается origin=own + ссылка на оригинал в
|
||||
frontmatter.
|
||||
|
||||
## Impact
|
||||
|
||||
- Затронутые сервисы/порты: без новых портов; краулер (cron), классификатор,
|
||||
tg-publisher, веб 127.0.0.1:8400 — те же.
|
||||
- Файлы: sources/sources.yaml (новый источник), crawler/telegram_crawler.py,
|
||||
classifier/classify.py, publisher/bot.py, publisher/card.py, web/app.py,
|
||||
db/schema.sql (миграции ADD COLUMN is_own и др.).
|
||||
- Данные: 1039 постов канала @dedinit появятся как is_own посты; медиа своего канала
|
||||
скачивается (это контент пользователя — можно).
|
||||
- Секреты: не требуются новые (та же Telethon-сессия, токены ботов в .env).
|
||||
- Rollback: отключение источника `own: false` / удаление поля is_own; существующие
|
||||
внешние посты не затрагиваются; данные не удаляются (правило пользователя).
|
||||
Reference in New Issue
Block a user