Files

32 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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-извлечение, бесплатно. Дообогащение модели для
одобренных — отдельная задача (по кнопке, экономия токенов).