From e69de90417a6dd686a01f4dba3ba8b218187c0f4 Mon Sep 17 00:00:00 2001 From: jtrzupek Date: Wed, 8 Jul 2026 00:05:11 +0200 Subject: [PATCH] fix(movie-resolve): route DoodStream clones to phone-side resolve, skip yt-dlp extract_stream_from_hoster fell through to yt-dlp for DoodStream clones (playmogo, doply, myvidplay, dood.*), which yt-dlp does not support -> "ERROR: Unsupported URL" spam dominating the movie-resolve logs, plus wasted seconds per resolve before the caller returned the embed as type='hoster' anyway. Now detects the dood-clone family up front and returns None immediately (same pattern as the filemoon SPA handling), so the embed goes straight to the mobile doodstream.ts resolver (pass_md5 with the user's residential IP, which clears the invisible Turnstile). Verified: playmogo/myvidplay/ doply URLs now return None with no yt-dlp attempt. Co-Authored-By: Claude Opus 4.8 --- app/extractors/hoster.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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",