40 lines
1.1 KiB
Python
40 lines
1.1 KiB
Python
import re
|
|
|
|
def get_youtube_id(url):
|
|
"""Extracts the video ID from a YouTube URL."""
|
|
if not url:
|
|
return None
|
|
|
|
# regex for extracting youtube id
|
|
# Supports:
|
|
# - https://www.youtube.com/watch?v=VIDEO_ID
|
|
# - https://youtu.be/VIDEO_ID
|
|
# - https://www.youtube.com/embed/VIDEO_ID
|
|
# - https://www.youtube.com/live/VIDEO_ID
|
|
# - https://m.youtube.com/watch?v=VIDEO_ID
|
|
|
|
patterns = [
|
|
r'(?:v=|\/)([0-9A-Za-z_-]{11}).*',
|
|
r'(?:youtu\.be\/)([0-9A-Za-z_-]{11})',
|
|
r'(?:embed\/)([0-9A-Za-z_-]{11})',
|
|
r'(?:live\/)([0-9A-Za-z_-]{11})',
|
|
]
|
|
|
|
for pattern in patterns:
|
|
match = re.search(pattern, url)
|
|
if match:
|
|
return match.group(1)
|
|
return None
|
|
|
|
test_urls = [
|
|
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
|
|
"https://youtu.be/dQw4w9WgXcQ",
|
|
"https://www.youtube.com/embed/dQw4w9WgXcQ",
|
|
"https://www.youtube.com/live/dQw4w9WgXcQ?feature=share",
|
|
"https://m.youtube.com/watch?v=dQw4w9WgXcQ&list=RDdQw4w9WgXcQ",
|
|
"invalid-url"
|
|
]
|
|
|
|
for url in test_urls:
|
|
print(f"URL: {url} -> ID: {get_youtube_id(url)}")
|