27 lines
1.7 KiB
Markdown
27 lines
1.7 KiB
Markdown
# Обновление 5 — Нормализация URL картинок
|
||
|
||
## Проблема
|
||
|
||
Клиент Conversations (и его форки) не отображает OOB-картинки, если URL содержит символ `:`
|
||
в path-части (например, `…/1579780545_0:182:3048:1897_…jpg`).
|
||
|
||
При парсинге OOB `<url>` клиент интерпретирует `:` как разделитель схемы или порта
|
||
и обрезает URL — ссылка становится невалидной, картинка не загружается.
|
||
|
||
URL без двоеточий в пути отображаются корректно.
|
||
|
||
## Решение
|
||
|
||
URL-энкодировать path-часть URL картинки перед сохранением в `NewsItem`.
|
||
Символ `:` кодируется как `%3A`. Согласно RFC 3986, percent-encoded символы
|
||
эквивалентны оригинальным — CDN-серверы обязаны принимать такие URL.
|
||
|
||
## Техническая реализация
|
||
|
||
1. В `adapters/sources/rss/fetcher.py` добавить функцию `_normalize_image_url(url: str) -> str`
|
||
2. Функция использует `urllib.parse` (стандартная библиотека, без новых зависимостей):
|
||
- разобрать URL через `urlparse`
|
||
- перекодировать path через `quote(path, safe='/')` — слэши остаются, `:` кодируется
|
||
- собрать обратно через `urlunparse`
|
||
3. Вызывать `_normalize_image_url` в `_extract_image_url` перед возвратом URL
|