fix: Properly validate URLs using extractors' suitable() method

This commit is contained in:
pacnpal
2024-11-15 00:53:56 +00:00
parent 4e632276c2
commit da9a6e40f9

View File

@@ -5,6 +5,7 @@ import logging
import asyncio import asyncio
import ffmpeg import ffmpeg
import yt_dlp import yt_dlp
import shutil
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
from typing import Dict, List, Optional, Tuple from typing import Dict, List, Optional, Tuple
from pathlib import Path from pathlib import Path
@@ -301,9 +302,21 @@ class VideoDownloader:
"""Check if URL is supported""" """Check if URL is supported"""
try: try:
with yt_dlp.YoutubeDL() as ydl: with yt_dlp.YoutubeDL() as ydl:
# Try to extract info without downloading # Get extractors
ie = ydl.extract_info(url, download=False, process=False) extractors = ydl._ies
return ie is not None # Try each extractor
for extractor in extractors:
if hasattr(extractor, '_VALID_URL') and extractor._VALID_URL:
# Skip if site is not enabled
if self.enabled_sites and not any(
site.lower() in extractor.IE_NAME.lower()
for site in self.enabled_sites
):
continue
# Try to match URL
if extractor.suitable(url):
return True
return False
except Exception as e: except Exception as e:
logger.error(f"Error checking URL support: {str(e)}") logger.error(f"Error checking URL support: {str(e)}")
return False return False