]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/imggaming.py
[ie/youtube] Suppress "Unavailable videos are hidden" warning (#10159)
[yt-dlp.git] / yt_dlp / extractor / imggaming.py
index 14d3fad55d4aa4ae68dcb78f91a95d8b605142d3..3a7b5bd5e2247633cc5c0a8a3e32f16c82035b72 100644 (file)
@@ -1,10 +1,7 @@
-# coding: utf-8
-from __future__ import unicode_literals
-
 import json
 
 from .common import InfoExtractor
-from ..compat import compat_HTTPError
+from ..networking.exceptions import HTTPError
 from ..utils import (
     ExtractorError,
     int_or_none,
@@ -21,25 +18,26 @@ class ImgGamingBaseIE(InfoExtractor):
     _REALM = None
     _VALID_URL_TEMPL = r'https?://(?P<domain>%s)/(?P<type>live|playlist|video)/(?P<id>\d+)(?:\?.*?\bplaylistId=(?P<playlist_id>\d+))?'
 
-    def _real_initialize(self):
+    def _initialize_pre_login(self):
         self._HEADERS = {
             'Realm': 'dce.' + self._REALM,
             'x-api-key': self._API_KEY,
         }
 
-        email, password = self._get_login_info()
-        if email is None:
-            self.raise_login_required()
-
+    def _perform_login(self, username, password):
         p_headers = self._HEADERS.copy()
         p_headers['Content-Type'] = 'application/json'
         self._HEADERS['Authorization'] = 'Bearer ' + self._download_json(
             self._API_BASE + 'login',
             None, 'Logging in', data=json.dumps({
-                'id': email,
+                'id': username,
                 'secret': password,
             }).encode(), headers=p_headers)['authorisationToken']
 
+    def _real_initialize(self):
+        if not self._HEADERS.get('Authorization'):
+            self.raise_login_required(method='password')
+
     def _call_api(self, path, media_id):
         return self._download_json(
             self._API_BASE + path + media_id, media_id, headers=self._HEADERS)
@@ -54,9 +52,9 @@ def _extract_dve_api_url(self, media_id, media_type):
             return self._call_api(
                 stream_path, media_id)['playerUrlCallback']
         except ExtractorError as e:
-            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 403:
+            if isinstance(e.cause, HTTPError) and e.cause.status == 403:
                 raise ExtractorError(
-                    self._parse_json(e.cause.read().decode(), media_id)['messages'][0],
+                    self._parse_json(e.cause.response.read().decode(), media_id)['messages'][0],
                     expected=True)
             raise
 
@@ -64,10 +62,7 @@ def _real_extract(self, url):
         domain, media_type, media_id, playlist_id = self._match_valid_url(url).groups()
 
         if playlist_id:
-            if self.get_param('noplaylist'):
-                self.to_screen('Downloading just video %s because of --no-playlist' % media_id)
-            else:
-                self.to_screen('Downloading playlist %s - add --no-playlist to just download video' % playlist_id)
+            if self._yes_playlist(playlist_id, media_id):
                 media_type, media_id = 'playlist', playlist_id
 
         if media_type == 'playlist':
@@ -78,7 +73,7 @@ def _real_extract(self, url):
                 if not video_id:
                     continue
                 entries.append(self.url_result(
-                    'https://%s/video/%s' % (domain, video_id),
+                    f'https://{domain}/video/{video_id}',
                     self.ie_key(), video_id))
             return self.playlist_result(
                 entries, media_id, playlist.get('title'),
@@ -99,7 +94,7 @@ def _real_extract(self, url):
                 continue
             if proto == 'hls':
                 m3u8_formats = self._extract_m3u8_formats(
-                    media_url, media_id, 'mp4', 'm3u8' if is_live else 'm3u8_native',
+                    media_url, media_id, 'mp4', live=is_live,
                     m3u8_id='hls', fatal=False, headers=self._MANIFEST_HEADERS)
                 for f in m3u8_formats:
                     f.setdefault('http_headers', {}).update(self._MANIFEST_HEADERS)
@@ -108,7 +103,6 @@ def _real_extract(self, url):
                 formats.extend(self._extract_mpd_formats(
                     media_url, media_id, mpd_id='dash', fatal=False,
                     headers=self._MANIFEST_HEADERS))
-        self._sort_formats(formats)
 
         subtitles = {}
         for subtitle in video_data.get('subtitles', []):