X-Git-Url: https://git.rapsys.eu/youtubedl/blobdiff_plain/a316b1d93c357b5edf19d5e3100526a94191c029..82d01c1a88911e89e3e7ed4518d54c028f9e4792:/youtube_dl/extractor/trilulilu.py diff --git a/youtube_dl/extractor/trilulilu.py b/youtube_dl/extractor/trilulilu.py index f278951..185accc 100644 --- a/youtube_dl/extractor/trilulilu.py +++ b/youtube_dl/extractor/trilulilu.py @@ -1,73 +1,80 @@ -import json +# coding: utf-8 +from __future__ import unicode_literals + import re -import xml.etree.ElementTree from .common import InfoExtractor +from ..utils import ExtractorError class TriluliluIE(InfoExtractor): - _VALID_URL = r'(?x)(?:https?://)?(?:www\.)?trilulilu\.ro/video-(?P[^/]+)/(?P[^/]+)' + _VALID_URL = r'https?://(?:www\.)?trilulilu\.ro/(?:video-[^/]+/)?(?P[^/#\?]+)' _TEST = { - u"url": u"http://www.trilulilu.ro/video-animatie/big-buck-bunny-1", - u'file': u"big-buck-bunny-1.mp4", - u'info_dict': { - u"title": u"Big Buck Bunny", - u"description": u":) pentru copilul din noi", + 'url': 'http://www.trilulilu.ro/video-animatie/big-buck-bunny-1', + 'md5': 'c1450a00da251e2769b74b9005601cac', + 'info_dict': { + 'id': 'ae2899e124140b', + 'ext': 'mp4', + 'title': 'Big Buck Bunny', + 'description': ':) pentru copilul din noi', }, - # Server ignores Range headers (--test) - u"params": { - u"skip_download": True - } } def _real_extract(self, url): - mobj = re.match(self._VALID_URL, url) - video_id = mobj.group('video_id') + display_id = self._match_id(url) + webpage = self._download_webpage(url, display_id) + + if re.search(r'Fişierul nu este disponibil pentru vizionare în ţara dumneavoastră', webpage): + raise ExtractorError( + 'This video is not available in your country.', expected=True) + elif re.search('Fişierul poate fi accesat doar de către prietenii lui', webpage): + raise ExtractorError('This video is private.', expected=True) + + flashvars_str = self._search_regex( + r'block_flash_vars\s*=\s*(\{[^\}]+\})', webpage, 'flashvars', fatal=False, default=None) - webpage = self._download_webpage(url, video_id) + if flashvars_str: + flashvars = self._parse_json(flashvars_str, display_id) + else: + raise ExtractorError( + 'This page does not contain videos', expected=True) + if flashvars['isMP3'] == 'true': + raise ExtractorError( + 'Audio downloads are currently not supported', expected=True) + + video_id = flashvars['hash'] title = self._og_search_title(webpage) thumbnail = self._og_search_thumbnail(webpage) - description = self._og_search_description(webpage) - - log_str = self._search_regex( - r'block_flash_vars[ ]=[ ]({[^}]+})', webpage, u'log info') - log = json.loads(log_str) + description = self._og_search_description(webpage, default=None) - format_url = (u'http://fs%(server)s.trilulilu.ro/%(hash)s/' - u'video-formats2' % log) - format_str = self._download_webpage( + format_url = ('http://fs%(server)s.trilulilu.ro/%(hash)s/' + 'video-formats2' % flashvars) + format_doc = self._download_xml( format_url, video_id, - note=u'Downloading formats', - errnote=u'Error while downloading formats') + note='Downloading formats', + errnote='Error while downloading formats') - format_doc = xml.etree.ElementTree.fromstring(format_str) - video_url_template = ( - u'http://fs%(server)s.trilulilu.ro/stream.php?type=video' - u'&source=site&hash=%(hash)s&username=%(userid)s&' - u'key=ministhebest&format=%%s&sig=&exp=' % - log) + 'http://fs%(server)s.trilulilu.ro/stream.php?type=video' + '&source=site&hash=%(hash)s&username=%(userid)s&' + 'key=ministhebest&format=%%s&sig=&exp=' % + flashvars) formats = [ { - 'format': fnode.text, + 'format_id': fnode.text.partition('-')[2], 'url': video_url_template % fnode.text, + 'ext': fnode.text.partition('-')[0] } for fnode in format_doc.findall('./formats/format') ] - info = { - '_type': 'video', + return { 'id': video_id, + 'display_id': display_id, 'formats': formats, 'title': title, 'description': description, 'thumbnail': thumbnail, } - - # TODO: Remove when #980 has been merged - info['url'] = formats[-1]['url'] - info['ext'] = formats[-1]['format'].partition('-')[0] - - return info