diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 18d8dbcd6..1ab96a8cf 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -7,6 +7,10 @@ try: except ImportError: _LAZY_LOADER = False from .extractors import * +from .iol import ( + IOLIE, + IOLStreamIE +) _ALL_CLASSES = [ klass diff --git a/youtube_dl/extractor/iol.py b/youtube_dl/extractor/iol.py new file mode 100644 index 000000000..5d6f458ac --- /dev/null +++ b/youtube_dl/extractor/iol.py @@ -0,0 +1,82 @@ +# coding: utf-8 +from __future__ import unicode_literals + +from .common import InfoExtractor + +import re + + +class IOLIE(InfoExtractor): + _VALID_URL = r'http://(tviplayer|www\.tvi24)\.iol\.pt/.*/(?P[0-9a-f]{24})[/0-9]*$' + _TESTS = [{ + 'url': 'http://tviplayer.iol.pt/programa/euromilhoes/53c6b3153004dc006243b07b/video/55f878f90cf203f8b03cea6d', + 'md5': 'a9b3e3630201401fc3b8099d9d689191', + 'info_dict': { + 'id': '55f878f90cf203f8b03cea6d', + 'ext': 'mp4', + 'title': u'Euromilhões - 15 de setembro de 2015', + # 'tumbnail': 'http://www.iol.pt/multimedia/oratvi/multimedia/imagem/id/55f87a280cf2e6961770f01f', + 'description': u'Com Mónica Jardim' + } + }, { + 'url': 'http://tviplayer.iol.pt/programa/isso-e-tudo-muito-bonito-mas/55f30f2e0cf2a6b037fc1f2f/video/55f730c40cf23fa665481b18', + 'md5': 'fb7231bf3a12eee731c56eaa6ecb5474', + 'info_dict': { + 'id': '55f730c40cf23fa665481b18', + 'ext': 'mp4', + 'title': u'Isso é tudo muito bonito, mas: Concatena, filho, concatena', + # 'tumbnail': 'http://www.iol.pt/multimedia/oratvi/multimedia/imagem/id/55f737330cf23fa665481b2d', + 'description': u'Quando os adversários unem perspectivas.' + } + }, { + 'url': 'http://www.tvi24.iol.pt/videos/passos-criacao-de-emprego-e-facto-muito-importante/55f816640cf2e6961770ef7a/2', + 'md5': '49d4da9901f00e72a127ff4b635f69ee', + 'info_dict': { + 'id': '55f816640cf2e6961770ef7a', + 'ext': 'mp4', + 'title': u'Passos: criação de emprego é facto muito importante', + # 'tumbnail': 'http://www.iol.pt/multimedia/oratvi/multimedia/imagem/id/55f8180e0cf21413dfb1d96d/', + 'description': u'PM sublinha que é o nível mais elevado de há vários anos' + } + }] + + def _real_extract(self, url): + video_id = self._match_id(url) + webpage = self._download_webpage(url, video_id) + + title = self._og_search_title(webpage) + title = re.sub(r' \| TVI Player$', '', title, re.IGNORECASE) + + description = self._og_search_description(webpage) + thumbnail = self._og_search_thumbnail(webpage) + m3u8_url = self._html_search_regex(r'''videoUrl:\s*'([^']+\.m3u8[^']*)'\s*,''', webpage, 'm3u8 playlist') + formats = self._extract_m3u8_formats(m3u8_url, video_id, ext='mp4') + + return { + 'id': video_id, + 'title': title, + 'description': description, + 'thumbnail': thumbnail, + 'formats': formats + } + + +class IOLStreamIE(IOLIE): + _VALID_URL = r'http://tviplayer\.iol\.pt/direto/(?P\S+)' + _TESTS = [{ + 'url': 'http://tviplayer.iol.pt/direto/TVI', + 'info_dict': { + 'id': 'TVI', + 'ext': 'mp4', + 'title': 're:^Direto TVI', + 'description': u'A TVI ao pé de si. Sempre.', + 'is_live': True, + } + }] + + def _real_extract(self, url): + ret = IOLIE._real_extract(self, url) + ret['is_live'] = True + ret['title'] = self._live_title(ret['title']) + + return ret