From 2a7c35da213dbf76fc341e735178114f8b85d7d9 Mon Sep 17 00:00:00 2001 From: woorst Date: Wed, 5 Jul 2017 23:56:16 -0500 Subject: [PATCH] liveleak mime parser --- rtv/mime_parsers.py | 31 +++++++++++++++++++++++++++++++ tests/test_mime_parsers.py | 4 ++++ 2 files changed, 35 insertions(+) diff --git a/rtv/mime_parsers.py b/rtv/mime_parsers.py index 3475c4d..1054efe 100644 --- a/rtv/mime_parsers.py +++ b/rtv/mime_parsers.py @@ -221,6 +221,36 @@ class VidmeMIMEParser(BaseMIMEParser): return url, None +class LiveleakMIMEParser(BaseMIMEParser): + """ + https://www.liveleak.com/view?i=12c_3456789 + + Sometimes only one video source is available + """ + pattern = re.compile(r'https?://((www|m)\.)?liveleak\.com/view\?i\=\w+$') + + @staticmethod + def get_mimetype(url): + page = requests.get(url) + soup = BeautifulSoup(page.content, 'html.parser') + + urls = [] + videos = soup.find_all('video') + for vid in videos: + source = vid.find('source', attr={'res': 'HD'}) \ + or vid.find('source') + if source: + urls.append((source.get('src'), source.get('type'))) + # TODO: Handle pages with multiple videos + # TODO: Handle pages with youtube embeds + if urls: + return urls[0] + else: + return url, None + # Parsers should be listed in the order they will be checked parsers = [ StreamableMIMEParser, @@ -231,5 +261,6 @@ parsers = [ ImgurMIMEParser, RedditUploadsMIMEParser, YoutubeMIMEParser, + LiveleakMIMEParser, GifvMIMEParser, BaseMIMEParser] diff --git a/tests/test_mime_parsers.py b/tests/test_mime_parsers.py index 403183e..a1ad3d4 100644 --- a/tests/test_mime_parsers.py +++ b/tests/test_mime_parsers.py @@ -69,6 +69,10 @@ URLS = OrderedDict([ 'https://vid.me/rHlb', re.compile('https://(.*)\.cloudfront\.net/videos/15694926/52450725.mp4(.*)'), 'video/mp4')), + ('liveleak_video', ( + 'https://www.liveleak.com/view?i=08b_1499296574', + re.compile('https://cdn.liveleak.com/80281E/ll_a_s/2017/Jul/5/LiveLeak-dot-com-08b_1499296574-NMHH8690_1499296571.mov.h264_720p.mp4(.*)'), + 'video/mp4')), ])