]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/fancode.py
[ie/orf:on] Improve extraction (#9677)
[yt-dlp.git] / yt_dlp / extractor / fancode.py
index f6733b1245f64d049eadc7d2203d63d44d4ec6bb..cddf254978b102a8eb831c263357dddf480ae085 100644 (file)
@@ -1,6 +1,3 @@
-# coding: utf-8
-from __future__ import unicode_literals
-
 from .common import InfoExtractor
 
 from ..compat import compat_str
@@ -13,6 +10,7 @@
 
 
 class FancodeVodIE(InfoExtractor):
+    _WORKING = False
     IE_NAME = 'fancode:vod'
 
     _VALID_URL = r'https?://(?:www\.)?fancode\.com/video/(?P<id>[0-9]+)\b'
@@ -41,7 +39,7 @@ class FancodeVodIE(InfoExtractor):
     _ACCESS_TOKEN = None
     _NETRC_MACHINE = 'fancode'
 
-    _LOGIN_HINT = 'Use "--user refresh --password <refresh_token>" to login using a refresh token'
+    _LOGIN_HINT = 'Use "--username refresh --password <refresh_token>" to login using a refresh token'
 
     headers = {
         'content-type': 'application/json',
@@ -49,30 +47,26 @@ class FancodeVodIE(InfoExtractor):
         'referer': 'https://fancode.com',
     }
 
-    def _login(self):
+    def _perform_login(self, username, password):
         # Access tokens are shortlived, so get them using the refresh token.
-        username, password = self._get_login_info()
-        if username == 'refresh' and password is not None:
-            self.report_login()
-            data = '''{
-                "query":"mutation RefreshToken($refreshToken: String\\u0021) { refreshToken(refreshToken: $refreshToken) { accessToken }}",
-                "variables":{
-                    "refreshToken":"%s"
-                },
-                "operationName":"RefreshToken"
-            }''' % password
-
-            token_json = self.download_gql('refresh token', data, "Getting the Access token")
-            self._ACCESS_TOKEN = try_get(token_json, lambda x: x['data']['refreshToken']['accessToken'])
-            if self._ACCESS_TOKEN is None:
-                self.report_warning('Failed to get Access token')
-            else:
-                self.headers.update({'Authorization': 'Bearer %s' % self._ACCESS_TOKEN})
-        elif username is not None:
+        if username != 'refresh':
             self.report_warning(f'Login using username and password is not currently supported. {self._LOGIN_HINT}')
 
-    def _real_initialize(self):
-        self._login()
+        self.report_login()
+        data = '''{
+            "query":"mutation RefreshToken($refreshToken: String\\u0021) { refreshToken(refreshToken: $refreshToken) { accessToken }}",
+            "variables":{
+                "refreshToken":"%s"
+            },
+            "operationName":"RefreshToken"
+        }''' % password
+
+        token_json = self.download_gql('refresh token', data, "Getting the Access token")
+        self._ACCESS_TOKEN = try_get(token_json, lambda x: x['data']['refreshToken']['accessToken'])
+        if self._ACCESS_TOKEN is None:
+            self.report_warning('Failed to get Access token')
+        else:
+            self.headers.update({'Authorization': 'Bearer %s' % self._ACCESS_TOKEN})
 
     def _check_login_required(self, is_available, is_premium):
         msg = None
@@ -132,7 +126,8 @@ def _real_extract(self, url):
         }
 
 
-class FancodeLiveIE(FancodeVodIE):
+class FancodeLiveIE(FancodeVodIE):  # XXX: Do not subclass from concrete IE
+    _WORKING = False
     IE_NAME = 'fancode:live'
 
     _VALID_URL = r'https?://(www\.)?fancode\.com/match/(?P<id>[0-9]+).+'