]> Raphaël G. Git Repositories - youtubedl/blobdiff - youtube_dl/extractor/joj.py
New upstream version 2017.09.24
[youtubedl] / youtube_dl / extractor / joj.py
diff --git a/youtube_dl/extractor/joj.py b/youtube_dl/extractor/joj.py
new file mode 100755 (executable)
index 0000000..a764023
--- /dev/null
@@ -0,0 +1,100 @@
+# coding: utf-8\r
+from __future__ import unicode_literals\r
+\r
+import re\r
+\r
+from .common import InfoExtractor\r
+from ..compat import compat_str\r
+from ..utils import (\r
+    int_or_none,\r
+    js_to_json,\r
+    try_get,\r
+)\r
+\r
+\r
+class JojIE(InfoExtractor):\r
+    _VALID_URL = r'''(?x)\r
+                    (?:\r
+                        joj:|\r
+                        https?://media\.joj\.sk/embed/\r
+                    )\r
+                    (?P<id>[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12})\r
+                '''\r
+    _TESTS = [{\r
+        'url': 'https://media.joj.sk/embed/a388ec4c-6019-4a4a-9312-b1bee194e932',\r
+        'info_dict': {\r
+            'id': 'a388ec4c-6019-4a4a-9312-b1bee194e932',\r
+            'ext': 'mp4',\r
+            'title': 'NOVÉ BÝVANIE',\r
+            'thumbnail': r're:^https?://.*\.jpg$',\r
+            'duration': 3118,\r
+        }\r
+    }, {\r
+        'url': 'joj:a388ec4c-6019-4a4a-9312-b1bee194e932',\r
+        'only_matching': True,\r
+    }]\r
+\r
+    @staticmethod\r
+    def _extract_urls(webpage):\r
+        return re.findall(\r
+            r'<iframe\b[^>]+\bsrc=["\'](?P<url>(?:https?:)?//media\.joj\.sk/embed/[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12})',\r
+            webpage)\r
+\r
+    def _real_extract(self, url):\r
+        video_id = self._match_id(url)\r
+\r
+        webpage = self._download_webpage(\r
+            'https://media.joj.sk/embed/%s' % video_id, video_id)\r
+\r
+        title = self._search_regex(\r
+            (r'videoTitle\s*:\s*(["\'])(?P<title>(?:(?!\1).)+)\1',\r
+             r'<title>(?P<title>[^<]+)'), webpage, 'title',\r
+            default=None, group='title') or self._og_search_title(webpage)\r
+\r
+        bitrates = self._parse_json(\r
+            self._search_regex(\r
+                r'(?s)bitrates\s*=\s*({.+?});', webpage, 'bitrates',\r
+                default='{}'),\r
+            video_id, transform_source=js_to_json, fatal=False)\r
+\r
+        formats = []\r
+        for format_url in try_get(bitrates, lambda x: x['mp4'], list) or []:\r
+            if isinstance(format_url, compat_str):\r
+                height = self._search_regex(\r
+                    r'(\d+)[pP]\.', format_url, 'height', default=None)\r
+                formats.append({\r
+                    'url': format_url,\r
+                    'format_id': '%sp' % height if height else None,\r
+                    'height': int(height),\r
+                })\r
+        if not formats:\r
+            playlist = self._download_xml(\r
+                'https://media.joj.sk/services/Video.php?clip=%s' % video_id,\r
+                video_id)\r
+            for file_el in playlist.findall('./files/file'):\r
+                path = file_el.get('path')\r
+                if not path:\r
+                    continue\r
+                format_id = file_el.get('id') or file_el.get('label')\r
+                formats.append({\r
+                    'url': 'http://n16.joj.sk/storage/%s' % path.replace(\r
+                        'dat/', '', 1),\r
+                    'format_id': format_id,\r
+                    'height': int_or_none(self._search_regex(\r
+                        r'(\d+)[pP]', format_id or path, 'height',\r
+                        default=None)),\r
+                })\r
+        self._sort_formats(formats)\r
+\r
+        thumbnail = self._og_search_thumbnail(webpage)\r
+\r
+        duration = int_or_none(self._search_regex(\r
+            r'videoDuration\s*:\s*(\d+)', webpage, 'duration', fatal=False))\r
+\r
+        return {\r
+            'id': video_id,\r
+            'title': title,\r
+            'thumbnail': thumbnail,\r
+            'duration': duration,\r
+            'formats': formats,\r
+        }\r