from urllib.parse import urlparse, parse_qs from core.errors import bad_request YOUTUBE_DOMAINS = ("youtube.com", "www.youtube.com", "youtu.be") def validate_youtube_url(url: str): try: parsed = urlparse(url) except Exception: bad_request("Invalid YouTube URL", "INVALID_URL") if parsed.netloc not in YOUTUBE_DOMAINS: bad_request("Invalid YouTube URL", "INVALID_URL") if parsed.netloc == "youtu.be": if not parsed.path.strip("/"): bad_request("Invalid YouTube video URL", "INVALID_URL") return if parsed.path == "/watch": qs = parse_qs(parsed.query) if "v" not in qs or not qs["v"][0]: bad_request("Invalid YouTube video URL", "INVALID_URL") return bad_request("Invalid YouTube video URL", "INVALID_URL")