-
Notifications
You must be signed in to change notification settings - Fork 0
Extraktoren DE
🌐 English · Deutsch
Extraktoren lösen die Embed-URL eines Video-Hosters in einen direkten Stream-Link (meist HLS/MP4) auf, den yt-dlp/FFmpeg herunterladen kann.
Aktiv geschaltet (SUPPORTED_PROVIDERS in config.py):
| Hoster | Modul | Besonderheiten |
|---|---|---|
| VOE | voe.py |
Mehrstufige Deobfuskation (ROT13, Junk-Patterns, Base64), Captcha-Unterstützung |
| Vidmoly | vidmoly.py |
Referer https://vidmoly.biz erforderlich |
| Vidoza | vidoza.py |
— |
| VeeV | veev.py |
Eigene Header (Referer/Origin veev.to), Verfügbarkeits-Check via /api/veev/check
|
Vorhanden, aber deaktiviert (auskommentiert in SUPPORTED_PROVIDERS): Doodstream, Filemoon, LoadX, Luluvdo, Streamtape, Vidara.
extractors/__init__.py lädt beim Import alle Module aus extractors/provider/ und registriert jede Funktion, deren Name mit get_direct_link_from_ oder get_preview_image_link_from_ beginnt, im Dict provider_functions:
provider_functions["get_direct_link_from_voe"](embed_url)Beim App-Start probt _get_working_providers() (web/app.py) jeden Eintrag aus SUPPORTED_PROVIDERS mit einem leeren URL-String: Wirft der Extraktor NotImplementedError, gilt er als nicht implementiert; jede andere Exception heißt „implementiert“ (er hat die leere URL korrekt abgelehnt). Nur funktionsfähige Provider erscheinen in der UI (WORKING_PROVIDERS).
-
Datei anlegen:
src/aniworld/extractors/provider/<hoster>.py -
Funktion implementieren (Namenskonvention beachten —
<hoster>klein geschrieben):
import logging
logger = logging.getLogger(__name__)
try:
from ...config import GLOBAL_SESSION, is_source_unavailable
except ImportError:
from aniworld.config import GLOBAL_SESSION, is_source_unavailable
def get_direct_link_from_<hoster>(embed_url: str) -> str:
if not embed_url:
raise ValueError("Empty URL")
resp = GLOBAL_SESSION.get(embed_url)
if is_source_unavailable(resp.text, resp.status_code):
raise ValueError("Source removed")
# ... HTML/JS parsen, Stream-URL extrahieren ...
return direct_link-
Provider aktivieren: Namen in
SUPPORTED_PROVIDERS(config.py) eintragen — die Schreibweise mussfunc_name = f"get_direct_link_from_{p.lower()}"entsprechen. -
Header definieren: Falls der Hoster spezielle Header braucht, in
PROVIDER_HEADERS_D(Download) und ggf.PROVIDER_HEADERS_W(Watch) inconfig.pyergänzen — diese werden beim yt-dlp-/FFmpeg-Aufruf mitgegeben. - Optional:
get_preview_image_link_from_<hoster>()für Vorschaubilder.
| Funktion | Zweck |
|---|---|
GLOBAL_SESSION |
Thread-sichere niquests-Session mit realistischen Headern und DoH-DNS |
is_source_unavailable(html, status) |
Erkennt entfernte Videos (404/410/451 + HTML-Marker) ohne zusätzlichen Request |
check_redirect_available(url) |
Folgt dem Redirect der Streaming-Seite und prüft, ob der Hoster das Video noch hat (curl_cffi mit Chrome-Impersonation gegen Cloudflare) |
resolve_redirect_url(url) |
Liefert die finale Hoster-URL hinter einem Redirect |
Erkennt ein Extraktor eine Captcha-Seite (is_captcha_page aus playwright/captcha.py), kann er solve_captcha(...) aufrufen. Läuft der Aufruf im Queue-Worker, ist über Thread-Local die queue_id gesetzt — dadurch wird die Lösung interaktiv in der WebUI angeboten (Live-Screenshot + Klick-Weiterleitung). Der Chromium läuft mit Stealth-Patches, Netzwerk-Adblock und Schutz gegen Ad-Overlays.
🇬🇧 English
Users
- Installation
- Getting Started
- Configuration
- Web UI
- Download System
- Download History
- AutoSync
- Calendar
- Library
- Authentication
- Notifications
- Integrations
- SyncPlay
- Anime4K Upscaling
- Encoding
- Docker
- Supported Sites
Developers