mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 18:05:03 +00:00
32 lines
2.5 KiB
Markdown
32 lines
2.5 KiB
Markdown
# extract-post-sources
|
||
|
||
Извлечение источников новостей из текста постов (TG-каналы/сайты) и быстрое добавление в реестр.
|
||
|
||
## Why
|
||
|
||
Пользователь: нужно извлекать источники новостей из полученных постов (каналы/сайты,
|
||
откуда пришли новости), чтобы в следующий раз забирать новости напрямую из источника.
|
||
Сейчас ссылки в тексте постов никак не используются: всё приходит из sources.yaml,
|
||
а репосты/упоминания других каналов и сайтов теряются.
|
||
|
||
## What Changes
|
||
|
||
- **sources/extract.py** (новый): `extract_sources_from_text(text) -> list[dict]` —
|
||
находит в тексте ссылки на TG-каналы (t.me/handle, @handle, t.me/s/handle) и
|
||
внешние сайты (https://domain), исключает ссылки на сам пост (t.me/channel/postid),
|
||
дедуплицирует. Ограничение: не более 5 найденных на пост (шум).
|
||
- **web/app.py**:
|
||
- helper `_post_sources(post)` → список {kind, address, slug_hint, known} для карточки
|
||
(known = slug_hint уже есть в sources).
|
||
- В render candidates/selected передаёт `post_sources`.
|
||
- POST `/sources/add-from-post`: {address} → parse_address + add_or_update_source
|
||
(переиспользует существующий CRUD). Возвращает redirect на ту же страницу с did-сообщением.
|
||
- **web/templates/candidates.html / selected.html**: блок «🌐 Источники из поста» под бейджами:
|
||
для каждого найденного — `@handle` / `domain`, бейдж «в реестре» или кнопка «➕».
|
||
|
||
## Impact
|
||
|
||
- В карточках кандидатов/отобранных видны ссылки на внешние каналы/сайты из текста.
|
||
- Один клик — добавить источник в реестр (yaml + БД, как ручное добавление).
|
||
- Никаких LLM-вызовов — regex-извлечение, бесплатно. Дообогащение модели для
|
||
одобренных — отдельная задача (по кнопке, экономия токенов). |