jabnews/docs/update-5.md
2026-03-23 12:12:55 +03:00

1.7 KiB
Raw Permalink Blame History

Обновление 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