]> jfr.im git - yt-dlp.git/commitdiff
[youtube] Better message when login required
authorpukkandan <redacted>
Wed, 19 May 2021 13:41:44 +0000 (19:11 +0530)
committerpukkandan <redacted>
Thu, 20 May 2021 10:25:55 +0000 (15:55 +0530)
yt_dlp/extractor/common.py
yt_dlp/extractor/youtube.py

index 3b2bda0e752d871f69459a89fc3bf8546e4cb261..ac2f594623c6cccaaf6ac7f1c2110b691692b70e 100644 (file)
@@ -422,6 +422,14 @@ class InfoExtractor(object):
     _GEO_IP_BLOCKS = None
     _WORKING = True
 
+    _LOGIN_HINTS = {
+        'any': 'Use --cookies, --username and --password or --netrc to provide account credentials',
+        'cookies': (
+            'Use --cookies for the authentication. '
+            'See  https://github.com/ytdl-org/youtube-dl#how-do-i-pass-cookies-to-youtube-dl  for how to pass cookies'),
+        'password': 'Use --username and --password or --netrc to provide account credentials',
+    }
+
     def __init__(self, downloader=None):
         """Constructor. Receives an optional downloader."""
         self._ready = False
@@ -978,12 +986,11 @@ def report_login(self):
         self.to_screen('Logging in')
 
     def raise_login_required(
-            self, msg='This video is only available for registered users', metadata_available=False):
+            self, msg='This video is only available for registered users',
+            metadata_available=False, method='any'):
         if metadata_available and self.get_param('ignore_no_formats_error'):
             self.report_warning(msg)
-        raise ExtractorError(
-            '%s. Use --cookies, --username and --password or --netrc to provide account credentials' % msg,
-            expected=True)
+        raise ExtractorError('%s. %s' % (msg, self._LOGIN_HINTS[method]), expected=True)
 
     def raise_geo_restricted(
             self, msg='This video is not available from your location due to geo restriction',
index 5e836f8831c7c324b19e6d8303de4a5472adaa5d..3f021c281e876c7c5601dced21ba08213ba9620a 100644 (file)
@@ -85,7 +85,20 @@ def _login(self):
 
         If _LOGIN_REQUIRED is set and no authentication was provided, an error is raised.
         """
+
+        def warn(message):
+            self.report_warning(message)
+
+        # username+password login is broken
+        if self._LOGIN_REQUIRED and self.get_param('cookiefile') is None:
+            self.raise_login_required(
+                'Login details are needed to download this content', method='cookies')
         username, password = self._get_login_info()
+        if username:
+            warn('Logging in using username and password is broken. %s' % self._LOGIN_HINTS['cookies'])
+        return
+        # Everything below this is broken!
+
         # No authentication to be performed
         if username is None:
             if self._LOGIN_REQUIRED and self.get_param('cookiefile') is None:
@@ -126,9 +139,6 @@ def req(url, f_req, note, errnote):
                     'Google-Accounts-XSRF': 1,
                 })
 
-        def warn(message):
-            self.report_warning(message)
-
         lookup_req = [
             username,
             None, [], None, 'US', None, None, 2, False, True,
@@ -4018,9 +4028,6 @@ class YoutubeFeedsInfoExtractor(YoutubeTabIE):
     def IE_NAME(self):
         return 'youtube:%s' % self._FEED_NAME
 
-    def _real_initialize(self):
-        self._login()
-
     def _real_extract(self, url):
         return self.url_result(
             'https://www.youtube.com/feed/%s' % self._FEED_NAME,