X-Git-Url: https://git.rapsys.eu/youtubedl/blobdiff_plain/bc5059672e222ec4df4fe3983c399c0d0fca84d5..0534c7ab3aafa6065faa9453651db8a8e11204b1:/youtube_dl/extractor/trilulilu.py?ds=inline diff --git a/youtube_dl/extractor/trilulilu.py b/youtube_dl/extractor/trilulilu.py index d64aaa4..185accc 100644 --- a/youtube_dl/extractor/trilulilu.py +++ b/youtube_dl/extractor/trilulilu.py @@ -1,53 +1,68 @@ -import json +# coding: utf-8 +from __future__ import unicode_literals + import re 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_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') + 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] } @@ -56,11 +71,10 @@ class TriluliluIE(InfoExtractor): ] return { - '_type': 'video', 'id': video_id, + 'display_id': display_id, 'formats': formats, 'title': title, 'description': description, 'thumbnail': thumbnail, } -