diff options
Diffstat (limited to 'youtube_dl/extractor/mpora.py')
-rw-r--r-- | youtube_dl/extractor/mpora.py | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/youtube_dl/extractor/mpora.py b/youtube_dl/extractor/mpora.py new file mode 100644 index 000000000..b4cdd2a1e --- /dev/null +++ b/youtube_dl/extractor/mpora.py @@ -0,0 +1,66 @@ +from __future__ import unicode_literals + +import json +import re + +from .common import InfoExtractor +from ..utils import ( + int_or_none, +) + + +class MporaIE(InfoExtractor): + _VALID_URL = r'^https?://(www\.)?mpora\.(?:com|de)/videos/(?P<id>[^?#/]+)' + _IE_NAME = 'MPORA' + + _TEST = { + 'url': 'http://mpora.de/videos/AAdo8okx4wiz/embed?locale=de', + 'file': 'AAdo8okx4wiz.mp4', + 'md5': 'a7a228473eedd3be741397cf452932eb', + 'info_dict': { + 'title': 'Katy Curd - Winter in the Forest', + 'duration': 416, + 'uploader': 'petenewman', + }, + } + + def _real_extract(self, url): + m = re.match(self._VALID_URL, url) + video_id = m.group('id') + + webpage = self._download_webpage(url, video_id) + data_json = self._search_regex( + r"new FM\.Player\('[^']+',\s*(\{.*?)\);\n", webpage, 'json') + + data = json.loads(data_json) + + uploader = data['info_overlay']['name'] + duration = data['video']['duration'] // 1000 + thumbnail = data['video']['encodings']['sd']['poster'] + title = data['info_overlay']['title'] + + formats = [] + for encoding_id, edata in data['video']['encodings'].items(): + for src in edata['sources']: + width_str = self._search_regex( + r'_([0-9]+)\.[a-zA-Z0-9]+$', src['src'], + False, default=None) + vcodec = src['type'].partition('/')[2] + + formats.append({ + 'format_id': encoding_id + '-' + vcodec, + 'url': src['src'], + 'vcodec': vcodec, + 'width': int_or_none(width_str), + }) + + self._sort_formats(formats) + + return { + 'id': video_id, + 'title': title, + 'formats': formats, + 'uploader': uploader, + 'duration': duration, + 'thumbnail': thumbnail, + } |