diff --git a/common/templatetags/common_tags.py b/common/templatetags/common_tags.py index 738f04b..a928917 100644 --- a/common/templatetags/common_tags.py +++ b/common/templatetags/common_tags.py @@ -8,10 +8,10 @@ try: # Python 3 - from urllib.parse import urlencode + from urllib.parse import (urlencode, urlparse, parse_qs) except ImportError: # Python 2 - from urllib import urlencode + from urllib import (urlencode, urlparse, parse_qs) register = template.Library() @@ -164,3 +164,42 @@ def markdown_find_images(markdown_text): # findgex = r"[^(\s]+\.(?:jpeg|jpg|png|gif)(?=\b[+^\)])" findgex = r"[^(\s]+\.(?:jpeg|jpg|png|gif)(?=\))" return re.findall(findgex, markdown_text) + + +@register.filter +def get_youtube_video_id(url): + """ + Returns Video_ID extracting from the given url of Youtube + + Examples of URLs: + Valid: + 'http://youtu.be/_lOT2p_FCvA', + 'www.youtube.com/watch?v=_lOT2p_FCvA&feature=feedu', + 'http://www.youtube.com/embed/_lOT2p_FCvA', + 'http://www.youtube.com/v/_lOT2p_FCvA?version=3&hl=en_US', + 'https://www.youtube.com/watch?v=rTHlyTphWP0&index=6&list=PLjeDyYvG6-40qawYNR4juzvSOg-ezZ2a6', + 'youtube.com/watch?v=_lOT2p_FCvA', + 'https://www.youtube.com/watch?v=S6q41Rfltsk' + + Invalid: + 'youtu.be/watch?v=_lOT2p_FCvA' + + usage: + {{ youtube_url|get_youtube_video_id }} + + Source: https://gist.github.com/kmonsoor/2a1afba4ee127cce50a0 + """ + if url.startswith(('youtu', 'www')): + url = 'http://' + url + + query = urlparse(url) + + if 'youtube' in query.hostname: + if query.path == '/watch': + return parse_qs(query.query)['v'][0] + elif query.path.startswith(('/embed/', '/v/')): + return query.path.split('/')[2] + elif 'youtu.be' in query.hostname: + return query.path[1:] + else: + raise ValueError