X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=youtube_dl%2Fextractor%2Fclipfish.py;h=bb52e0c6ff75178626f83cd0a6d2de6607e861ad;hb=cc63259d18fcb2940402d35139c40077481e5a22;hp=5f0b5602f8fb59a50a956b2a3366b304841060b9;hpb=e26f8712289c727a43d74a4669aee4924b9f75f2;p=youtube-dl diff --git a/youtube_dl/extractor/clipfish.py b/youtube_dl/extractor/clipfish.py index 5f0b5602f..bb52e0c6f 100644 --- a/youtube_dl/extractor/clipfish.py +++ b/youtube_dl/extractor/clipfish.py @@ -1,51 +1,67 @@ -import re -import time +# coding: utf-8 +from __future__ import unicode_literals from .common import InfoExtractor +from ..utils import ( + int_or_none, + unified_strdate, +) class ClipfishIE(InfoExtractor): - IE_NAME = u'clipfish' - - _VALID_URL = r'^https?://(?:www\.)?clipfish\.de/.*?/video/(?P[0-9]+)/' + _VALID_URL = r'https?://(?:www\.)?clipfish\.de/(?:[^/]+/)+video/(?P[0-9]+)' _TEST = { - u'url': u'http://www.clipfish.de/special/supertalent/video/4028320/supertalent-2013-ivana-opacak-singt-nobodys-perfect/', - u'file': u'4028320.f4v', - u'md5': u'5e38bda8c329fbfb42be0386a3f5a382', - u'info_dict': { - u'title': u'Supertalent 2013: Ivana Opacak singt Nobody\'s Perfect', - u'duration': 399, + 'url': 'http://www.clipfish.de/special/ugly-americans/video/4343170/s01-e01-ugly-americans-date-in-der-hoelle/', + 'md5': '720563e467b86374c194bdead08d207d', + 'info_dict': { + 'id': '4343170', + 'ext': 'mp4', + 'title': 'S01 E01 - Ugly Americans - Date in der Hölle', + 'description': 'Mark Lilly arbeitet im Sozialdienst der Stadt New York und soll Immigranten bei ihrer Einbürgerung in die USA zur Seite stehen.', + 'upload_date': '20161005', + 'duration': 1291, + 'view_count': int, } } def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - video_id = mobj.group(1) - - info_url = ('http://www.clipfish.de/devxml/videoinfo/%s?ts=%d' % - (video_id, int(time.time()))) - doc = self._download_xml( - info_url, video_id, note=u'Downloading info page') - title = doc.find('title').text - video_url = doc.find('filename').text - thumbnail = doc.find('imageurl').text - duration_str = doc.find('duration').text - m = re.match( - r'^(?P[0-9]+):(?P[0-9]{2}):(?P[0-9]{2}):(?P[0-9]*)$', - duration_str) - if m: - duration = ( - (int(m.group('hours')) * 60 * 60) + - (int(m.group('minutes')) * 60) + - (int(m.group('seconds'))) - ) - else: - duration = None + video_id = self._match_id(url) + + video_info = self._download_json( + 'http://www.clipfish.de/devapi/id/%s?format=json&apikey=hbbtv' % video_id, + video_id)['items'][0] + + formats = [] + + m3u8_url = video_info.get('media_videourl_hls') + if m3u8_url: + formats.append({ + 'url': m3u8_url.replace('de.hls.fra.clipfish.de', 'hls.fra.clipfish.de'), + 'ext': 'mp4', + 'format_id': 'hls', + }) + + mp4_url = video_info.get('media_videourl') + if mp4_url: + formats.append({ + 'url': mp4_url, + 'format_id': 'mp4', + 'width': int_or_none(video_info.get('width')), + 'height': int_or_none(video_info.get('height')), + 'tbr': int_or_none(video_info.get('bitrate')), + }) + + descr = video_info.get('descr') + if descr: + descr = descr.strip() return { 'id': video_id, - 'title': title, - 'url': video_url, - 'thumbnail': thumbnail, - 'duration': duration, + 'title': video_info['title'], + 'description': descr, + 'formats': formats, + 'thumbnail': video_info.get('media_content_thumbnail_large') or video_info.get('media_thumbnail'), + 'duration': int_or_none(video_info.get('media_length')), + 'upload_date': unified_strdate(video_info.get('pubDate')), + 'view_count': int_or_none(video_info.get('media_views')) }