about summary refs log tree commit diff
path: root/youtube_dl/extractor/minoto.py
diff options
context:
space:
mode:
authorremitamine <remitamine@gmail.com>2016-03-12 22:13:25 +0100
committerremitamine <remitamine@gmail.com>2016-03-12 22:52:53 +0100
commitb970dfddaf6a086b62733c21550447ef4933364f (patch)
tree5a5102369cb6e1a556f894e9fea9c77204e476cf /youtube_dl/extractor/minoto.py
parent46a4ea827633c6590727f4688e8f4fbb2a545922 (diff)
downloadyoutube-dl-b970dfddaf6a086b62733c21550447ef4933364f.tar.gz
youtube-dl-b970dfddaf6a086b62733c21550447ef4933364f.tar.xz
youtube-dl-b970dfddaf6a086b62733c21550447ef4933364f.zip
[minoto] Add new extractor
Diffstat (limited to 'youtube_dl/extractor/minoto.py')
-rw-r--r--youtube_dl/extractor/minoto.py56
1 files changed, 56 insertions, 0 deletions
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,
+        }