mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
openspec: change-ы manual-direction (ручное направление без LLM) и extract-post-sources (извлечение источников из постов) + sources/extract.py
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
# 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-извлечение, бесплатно. Дообогащение модели для
|
||||
одобренных — отдельная задача (по кнопке, экономия токенов).
|
||||
Reference in New Issue
Block a user