This commit is contained in:
2026-05-03 14:07:18 +03:00
parent bb6f2d67d8
commit 84b24b2b5b

View File

@@ -86,6 +86,14 @@ class MangalibSource:
page.on("response", on_response) page.on("response", on_response)
ok = await _navigate(page, chapters_url) ok = await _navigate(page, chapters_url)
if not ok:
mirror_chapters_url = _switch_to_mirror(chapters_url)
if mirror_chapters_url != chapters_url:
logger.info("Основной домен недоступен, пробуем зеркало: {}", mirror_chapters_url)
ok = await _navigate(page, mirror_chapters_url)
if ok:
chapters_url = mirror_chapters_url
base_manga_url = _switch_to_mirror(base_manga_url)
if not ok: if not ok:
page.remove_listener("response", on_response) page.remove_listener("response", on_response)
return None return None
@@ -230,6 +238,15 @@ class MangalibSource:
referer = manga_url or referer_origin referer = manga_url or referer_origin
ok = await _navigate(page, chapter_url, referer=referer) ok = await _navigate(page, chapter_url, referer=referer)
if not ok:
mirror_chapter_url = _switch_to_mirror(chapter_url)
if mirror_chapter_url != chapter_url:
logger.info("[{}] Основной домен недоступен, пробуем зеркало: {}", ch_id, mirror_chapter_url)
mirror_referer = _switch_to_mirror(referer) if referer else referer
ok = await _navigate(page, mirror_chapter_url, referer=mirror_referer)
if ok:
chapter_url = mirror_chapter_url
referer_origin = _base_url(mirror_chapter_url)
if not ok: if not ok:
page.remove_listener("response", on_response) page.remove_listener("response", on_response)
logger.error("[{}] Не удалось открыть главу: {}", ch_id, chapter_url) logger.error("[{}] Не удалось открыть главу: {}", ch_id, chapter_url)
@@ -370,6 +387,26 @@ class MangalibSource:
# Вспомогательные функции (приватные) # Вспомогательные функции (приватные)
# ────────────────────────────────────────────── # ──────────────────────────────────────────────
# Зеркальные домены: при недоступности основного переключаемся на зеркало
_MIRROR_MAP = {
"mangalib.me": "mangalib.org",
"mangalib.org": "mangalib.me",
"hentailib.me": "mangalib.org",
"yaoilib.me": "mangalib.org",
"readlib.net": "mangalib.org",
}
def _switch_to_mirror(url: str) -> str:
"""Заменяет домен в URL на зеркало из _MIRROR_MAP. Возвращает исходный URL если зеркала нет."""
parsed = urlparse(url)
host = parsed.netloc.lower().removeprefix("www.")
mirror = _MIRROR_MAP.get(host)
if not mirror:
return url
return parsed._replace(netloc=mirror).geturl()
def _ensure_chapters_section(url: str) -> str: def _ensure_chapters_section(url: str) -> str:
if "section=chapters" in url: if "section=chapters" in url:
return url return url