diff --git a/app/extractors/hoster.py b/app/extractors/hoster.py index 08aa5c1..dc5dbcc 100644 --- a/app/extractors/hoster.py +++ b/app/extractors/hoster.py @@ -238,6 +238,20 @@ def extract_stream_from_hoster( ): log.debug("hoster %s: filemoon SPA → type=hoster (mobile-side resolve)", iframe_url) return None + # DoodStream + klony (playmogo/doply/myvidplay/dood.*/doodstream) — protokół pass_md5 + # + niewidzialny Cloudflare Turnstile wiązany z IP requestera. Server-side resolve + # bezcelowy (VPS dostaje Turnstile gate / IP-bound token). Zwracamy None → caller + # oddaje embed jako type='hoster' → mobile doodstream.ts robi pass_md5 z IP usera + # (residential przechodzi Turnstile). Bez tego leciało do yt-dlp → "Unsupported URL" + # spam (playmogo zalewał logi movie-resolve) + marnowanie ~sekund na martwy resolve. + if re.search( + r"//(?:[a-z0-9-]+\.)?(?:playmogo|doply|myvidplay|doodstream|dood|d0+d|" + r"dooood|do0od|do7go|ds2play|doodcdn)\.[a-z]{2,6}/", + iframe_url, + re.IGNORECASE, + ): + log.debug("hoster %s: doodstream clone → type=hoster (mobile-side resolve)", iframe_url) + return None headers = { "User-Agent": _DEFAULT_UA, "Accept": "text/html,application/xhtml+xml",