diff --git a/youtube_dl/extractor/gaskrank.py b/youtube_dl/extractor/gaskrank.py index 8ece658bf..d3ce4df2f 100644 --- a/youtube_dl/extractor/gaskrank.py +++ b/youtube_dl/extractor/gaskrank.py @@ -9,18 +9,40 @@ from ..utils import js_to_json class GaskrankIE(InfoExtractor): """InfoExtractor for gaskrank.tv""" _VALID_URL = r'https?://(?:www\.)?gaskrank\.tv/tv/(?P[^/]+)/(?P[^/]+)\.html?' - _TEST = { - 'url': 'http://www.gaskrank.tv/tv/motorrad-fun/strike-einparken-durch-anfaenger-crash-mit-groesserem-flurschaden.htm', - 'md5': '1ae88dbac97887d85ebd1157a95fc4f9', - 'info_dict': { - 'id': '201601/26955', - 'ext': 'mp4', - 'title': 'Strike! Einparken können nur Männer - Flurschaden hält sich in Grenzen *lol*', - 'thumbnail': r're:^https?://.*\.jpg$', - 'categories': ['motorrad-fun'], - 'display_id': 'strike-einparken-durch-anfaenger-crash-mit-groesserem-flurschaden', + _TESTS = [ + { + 'url': 'http://www.gaskrank.tv/tv/motorrad-fun/strike-einparken-durch-anfaenger-crash-mit-groesserem-flurschaden.htm', + 'md5': '1ae88dbac97887d85ebd1157a95fc4f9', + 'info_dict': { + 'id': '201601/26955', + 'ext': 'mp4', + 'title': 'Strike! Einparken können nur Männer - Flurschaden hält sich in Grenzen *lol*', + 'thumbnail': r're:^https?://.*\.jpg$', + 'categories': ['motorrad-fun'], + 'display_id': 'strike-einparken-durch-anfaenger-crash-mit-groesserem-flurschaden', + 'uploader_id': 'Bikefun', + 'upload_date': '20170110', + 'uploader_url': None, + 'tags': ['honkj', 'strike', 'idiot', 'depp', 'fahrschule', 'einparken', 'parken', 'autounfall', 'unfall', 'flurschaden', 'crash', 'accident', 'fail', 'rueckwaerts', 'umfaller'], + } + }, + { + 'url': 'http://www.gaskrank.tv/tv/racing/isle-of-man-tt-2011-michael-du-15920.htm', + 'md5': 'c33ee32c711bc6c8224bfcbe62b23095', + 'info_dict': { + 'id': '201106/15920', + 'ext': 'mp4', + 'title': 'Isle of Man - Michael Dunlop vs Guy Martin - schwindelig kucken', + 'thumbnail': r're:^https?://.*\.jpg$', + 'categories': ['racing'], + 'display_id': 'isle-of-man-tt-2011-michael-du-15920', + 'uploader_id': 'IOM', + 'upload_date': '20160506', + 'uploader_url': 'www.iomtt.com', + 'tags': ['schwindelig', 'iom', 'isle of man', 'guy martin', 'glen helen', 'michael dunlop', 'tt 2011', 'attacke'], + } } - } + ] def _real_extract(self, url): """extract information from gaskrank.tv""" @@ -33,10 +55,30 @@ class GaskrankIE(InfoExtractor): categories = [re.match(self._VALID_URL, url).group('categories')] title = self._search_regex(r'movieName\s*:\s*\'([^\']*)\'', webpage, 'title') thumbnail = self._search_regex(r'poster\s*:\s*\'([^\']*)\'', webpage, 'thumbnail', default=None) + + mobj = re.search(r'Video von:\s*(?P[^|]*?)\s*\|\s*vom:\s*(?P[0-9][0-9]).(?P[0-9][0-9]).(?P[0-9][0-9][0-9][0-9])', webpage) + uploader_id = mobj.groupdict().get('uploader_id') + upload_date = mobj.groupdict().get('upload_date_year') + mobj.groupdict().get('upload_date_month') + mobj.groupdict().get('upload_date_day') + if len(upload_date) != 8: + upload_date = None + + uploader_url = self._search_regex(r'Homepage:\s*<[^>]*?>(?P[^<]*)', webpage, 'uploader_url', default=None) + tags = re.findall(r'/tv/tags/[^/]*?/\"\s*>(?P[^<]*?)<', webpage) + + view_count = self._search_regex(r'class\s*=\s*\"gkRight\"(?:[^>]*>\s*<[^>]*)*icon-eye-open(?:[^>]*>\s*<[^>]*)*>\s*(?P[0-9\.]*)', webpage, 'view_count') + if view_count: + view_count = int(view_count.replace('.', '')) + + average_rating = self._search_regex(r'itemprop\s*=\s*\"ratingValue\"\s*>\s*(?P[0-9,]*)', webpage, 'average_rating') + if average_rating: + average_rating = float(average_rating.replace(',', '.')) + playlist = self._parse_json( self._search_regex(r'playlist\s*:\s*\[([^\]]*)\]', webpage, 'playlist', default='{}'), display_id, transform_source=fix_json, fatal=False) + video_id = self._search_regex(r'https?://movies\.gaskrank\.tv/([^-]*?)(-[^\.]*)?\.mp4', playlist.get('0').get('src'), 'video id') + formats = [] for key in playlist: formats.append({ @@ -52,4 +94,10 @@ class GaskrankIE(InfoExtractor): 'thumbnail': thumbnail, 'categories': categories, 'display_id': display_id, + 'uploader_id': uploader_id, + 'upload_date': upload_date, + 'uploader_url': uploader_url, + 'tags': tags, + 'view_count': view_count, + 'average_rating': average_rating, }