mirror of
https://gitverse.ru/kpa39l/vesti.git
synced 2026-09-29 09:55:03 +00:00
openspec: архив address-field-enhancement (одно поле Address, авто-название из TG/RSS)
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
# address-field-enhancement
|
||||
|
||||
Улучшение формы добавления источника: одно поле Address вместо url/channel/feed_url,
|
||||
авто-подстановка названия и slug, direction с автодополнением из существующих значений.
|
||||
|
||||
## Why
|
||||
|
||||
Пользователь: при добавлении telegram-источника хочется вставить адрес типа
|
||||
`https://t.me/mknewsru`, а название канала получить из TG API автоматически
|
||||
(«Мой компьютер»), slug — из адреса (`mknewsru`). Сейчас приходится вручную
|
||||
заполнять 4 поля (url, channel, feed_url, название), часть из которых избыточна.
|
||||
|
||||
Также вместо жёсткого списка DIRECTIONS в datalist — подставлять реально
|
||||
существующие в БД направления + возможность ввода нового.
|
||||
|
||||
## What Changes
|
||||
|
||||
- **web/templates/sources.html**: поле `channel`/`feed_url`/`url` заменяются
|
||||
одним полем `address`; JS: при выборе crawler подсказка меняется;
|
||||
кнопка «Найти название» (для telegram) вызывает GET /sources/preview?address=...
|
||||
и заполняет slug/name; direction — datalist из `DIRECTIONS` + свободный ввод.
|
||||
- **web/app.py**: новый route `GET /sources/preview` — принимает address,
|
||||
определяет тип (telegram/rss), парсит slug, получает название (telegram:
|
||||
Telethon get_entity; rss: feedparser), возвращает JSON {slug, name, url, channel/feed_url}.
|
||||
`_form_source`: `address` → парсинг в зависимости от crawler (telegram:
|
||||
channel из address, url=t.me/...; rss: feed_url=address, url=address).
|
||||
`_validate_source`: rss проверяет address как URL (непустой), telegram — channel.
|
||||
- **web/templates/sources.html**: datalist direction строится из DIRECTION_OPTIONS
|
||||
(переменная из app.py: DIRECTIONS + уникальные из БД), input остаётся свободным.
|
||||
|
||||
## Why Not
|
||||
|
||||
- Не изменяем БД/схему: `address` — только UI-концепция, в БД по-прежнему
|
||||
url/channel/feed_url.
|
||||
- Не трогаем краулеры: они читают channel/feed_url из yaml — парсинг на этапе
|
||||
добавления в yaml.
|
||||
|
||||
## Impact
|
||||
|
||||
- Форма проще: одно поле для адреса + crawler.
|
||||
- Название и slug подставляются автоматически (для telegram — реальное имя
|
||||
канала; для rss — title фида).
|
||||
- direction: реальные значения из БД, свободный ввод остаётся.
|
||||
- Обратная совместимость: старые источники с заполненными url/channel/feed_url
|
||||
работают как раньше (адрес в форму можно не вводить при edit).
|
||||
Reference in New Issue
Block a user