]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/vevo.py
[ie/orf:on] Improve extraction (#9677)
[yt-dlp.git] / yt_dlp / extractor / vevo.py
index 825089f47145ec87a3e6cb1b369bd3e1e02f9e9b..aa40227a76574af87adff4b8c9265b05d70e2b85 100644 (file)
@@ -2,10 +2,8 @@
 import json
 
 from .common import InfoExtractor
-from ..compat import (
-    compat_str,
-    compat_HTTPError,
-)
+from ..compat import compat_str
+from ..networking.exceptions import HTTPError
 from ..utils import (
     ExtractorError,
     int_or_none,
@@ -36,6 +34,7 @@ class VevoIE(VevoBaseIE):
            https?://tv\.vevo\.com/watch/artist/(?:[^/]+)/|
            vevo:)
         (?P<id>[^&?#]+)'''
+    _EMBED_REGEX = [r'<iframe[^>]+?src=(["\'])(?P<url>(?:https?:)?//(?:cache\.)?vevo\.com/.+?)\1']
 
     _TESTS = [{
         'url': 'http://www.vevo.com/watch/hurts/somebody-to-die-for/GB1101300280',
@@ -183,8 +182,8 @@ def _call_api(self, path, *args, **kwargs):
         try:
             data = self._download_json(self._api_url_template % path, *args, **kwargs)
         except ExtractorError as e:
-            if isinstance(e.cause, compat_HTTPError):
-                errors = self._parse_json(e.cause.read().decode(), None)['errors']
+            if isinstance(e.cause, HTTPError):
+                errors = self._parse_json(e.cause.response.read().decode(), None)['errors']
                 error_message = ', '.join([error['message'] for error in errors])
                 raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True)
             raise
@@ -273,7 +272,6 @@ def _real_extract(self, url):
                     'width': int(m.group('width')),
                     'height': int(m.group('height')),
                 })
-        self._sort_formats(formats)
 
         track = video_info['title']
         if featured_artist: