| import re | |
| def extract_video_id(url: str) -> str: | |
| patterns = [ | |
| r"v=([a-zA-Z0-9_-]{11})", | |
| r"youtu\.be/([a-zA-Z0-9_-]{11})", | |
| r"shorts/([a-zA-Z0-9_-]{11})" | |
| ] | |
| for p in patterns: | |
| m = re.search(p, url) | |
| if m: | |
| return m.group(1) | |
| raise ValueError("Invalid YouTube URL") |