diff options
| -rw-r--r-- | youtube_dl/extractor/__init__.py | 1 | ||||
| -rw-r--r-- | youtube_dl/extractor/minoto.py | 56 | 
2 files changed, 57 insertions, 0 deletions
| diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index c5ca01ee7..ba9c8b7a5 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -398,6 +398,7 @@ from .metacritic import MetacriticIE  from .mgoon import MgoonIE  from .minhateca import MinhatecaIE  from .ministrygrid import MinistryGridIE +from .minoto import MinotoIE  from .miomio import MioMioIE  from .mit import TechTVMITIE, MITIE, OCWMITIE  from .mitele import MiTeleIE diff --git a/youtube_dl/extractor/minoto.py b/youtube_dl/extractor/minoto.py new file mode 100644 index 000000000..959a10589 --- /dev/null +++ b/youtube_dl/extractor/minoto.py @@ -0,0 +1,56 @@ +# coding: utf-8 +from __future__ import unicode_literals + +import re + +from .common import InfoExtractor +from ..utils import int_or_none + + +class MinotoIE(InfoExtractor): +    _VALID_URL = r'(?:minoto:|https?://(?:play|iframe|embed)\.minoto-video\.com/(?P<player_id>[0-9]+)/)(?P<id>[a-zA-Z0-9]+)' + +    def _real_extract(self, url): +        mobj = re.match(self._VALID_URL, url) +        player_id = mobj.group('player_id') or '1' +        video_id = mobj.group('id') +        video_data = self._download_json('http://play.minoto-video.com/%s/%s.js' % (player_id, video_id), video_id) +        video_metadata = video_data['video-metadata'] +        formats = [] +        for fmt in video_data['video-files']: +            fmt_url = fmt.get('url') +            if not fmt_url: +                continue +            container = fmt.get('container') +            if container == 'hls': +                formats.extend(fmt_url, video_id, 'mp4', m3u8_id='hls', fatal=False) +            else: +                fmt_profile = fmt.get('profile') or {} +                f = { +                    'format_id': fmt_profile.get('name-short'), +                    'format_note': fmt_profile.get('name'), +                    'url': fmt_url, +                    'container': container, +                    'tbr': int_or_none(fmt.get('bitrate')), +                    'filesize': int_or_none(fmt.get('filesize')), +                    'width': int_or_none(fmt.get('width')), +                    'height': int_or_none(fmt.get('height')), +                } +                codecs = fmt.get('codecs') +                if codecs: +                    codecs = codecs.split(',') +                    if len(codecs) == 2: +                        f.update({ +                            'vcodec': codecs[0], +                            'acodec': codecs[1], +                        }) +                formats.append(f) +        self._sort_formats(formats) + +        return { +            'id': video_id, +            'title': video_metadata['title'], +            'description': video_metadata.get('description'), +            'thumbnail': video_metadata.get('video-poster', {}).get('url'), +            'formats': formats, +        } | 
