]> jfr.im git - yt-dlp.git/blobdiff - yt_dlp/extractor/toutv.py
[ie/youtube] Deprioritize iOS client formats (#8337)
[yt-dlp.git] / yt_dlp / extractor / toutv.py
index 6c84c211c97e824045f896f48f2ea392b4132d6d..ced1224fadefa3157a6b46834981d2c980eaebfd 100644 (file)
@@ -1,10 +1,7 @@
-# coding: utf-8
-from __future__ import unicode_literals
-
 import json
 
 from .radiocanada import RadioCanadaIE
-from ..compat import compat_HTTPError
+from ..networking.exceptions import HTTPError
 from ..utils import (
     ExtractorError,
     int_or_none,
@@ -12,7 +9,7 @@
 )
 
 
-class TouTvIE(RadioCanadaIE):
+class TouTvIE(RadioCanadaIE):  # XXX: Do not subclass from concrete IE
     _NETRC_MACHINE = 'toutv'
     IE_NAME = 'tou.tv'
     _VALID_URL = r'https?://ici\.tou\.tv/(?P<id>[a-zA-Z0-9_-]+(?:/S[0-9]+[EC][0-9]+)?)'
@@ -40,17 +37,14 @@ class TouTvIE(RadioCanadaIE):
     }]
     _CLIENT_KEY = '90505c8d-9c34-4f34-8da1-3a85bdc6d4f4'
 
-    def _real_initialize(self):
-        email, password = self._get_login_info()
-        if email is None:
-            return
+    def _perform_login(self, username, password):
         try:
             self._access_token = self._download_json(
                 'https://services.radio-canada.ca/toutv/profiling/accounts/login',
                 None, 'Logging in', data=json.dumps({
                     'ClientId': self._CLIENT_KEY,
                     'ClientSecret': '34026772-244b-49b6-8b06-317b30ac9a20',
-                    'Email': email,
+                    'Email': username,
                     'Password': password,
                     'Scope': 'id.write media-validation.read',
                 }).encode(), headers={
@@ -58,8 +52,8 @@ def _real_initialize(self):
                     'Content-Type': 'application/json;charset=utf-8',
                 })['access_token']
         except ExtractorError as e:
-            if isinstance(e.cause, compat_HTTPError) and e.cause.code == 401:
-                error = self._parse_json(e.cause.read().decode(), None)['Message']
+            if isinstance(e.cause, HTTPError) and e.cause.status == 401:
+                error = self._parse_json(e.cause.response.read().decode(), None)['Message']
                 raise ExtractorError(error, expected=True)
             raise
         self._claims = self._call_api('validation/v2/getClaims')['claims']