]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/vice.py
[ie/crunchyroll] Fix stream extraction (#10005)
[yt-dlp.git] / yt_dlp / extractor / vice.py
index c8c30559e7fe2de4143e5aa1555ed64e45ec22d2..d31908fb126465a5e0edb16c3d75cd10547aec38 100644 (file)
@@ -1,20 +1,14 @@
-# coding: utf-8
-from __future__ import unicode_literals
-
 import functools
 import hashlib
 import json
 import random
-import re
 import time
 
 from .adobepass import AdobePassIE
 from .common import InfoExtractor
 from .youtube import YoutubeIE
-from ..compat import (
-    compat_HTTPError,
-    compat_str,
-)
+from ..compat import compat_str
+from ..networking.exceptions import HTTPError
 from ..utils import (
     clean_html,
     ExtractorError,
@@ -41,6 +35,7 @@ def _call_api(self, resource, resource_key, resource_id, locale, fields, args=''
 class ViceIE(ViceBaseIE, AdobePassIE):
     IE_NAME = 'vice'
     _VALID_URL = r'https?://(?:(?:video|vms)\.vice|(?:www\.)?vice(?:land|tv))\.com/(?P<locale>[^/]+)/(?:video/[^/]+|embed)/(?P<id>[\da-f]{24})'
+    _EMBED_REGEX = [r'<iframe\b[^>]+\bsrc=["\'](?P<url>(?:https?:)?//video\.vice\.com/[^/]+/embed/[\da-f]{24})']
     _TESTS = [{
         'url': 'https://video.vice.com/en_us/video/pet-cremator/58c69e38a55424f1227dc3f7',
         'info_dict': {
@@ -106,17 +101,6 @@ class ViceIE(ViceBaseIE, AdobePassIE):
         'only_matching': True,
     }]
 
-    @staticmethod
-    def _extract_urls(webpage):
-        return re.findall(
-            r'<iframe\b[^>]+\bsrc=["\']((?:https?:)?//video\.vice\.com/[^/]+/embed/[\da-f]{24})',
-            webpage)
-
-    @staticmethod
-    def _extract_url(webpage):
-        urls = ViceIE._extract_urls(webpage)
-        return urls[0] if urls else None
-
     def _real_extract(self, url):
         locale, video_id = self._match_valid_url(url).groups()
 
@@ -154,8 +138,8 @@ def _real_extract(self, url):
                 'https://vms.vice.com/%s/video/preplay/%s' % (locale, video_id),
                 video_id, query=query)
         except ExtractorError as e:
-            if isinstance(e.cause, compat_HTTPError) and e.cause.code in (400, 401):
-                error = json.loads(e.cause.read().decode())
+            if isinstance(e.cause, HTTPError) and e.cause.status in (400, 401):
+                error = json.loads(e.cause.response.read().decode())
                 error_message = error.get('error_description') or error['details']
                 raise ExtractorError('%s said: %s' % (
                     self.IE_NAME, error_message), expected=True)
@@ -164,7 +148,6 @@ def _real_extract(self, url):
         video_data = preplay['video']
         formats = self._extract_m3u8_formats(
             preplay['playURL'], video_id, 'mp4', 'm3u8_native')
-        self._sort_formats(formats)
         episode = video_data.get('episode') or {}
         channel = video_data.get('channel') or {}
         season = video_data.get('season') or {}
@@ -241,7 +224,7 @@ def _real_extract(self, url):
 
 class ViceArticleIE(ViceBaseIE):
     IE_NAME = 'vice:article'
-    _VALID_URL = r'https://(?:www\.)?vice\.com/(?P<locale>[^/]+)/article/(?:[0-9a-z]{6}/)?(?P<id>[^?#]+)'
+    _VALID_URL = r'https?://(?:www\.)?vice\.com/(?P<locale>[^/]+)/article/(?:[0-9a-z]{6}/)?(?P<id>[^?#]+)'
 
     _TESTS = [{
         'url': 'https://www.vice.com/en_us/article/on-set-with-the-woman-making-mormon-porn-in-utah',
@@ -319,12 +302,6 @@ def _url_res(video_url, ie_key):
         if vice_url:
             return _url_res(vice_url, ViceIE.ie_key())
 
-        embed_code = self._search_regex(
-            r'embedCode=([^&\'"]+)', body,
-            'ooyala embed code', default=None)
-        if embed_code:
-            return _url_res('ooyala:%s' % embed_code, 'Ooyala')
-
         youtube_url = YoutubeIE._extract_url(body)
         if youtube_url:
             return _url_res(youtube_url, YoutubeIE.ie_key())