spotDL / spotify-downloader

Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found).
https://spotdl.readthedocs.io/en/latest/
MIT License
17.4k stars 1.6k forks source link

AudioProviderError , when download song #1999

Closed usgitAz closed 3 months ago

usgitAz commented 10 months ago

System OS

Linux

Python Version

3.10 (CPython)

Install Source

pip / PyPi

Install version / commit hash

4.2.4

Expected Behavior vs Actual Behavior

i want to download song with a track song link from spotify but not start downloaded and i have this error : AudioProviderError: YT-DLP download error - https://music.youtube.com/watch?v=sNWMEdQ53SM

Steps to reproduce - Ensure to include actual links!

..

Traceback

AudioProviderError: YT-DLP download error - https://music.youtube.com/watch?v=sNWMEdQ53SM

Other details

i upgrade yt_dlp and spotdl to last version but i still have this problem

after retry again i see this error message: RuntimeWarning: coroutine 'Downloader.pool_download' was never awaited return download_link RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Tomiwa-Ot commented 9 months ago

I am having the same issue as well

OS

Debian 12

Python Version

3.11.2

Install Source

pip

Spotdl Version

4.2.4

Command

spotdl download "https://open.spotify.com/track/4VQ46sRJtb6osiD3xfYGHx"

Traceback

Processing query: https://open.spotify.com/track/4VQ46sRJtb6osiD3xfYGHx         
AudioProviderError: YT-DLP download error -                                     
https://music.youtube.com/watch?v=ad30z1t_t30 
xnetcat commented 9 months ago

can you guys upload more logs with --log-level DEBUG flag enabled

Tomiwa-Ot commented 9 months ago

@xnetcat here you go

tomiwa@grephq ~/D/h/Prod&Serv&Cust> spotdl download "https://open.spotify.com/track/4VQ46sRJtb6osiD3xfYGHx?si=c9f290df981645cb" --log-level DEBUG
[16:38:40] DEBUG    MainThread - Downloader settings:          downloader.py:130
                    {'audio_providers': ['youtube-music'],                      
                    'lyrics_providers': ['genius', 'azlyrics',                  
                    'musixmatch'], 'playlist_numbering':                        
                    False, 'scan_for_songs': False, 'm3u':                      
                    None, 'output': '{artists} -                                
                    {title}.{output-ext}', 'overwrite':                         
                    'skip', 'search_query': None, 'ffmpeg':                     
                    'ffmpeg', 'bitrate': None, 'ffmpeg_args':                   
                    None, 'format': 'mp3', 'save_file': None,                   
                    'filter_results': True, 'threads': 4,                       
                    'cookie_file': None, 'restrict': None,                      
                    'print_errors': False, 'sponsor_block':                     
                    False, 'preload': False, 'archive': None,                   
                    'load_config': True, 'log_level': 'DEBUG',                  
                    'simple_tui': False, 'fetch_albums':                        
                    False, 'id3_separator': '/', 'ytm_data':                    
                    False, 'add_unavailable': False,                            
                    'generate_lrc': False,                                      
                    'force_update_metadata': False,                             
                    'only_verified_results': False,                             
                    'sync_without_deleting': False,                             
                    'max_filename_length': None,                                
                    'yt_dlp_args': None, 'detect_formats':                      
                    None, 'save_errors': None,                                  
                    'ignore_albums': None, 'proxy': None,                       
                    'skip_explicit': False, 'log_format':                       
                    None, 'redownload': False}                                  
[16:38:40] DEBUG    MainThread - FFmpeg path: ffmpeg           downloader.py:148
[16:38:40] DEBUG    MainThread - Found 0 known songs           downloader.py:183
[16:38:42] DEBUG    MainThread - Archive: 0 urls               downloader.py:230
[16:38:42] DEBUG    MainThread - Downloader initialized        downloader.py:232
[16:38:42] INFO     MainThread - Processing query:                 search.py:132
                    https://open.spotify.com/track/4VQ46sRJtb6osiD              
                    3xfYGHx?si=c9f290df981645cb                                 
[16:38:45] DEBUG    MainThread - Found 1 songs in 0 lists          search.py:322
[16:38:45] DEBUG    MainThread - Downloading 1 songs           downloader.py:279
[16:38:53] DEBUG    asyncio_0 - Found lyrics for Kodak Black - downloader.py:399
                    Could of Been Different on Genius                           
[16:38:53] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Searching   base.py:167
                    for kodak black - could of been different                   
[16:38:56] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Found 1     base.py:180
                    results for ISRC USAT21813004                               
[16:38:56] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Filtered to base.py:192
                    1 ISRC results                                              
[16:38:56] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Best ISRC   base.py:201
                    result is                                                   
                    https://music.youtube.com/watch?v=ad30z1t_t30               
                    with score 100.0                                            
[16:38:57] DEBUG    asyncio_0 - Downloading Kodak Black -      downloader.py:639
                    Could of Been Different using                               
                    https://music.youtube.com/watch?v=ad30z1t_                  
                    t30                                                         
[16:39:42] DEBUG    asyncio_0 - ERROR: [youtube] ad30z1t_t30: Unable base.py:374
                    to download API page: <urlopen error Tunnel                 
                    connection failed: 407 Proxy Authentication                 
                    Required> (caused by ProxyError('<urlopen error             
                    Tunnel connection failed: 407 Proxy                         
                    Authentication Required>')); please report this             
                    issue on                                                    
                    https://github.com/yt-dlp/yt-dlp/issues?q= ,                
                    filling out the appropriate issue template.                 
                    Confirm you are on the latest version using                 
                    yt-dlp -U                                                   

[16:39:43] ERROR    asyncio_0 - Traceback (most recent   progress_handler.py:358
                    call last):                                                 
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 1348, in do_open                                  
                        h.request(req.get_method(),                             
                    req.selector, req.data, headers,                            
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1282, in request                                     
                        self._send_request(method, url,                         
                    body, headers, encode_chunked)                              
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1328, in _send_request                               
                        self.endheaders(body,                                   
                    encode_chunked=encode_chunked)                              
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1277, in endheaders                                  
                        self._send_output(message_body,                         
                    encode_chunked=encode_chunked)                              
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1037, in _send_output                                
                        self.send(msg)                                          
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 975, in send                                         
                        self.connect()                                          
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1447, in connect                                     
                        super().connect()                                       
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 951, in connect                                      
                        self._tunnel()                                          
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 924, in _tunnel                                      
                        raise OSError(f"Tunnel                                  
                    connection failed: {code}                                   
                    {message.strip()}")                                         
                    OSError: Tunnel connection failed:                          
                    407 Proxy Authentication Required                           

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_urllib.py", line 396,                        
                    in _send                                                    
                        res = opener.open(urllib_req,                           
                    timeout=float(request.extensions.get                        
                    ('timeout') or self.timeout))                               
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 519, in open                                      
                        response = self._open(req, data)                        
                                   ^^^^^^^^^^^^^^^^^^^^^                        
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 536, in _open                                     
                        result =                                                
                    self._call_chain(self.handle_open,                          
                    protocol, protocol +                                        
                                 ^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 496, in _call_chain                               
                        result = func(*args)                                    
                                 ^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_urllib.py", line 101,                        
                    in https_open                                               
                        return self.do_open(                                    
                               ^^^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 1351, in do_open                                  
                        raise URLError(err)                                     
                    urllib.error.URLError: <urlopen                             
                    error Tunnel connection failed: 407                         
                    Proxy Authentication Required>                              

                    The above exception was the direct                          
                    cause of the following exception:                           

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 847,                          
                    in _request_webpage                                         
                        return                                                  
                    self._downloader.urlopen(self._creat                        
                    e_request(url_or_request, data,                             
                    headers, query))                                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^                                     
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 4052, in                             
                    urlopen                                                     
                        return                                                  
                    self._request_director.send(req)                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^                                                     
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/common.py", line 114,                         
                    in send                                                     
                        response = handler.send(request)                        
                                   ^^^^^^^^^^^^^^^^^^^^^                        
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_helper.py", line 204,                        
                    in wrapper                                                  
                        return func(self, *args,                                
                    **kwargs)                                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^                                                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/common.py", line 325,                         
                    in send                                                     
                        return self._send(request)                              
                               ^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_urllib.py", line 408,                        
                    in _send                                                    
                        raise ProxyError(cause=e) from e                        
                    yt_dlp.networking.exceptions.ProxyEr                        
                    ror: <urlopen error Tunnel                                  
                    connection failed: 407 Proxy                                
                    Authentication Required>                                    

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1567, in                             
                    wrapper                                                     
                        return func(self, *args,                                
                    **kwargs)                                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^                                                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1702, in                             
                    __extract_info                                              
                        ie_result = ie.extract(url)                             
                                    ^^^^^^^^^^^^^^^                             
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 715,                          
                    in extract                                                  
                        ie_result =                                             
                    self._real_extract(url)                                     
                                    ^^^^^^^^^^^^^^^^^^^^                        
                    ^^^                                                         
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 4073,                        
                    in _real_extract                                            
                        webpage, master_ytcfg,                                  
                    player_responses, player_url =                              
                    self._download_player_responses(url,                        
                    smuggled_data, video_id,                                    
                    webpage_url)                                                

                                          ^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 4037,                        
                    in _download_player_responses                               
                        player_responses, player_url =                          
                    self._extract_player_responses(                             
                                                       ^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 3728,                        
                    in _extract_player_responses                                
                        raise last_error                                        
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 3693,                        
                    in _extract_player_responses                                
                        pr = initial_pr if client ==                            
                    'web' and initial_pr else                                   
                    self._extract_player_response(                              

                                           ^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^                                           
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 3613,                        
                    in _extract_player_response                                 
                        return self._extract_response(                          
                               ^^^^^^^^^^^^^^^^^^^^^^^                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 966,                         
                    in _extract_response                                        
                        next(main_retries)                                      
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/utils/_utils.py", line 5114, in                          
                    __iter__                                                    
                        self.error_callback(self.error,                         
                    self.attempt, self.retries)                                 
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 3762,                         
                    in _error_or_warning                                        
                        RetryManager.report_retry(                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/utils/_utils.py", line 5122, in                          
                    report_retry                                                
                        raise e                                                 
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 955,                         
                    in _extract_response                                        
                        response = self._call_api(                              
                                   ^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 603,                         
                    in _call_api                                                
                        return self._download_json(                             
                               ^^^^^^^^^^^^^^^^^^^^                             
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 1069,                         
                    in download_content                                         
                        res = getattr(self,                                     
                    download_handle.__name__)(url_or_req                        
                    uest, video_id, **kwargs)                                   
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^                                               
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 1033,                         
                    in download_handle                                          
                        res =                                                   
                    self._download_webpage_handle(                              
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^                                                        
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 903,                          
                    in _download_webpage_handle                                 
                        urlh =                                                  
                    self._request_webpage(url_or_request                        
                    , video_id, note, errnote, fatal,                           
                    data=data, headers=headers,                                 
                    query=query,                                                
                    expected_status=expected_status)                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^                                                  
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 860,                          
                    in _request_webpage                                         
                        raise ExtractorError(errmsg,                            
                    cause=err)                                                  
                    yt_dlp.utils.ExtractorError:                                
                    ad30z1t_t30: Unable to download API                         
                    page: <urlopen error Tunnel                                 
                    connection failed: 407 Proxy                                
                    Authentication Required> (caused by                         
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/providers/audio/base.py"                        
                    , line 369, in get_download_metadata                        
                        data =                                                  
                    self.audio_handler.extract_info(url,                        
                    download=download)                                          
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1556, in                             
                    extract_info                                                
                        return self.__extract_info(url,                         
                    self.get_info_extractor(key),                               
                    download, extra_info, process)                              
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1585, in                             
                    wrapper                                                     
                        self.report_error(str(e),                               
                    e.format_traceback())                                       
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1045, in                             
                    report_error                                                
                        self.trouble(f'{self._format_err                        
                    ("ERROR:", self.Styles.ERROR)}                              
                    {message}', *args, **kwargs)                                
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 964, in                              
                    trouble                                                     
                        self.to_stderr(message)                                 
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 906, in                              
                    to_stderr                                                   
                        self.params['logger'].error(mess                        
                    age)                                                        
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/providers/audio/base.py"                        
                    , line 57, in error                                         
                        raise AudioProviderError(msg)                           
                    spotdl.providers.audio.base.AudioPro                        
                    viderError: ERROR:  ad30z1t_t30:                            
                    Unable to download API page:                                
                    <urlopen error Tunnel connection                            
                    failed: 407 Proxy Authentication                            
                    Required> (caused by                                        
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    The above exception was the direct                          
                    cause of the following exception:                           

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/download/downloader.py",                        
                     line 646, in search_and_download                           
                        download_info =                                         
                    audio_downloader.get_download_metada                        
                    ta(                                                         
                                        ^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^                                     
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/providers/audio/base.py"                        
                    , line 375, in get_download_metadata                        
                        raise                                                   
                    AudioProviderError(f"YT-DLP download                        
                    error - {url}") from exception                              
                    spotdl.providers.audio.base.AudioPro                        
                    viderError: YT-DLP download error -                         
                    https://music.youtube.com/watch?v=ad                        
                    30z1t_t30                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:1348 in do_open            │                        
                    │                                  │                        
                    │   1345 │   │                     │                        
                    │   1346 │   │   try:              │                        
                    │   1347 │   │   │   try:          │                        
                    │ ❱ 1348 │   │   │   │   h.request │                        
                    │   1349 │   │   │   │   │   │     │                        
                    │   1350 │   │   │   except OSErro │                        
                    │   1351 │   │   │   │   raise URL │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1282 in request               │                        
                    │                                  │                        
                    │   1279 │   def request(self, met │                        
                    │   1280 │   │   │   │   encode_ch │                        
                    │   1281 │   │   """Send a complet │                        
                    │ ❱ 1282 │   │   self._send_reques │                        
                    │   1283 │                         │                        
                    │   1284 │   def _send_request(sel │                        
                    │   1285 │   │   # Honor explicitl │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1328 in _send_request         │                        
                    │                                  │                        
                    │   1325 │   │   │   # RFC 2616 Se │                        
                    │   1326 │   │   │   # default cha │                        
                    │   1327 │   │   │   body = _encod │                        
                    │ ❱ 1328 │   │   self.endheaders(b │                        
                    │   1329 │                         │                        
                    │   1330 │   def getresponse(self) │                        
                    │   1331 │   │   """Get the respon │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1277 in endheaders            │                        
                    │                                  │                        
                    │   1274 │   │   │   self.__state  │                        
                    │   1275 │   │   else:             │                        
                    │   1276 │   │   │   raise CannotS │                        
                    │ ❱ 1277 │   │   self._send_output │                        
                    │   1278 │                         │                        
                    │   1279 │   def request(self, met │                        
                    │   1280 │   │   │   │   encode_ch │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1037 in _send_output          │                        
                    │                                  │                        
                    │   1034 │   │   self._buffer.exte │                        
                    │   1035 │   │   msg = b"\r\n".joi │                        
                    │   1036 │   │   del self._buffer[ │                        
                    │ ❱ 1037 │   │   self.send(msg)    │                        
                    │   1038 │   │                     │                        
                    │   1039 │   │   if message_body i │                        
                    │   1040                           │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:975 in send                   │                        
                    │                                  │                        
                    │    972 │   │                     │                        
                    │    973 │   │   if self.sock is N │                        
                    │    974 │   │   │   if self.auto_ │                        
                    │ ❱  975 │   │   │   │   self.conn │                        
                    │    976 │   │   │   else:         │                        
                    │    977 │   │   │   │   raise Not │                        
                    │    978                           │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1447 in connect               │                        
                    │                                  │                        
                    │   1444 │   │   def connect(self) │                        
                    │   1445 │   │   │   "Connect to a │                        
                    │   1446 │   │   │                 │                        
                    │ ❱ 1447 │   │   │   super().conne │                        
                    │   1448 │   │   │                 │                        
                    │   1449 │   │   │   if self._tunn │                        
                    │   1450 │   │   │   │   server_ho │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:951 in connect                │                        
                    │                                  │                        
                    │    948 │   │   │   │   raise     │                        
                    │    949 │   │                     │                        
                    │    950 │   │   if self._tunnel_h │                        
                    │ ❱  951 │   │   │   self._tunnel( │                        
                    │    952 │                         │                        
                    │    953 │   def close(self):      │                        
                    │    954 │   │   """Close the conn │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:924 in _tunnel                │                        
                    │                                  │                        
                    │    921 │   │                     │                        
                    │    922 │   │   if code != http.H │                        
                    │    923 │   │   │   self.close()  │                        
                    │ ❱  924 │   │   │   raise OSError │                        
                    │    925 │   │   while True:       │                        
                    │    926 │   │   │   line = respon │                        
                    │    927 │   │   │   if len(line)  │                        
                    ╰──────────────────────────────────╯                        
                    OSError: Tunnel connection failed:                          
                    407 Proxy Authentication Required                           

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_urllib.py:396  │                        
                    │ in _send                         │                        
                    │                                  │                        
                    │   393 │   │   │   cookiejar=requ │                        
                    │   394 │   │   )                  │                        
                    │   395 │   │   try:               │                        
                    │ ❱ 396 │   │   │   res = opener.o │                        
                    │       timeout=float(request.exte │                        
                    │   397 │   │   except urllib.erro │                        
                    │   398 │   │   │   if isinstance( │                        
                    │   399 │   │   │   │   # Prevent  │                        
                    │       destroyed.                 │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:519 in open                │                        
                    │                                  │                        
                    │    516 │   │   │   req = meth(re │                        
                    │    517 │   │                     │                        
                    │    518 │   │   sys.audit('urllib │                        
                    │        req.get_method())         │                        
                    │ ❱  519 │   │   response = self._ │                        
                    │    520 │   │                     │                        
                    │    521 │   │   # post-process re │                        
                    │    522 │   │   meth_name = proto │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:536 in _open               │                        
                    │                                  │                        
                    │    533 │   │   │   return result │                        
                    │    534 │   │                     │                        
                    │    535 │   │   protocol = req.ty │                        
                    │ ❱  536 │   │   result = self._ca │                        
                    │    537 │   │   │   │   │   │   │ │                        
                    │    538 │   │   if result:        │                        
                    │    539 │   │   │   return result │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:496 in _call_chain         │                        
                    │                                  │                        
                    │    493 │   │   handlers = chain. │                        
                    │    494 │   │   for handler in ha │                        
                    │    495 │   │   │   func = getatt │                        
                    │ ❱  496 │   │   │   result = func │                        
                    │    497 │   │   │   if result is  │                        
                    │    498 │   │   │   │   return re │                        
                    │    499                           │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_urllib.py:101  │                        
                    │ in https_open                    │                        
                    │                                  │                        
                    │    98 │                          │                        
                    │    99 │   def https_open(self, r │                        
                    │   100 │   │   conn_class = self. │                        
                    │ ❱ 101 │   │   return self.do_ope │                        
                    │   102 │   │   │   functools.part │                        
                    │   103 │   │   │   │   _create_ht │                        
                    │   104 │   │   │   req, context=s │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:1351 in do_open            │                        
                    │                                  │                        
                    │   1348 │   │   │   │   h.request │                        
                    │   1349 │   │   │   │   │   │     │                        
                    │   1350 │   │   │   except OSErro │                        
                    │ ❱ 1351 │   │   │   │   raise URL │                        
                    │   1352 │   │   │   r = h.getresp │                        
                    │   1353 │   │   except:           │                        
                    │   1354 │   │   │   h.close()     │                        
                    ╰──────────────────────────────────╯                        
                    URLError: <urlopen error Tunnel                             
                    connection failed: 407 Proxy                                
                    Authentication Required>                                    

                    The above exception was the direct                          
                    cause of the following exception:                           

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:847 in │                        
                    │ _request_webpage                 │                        
                    │                                  │                        
                    │    844 │   │   │   headers.setde │                        
                    │    845 │   │                     │                        
                    │    846 │   │   try:              │                        
                    │ ❱  847 │   │   │   return self._ │                        
                    │        headers, query))          │                        
                    │    848 │   │   except network_ex │                        
                    │    849 │   │   │   if isinstance │                        
                    │    850 │   │   │   │   if self._ │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:4052 in       │                        
                    │ urlopen                          │                        
                    │                                  │                        
                    │   4049 │   │   clean_headers(req │                        
                    │   4050 │   │                     │                        
                    │   4051 │   │   try:              │                        
                    │ ❱ 4052 │   │   │   return self._ │                        
                    │   4053 │   │   except NoSupporti │                        
                    │   4054 │   │   │   for ue in e.u │                        
                    │   4055 │   │   │   │   if not (u │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/common.py:114   │                        
                    │ in send                          │                        
                    │                                  │                        
                    │   111 │   │   │                  │                        
                    │   112 │   │   │   self._print_ve │                        
                    │   113 │   │   │   try:           │                        
                    │ ❱ 114 │   │   │   │   response = │                        
                    │   115 │   │   │   except Request │                        
                    │   116 │   │   │   │   raise      │                        
                    │   117 │   │   │   except Excepti │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_helper.py:204  │                        
                    │ in wrapper                       │                        
                    │                                  │                        
                    │   201 │   @functools.wraps(func) │                        
                    │   202 │   def wrapper(self, *arg │                        
                    │   203 │   │   try:               │                        
                    │ ❱ 204 │   │   │   return func(se │                        
                    │   205 │   │   except Unsupported │                        
                    │   206 │   │   │   if e.handler i │                        
                    │   207 │   │   │   │   e.handler  │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/common.py:325   │                        
                    │ in send                          │                        
                    │                                  │                        
                    │   322 │   def send(self, request │                        
                    │   323 │   │   if not isinstance( │                        
                    │   324 │   │   │   raise TypeErro │                        
                    │ ❱ 325 │   │   return self._send( │                        
                    │   326 │                          │                        
                    │   327 │   @abc.abstractmethod    │                        
                    │   328 │   def _send(self, reques │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_urllib.py:408  │                        
                    │ in _send                         │                        
                    │                                  │                        
                    │   405 │   │   │                  │                        
                    │   406 │   │   │   # proxy errors │                        
                    │   407 │   │   │   if 'tunnel con │                        
                    │       SocksProxyError):          │                        
                    │ ❱ 408 │   │   │   │   raise Prox │                        
                    │   409 │   │   │                  │                        
                    │   410 │   │   │   handle_respons │                        
                    │   411 │   │   │   raise Transpor │                        
                    ╰──────────────────────────────────╯                        
                    ProxyError: <urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>                                    

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1567 in       │                        
                    │ wrapper                          │                        
                    │                                  │                        
                    │   1564 │   │   def wrapper(self, │                        
                    │   1565 │   │   │   while True:   │                        
                    │   1566 │   │   │   │   try:      │                        
                    │ ❱ 1567 │   │   │   │   │   retur │                        
                    │   1568 │   │   │   │   except (D │                        
                    │   1569 │   │   │   │   │   raise │                        
                    │   1570 │   │   │   │   except Re │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1702 in       │                        
                    │ __extract_info                   │                        
                    │                                  │                        
                    │   1699 │   │   self._apply_heade │                        
                    │   1700 │   │                     │                        
                    │   1701 │   │   try:              │                        
                    │ ❱ 1702 │   │   │   ie_result = i │                        
                    │   1703 │   │   except UserNotLiv │                        
                    │   1704 │   │   │   if process:   │                        
                    │   1705 │   │   │   │   if self.p │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:715 in │                        
                    │ extract                          │                        
                    │                                  │                        
                    │    712 │   │   │   │   │   self. │                        
                    │    713 │   │   │   │   │   self. │                        
                    │    714 │   │   │   │   │   │   u │                        
                    │        20)))                     │                        
                    │ ❱  715 │   │   │   │   │   ie_re │                        
                    │    716 │   │   │   │   │   if ie │                        
                    │    717 │   │   │   │   │   │   r │                        
                    │    718 │   │   │   │   │   if se │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:4073  │                        
                    │ in _real_extract                 │                        
                    │                                  │                        
                    │   4070 │   │   base_url = self.h │                        
                    │   4071 │   │   webpage_url = bas │                        
                    │   4072 │   │                     │                        
                    │ ❱ 4073 │   │   webpage, master_y │                        
                    │        self._download_player_res │                        
                    │   4074 │   │                     │                        
                    │   4075 │   │   playability_statu │                        
                    │   4076 │   │   │   player_respon │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:4037  │                        
                    │ in _download_player_responses    │                        
                    │                                  │                        
                    │   4034 │   │                     │                        
                    │   4035 │   │   master_ytcfg = se │                        
                    │        self._get_default_ytcfg() │                        
                    │   4036 │   │                     │                        
                    │ ❱ 4037 │   │   player_responses, │                        
                    │   4038 │   │   │   self._get_req │                        
                    │   4039 │   │   │   video_id, web │                        
                    │   4040                           │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:3728  │                        
                    │ in _extract_player_responses     │                        
                    │                                  │                        
                    │   3725 │   │                     │                        
                    │   3726 │   │   if last_error:    │                        
                    │   3727 │   │   │   if not len(pr │                        
                    │ ❱ 3728 │   │   │   │   raise las │                        
                    │   3729 │   │   │   self.report_w │                        
                    │   3730 │   │   return prs, playe │                        
                    │   3731                           │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:3693  │                        
                    │ in _extract_player_responses     │                        
                    │                                  │                        
                    │   3690 │   │   │   │   tried_ifr │                        
                    │   3691 │   │   │                 │                        
                    │   3692 │   │   │   try:          │                        
                    │ ❱ 3693 │   │   │   │   pr = init │                        
                    │        self._extract_player_resp │                        
                    │   3694 │   │   │   │   │   clien │                        
                    │        player_url if require_js_ │                        
                    │   3695 │   │   │   except Extrac │                        
                    │   3696 │   │   │   │   if last_e │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:3613  │                        
                    │ in _extract_player_response      │                        
                    │                                  │                        
                    │   3610 │   │   │   yt_query['par │                        
                    │   3611 │   │                     │                        
                    │   3612 │   │   yt_query.update(s │                        
                    │ ❱ 3613 │   │   return self._extr │                        
                    │   3614 │   │   │   item_id=video │                        
                    │   3615 │   │   │   ytcfg=player_ │                        
                    │   3616 │   │   │   default_clien │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:966   │                        
                    │ in _extract_response             │                        
                    │                                  │                        
                    │    963 │   │   │   │   │   retur │                        
                    │    964 │   │   │   │   elif not  │                        
                    │    965 │   │   │   │   │   main_ │                        
                    │ ❱  966 │   │   │   │   │   next( │                        
                    │    967 │   │   │   │   │   conti │                        
                    │    968 │   │   │   │             │                        
                    │    969 │   │   │   │   first_byt │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/utils/_utils.py:5114 in    │                        
                    │ __iter__                         │                        
                    │                                  │                        
                    │   5111 │   │   │   self.attempt  │                        
                    │   5112 │   │   │   yield self    │                        
                    │   5113 │   │   │   if self.error │                        
                    │ ❱ 5114 │   │   │   │   self.erro │                        
                    │   5115 │                         │                        
                    │   5116 │   @staticmethod         │                        
                    │   5117 │   def report_retry(e, c │                        
                    │        suffix=None):             │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:3762   │                        
                    │ in _error_or_warning             │                        
                    │                                  │                        
                    │   3759 │   │   return True       │                        
                    │   3760 │                         │                        
                    │   3761 │   def _error_or_warning │                        
                    │ ❱ 3762 │   │   RetryManager.repo │                        
                    │   3763 │   │   │   err, _count o │                        
                    │   3764 │   │   │   info=self.to_ │                        
                    │        self.report_warning,      │                        
                    │   3765 │   │   │   sleep_func=se │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/utils/_utils.py:5122 in    │                        
                    │ report_retry                     │                        
                    │                                  │                        
                    │   5119 │   │   if count > retrie │                        
                    │   5120 │   │   │   if error:     │                        
                    │   5121 │   │   │   │   return er │                        
                    │        else error(str(e))        │                        
                    │ ❱ 5122 │   │   │   raise e       │                        
                    │   5123 │   │                     │                        
                    │   5124 │   │   if not count:     │                        
                    │   5125 │   │   │   return warn(e │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:955   │                        
                    │ in _extract_response             │                        
                    │                                  │                        
                    │    952 │   │   # and its result  │                        
                    │    953 │   │   while True:       │                        
                    │    954 │   │   │   try:          │                        
                    │ ❱  955 │   │   │   │   response  │                        
                    │    956 │   │   │   │   │   ep=ep │                        
                    │    957 │   │   │   │   │   video │                        
                    │    958 │   │   │   │   │   conte │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:603   │                        
                    │ in _call_api                     │                        
                    │                                  │                        
                    │    600 │   │   │   real_headers. │                        
                    │    601 │   │   api_key = (self._ │                        
                    │        ie_key=YoutubeIE.ie_key() │                        
                    │    602 │   │   │   │      or api │                        
                    │ ❱  603 │   │   return self._down │                        
                    │    604 │   │   │   f'https://{se │                        
                    │        default_client)}/youtubei │                        
                    │    605 │   │   │   video_id=vide │                        
                    │    606 │   │   │   data=json.dum │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:1069   │                        
                    │ in download_content              │                        
                    │                                  │                        
                    │   1066 │   │   │   if parser is  │                        
                    │   1067 │   │   │   │   kwargs.po │                        
                    │   1068 │   │   │   # The method  │                        
                    │        _download_..._handle      │                        
                    │ ❱ 1069 │   │   │   res = getattr │                        
                    │        **kwargs)                 │                        
                    │   1070 │   │   │   return res if │                        
                    │   1071 │   │                     │                        
                    │   1072 │   │   def impersonate(f │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:1033   │                        
                    │ in download_handle               │                        
                    │                                  │                        
                    │   1030 │   │                     │                        
                    │   1031 │   │   def download_hand │                        
                    │        transform_source=None,    │                        
                    │   1032 │   │   │   │   │   │   │ │                        
                    │        expected_status=None):    │                        
                    │ ❱ 1033 │   │   │   res = self._d │                        
                    │   1034 │   │   │   │   url_or_re │                        
                    │        encoding=encoding,        │                        
                    │   1035 │   │   │   │   data=data │                        
                    │        expected_status=expected_ │                        
                    │   1036 │   │   │   if res is Fal │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:903 in │                        
                    │ _download_webpage_handle         │                        
                    │                                  │                        
                    │    900 │   │   if isinstance(url │                        
                    │    901 │   │   │   url_or_reques │                        
                    │    902 │   │                     │                        
                    │ ❱  903 │   │   urlh = self._requ │                        
                    │        data=data, headers=header │                        
                    │    904 │   │   if urlh is False: │                        
                    │    905 │   │   │   assert not fa │                        
                    │    906 │   │   │   return False  │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:860 in │                        
                    │ _request_webpage                 │                        
                    │                                  │                        
                    │    857 │   │   │                 │                        
                    │    858 │   │   │   errmsg = f'{e │                        
                    │    859 │   │   │   if fatal:     │                        
                    │ ❱  860 │   │   │   │   raise Ext │                        
                    │    861 │   │   │   else:         │                        
                    │    862 │   │   │   │   self.repo │                        
                    │    863 │   │   │   │   return Fa │                        
                    ╰──────────────────────────────────╯                        
                    ExtractorError: [youtube]                                   
                    ad30z1t_t30: Unable to download API                         
                    page: <urlopen error Tunnel                                 
                    connection failed: 407 Proxy                                
                    Authentication Required> (caused by                         
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/providers/audio/b │                        
                    │ ase.py:369 in                    │                        
                    │ get_download_metadata            │                        
                    │                                  │                        
                    │   366 │   │   """                │                        
                    │   367 │   │                      │                        
                    │   368 │   │   try:               │                        
                    │ ❱ 369 │   │   │   data = self.au │                        
                    │   370 │   │   │                  │                        
                    │   371 │   │   │   if data:       │                        
                    │   372 │   │   │   │   return dat │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1556 in       │                        
                    │ extract_info                     │                        
                    │                                  │                        
                    │   1553 │   │   │   │   if self.p │                        
                    │   1554 │   │   │   │   │   raise │                        
                    │   1555 │   │   │   │   break     │                        
                    │ ❱ 1556 │   │   │   return self._ │                        
                    │        extra_info, process)      │                        
                    │   1557 │   │   else:             │                        
                    │   1558 │   │   │   extractors_re │                        
                    │        ['default'])              │                        
                    │   1559 │   │   │   self.report_e │                        
                    │        (%s)")} found for URL {ur │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1585 in       │                        
                    │ wrapper                          │                        
                    │                                  │                        
                    │   1582 │   │   │   │   │   msg + │                        
                    │        --proxy) to workaround.'  │                        
                    │   1583 │   │   │   │   │   self. │                        
                    │   1584 │   │   │   │   except Ex │                        
                    │ ❱ 1585 │   │   │   │   │   self. │                        
                    │   1586 │   │   │   │   except Ex │                        
                    │   1587 │   │   │   │   │   if se │                        
                    │   1588 │   │   │   │   │   │   s │                        
                    │        tb=encode_compat_str(trac │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1045 in       │                        
                    │ report_error                     │                        
                    │                                  │                        
                    │   1042 │   │   Do the same as tr │                        
                    │   1043 │   │   in red if stderr  │                        
                    │   1044 │   │   '''               │                        
                    │ ❱ 1045 │   │   self.trouble(f'{s │                        
                    │        *args, **kwargs)          │                        
                    │   1046 │                         │                        
                    │   1047 │   def write_debug(self, │                        
                    │   1048 │   │   '''Log debug mess │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:964 in        │                        
                    │ trouble                          │                        
                    │                                  │                        
                    │    961 │   │   @param is_error   │                        
                    │    962 │   │   """               │                        
                    │    963 │   │   if message is not │                        
                    │ ❱  964 │   │   │   self.to_stder │                        
                    │    965 │   │   if self.params.ge │                        
                    │    966 │   │   │   if tb is None │                        
                    │    967 │   │   │   │   if sys.ex │                        
                    │        block                     │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:906 in        │                        
                    │ to_stderr                        │                        
                    │                                  │                        
                    │    903 │   │   """Print message  │                        
                    │    904 │   │   assert isinstance │                        
                    │    905 │   │   if self.params.ge │                        
                    │ ❱  906 │   │   │   self.params[' │                        
                    │    907 │   │   else:             │                        
                    │    908 │   │   │   self._write_s │                        
                    │        self._out_files.error, on │                        
                    │    909                           │                        
                    │                                  │                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/providers/audio/b │                        
                    │ ase.py:57 in error               │                        
                    │                                  │                        
                    │    54 │   │   YTDL uses this to  │                        
                    │    55 │   │   """                │                        
                    │    56 │   │                      │                        
                    │ ❱  57 │   │   raise AudioProvide │                        
                    │    58                            │                        
                    │    59                            │                        
                    │    60 ISRC_REGEX = re.compile(r" │                        
                    ╰──────────────────────────────────╯                        
                    AudioProviderError: ERROR: [youtube]                        
                    ad30z1t_t30: Unable to download API                         
                    page: <urlopen error Tunnel                                 
                    connection failed: 407 Proxy                                
                    Authentication Required> (caused by                         
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    The above exception was the direct                          
                    cause of the following exception:                           

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/download/download │                        
                    │ er.py:646 in search_and_download │                        
                    │                                  │                        
                    │   643 │   │   │   │   display_pr │                        
                    │   644 │   │   │   )              │                        
                    │   645 │   │   │                  │                        
                    │ ❱ 646 │   │   │   download_info  │                        
                    │   647 │   │   │   │   download_u │                        
                    │   648 │   │   │   )              │                        
                    │   649                            │                        
                    │                                  │                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/providers/audio/b │                        
                    │ ase.py:375 in                    │                        
                    │ get_download_metadata            │                        
                    │                                  │                        
                    │   372 │   │   │   │   return dat │                        
                    │   373 │   │   except Exception a │                        
                    │   374 │   │   │   logger.debug(e │                        
                    │ ❱ 375 │   │   │   raise AudioPro │                        
                    │   376 │   │                      │                        
                    │   377 │   │   raise AudioProvide │                        
                    │   378                            │                        
                    ╰──────────────────────────────────╯                        
                    AudioProviderError: YT-DLP download                         
                    error -                                                     
                    https://music.youtube.com/watch?v=ad                        
                    30z1t_t30                                                   
[16:40:03] DEBUG    MainThread - Took 80 seconds              entry_point.py:151
reppson commented 9 months ago

I have the same problem since today. Yesterday it worked fine, today i got the AudioProviderError as well

abisshekl commented 9 months ago

Same thing happened to me. I tried updating and that also did not work

ryndshn commented 8 months ago

here's the error I get when downloading a Spotify playlist of 4400 songs. fwiw, it starts processing the playlist and downloads successfully but consistently hits this after running for a little while.

entire error log in file (too long for gh to let me paste here) spotify-download-error.txt

[18:42:51] ERROR    asyncio_3 - Traceback (most recent call last):                                progress_handler.py:358
                      File "/opt/homebrew/lib/python3.11/site-packages/urllib3/connection.py",                           
                    line 198, in _new_conn                                                                               
                        sock = connection.create_connection(                                                             
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                             
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/urllib3/util/connection.py", line                        
                    60, in create_connection                                                                             
                        for res in socket.getaddrinfo(host, port, family, socket.SOCK_STREAM):                           
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            
                      File                                                                                               
                    "/opt/homebrew/Cellar/python@3.11/3.11.7_1/Frameworks/Python.framework/Versio                        
                    ns/3.11/lib/python3.11/socket.py", line 962, in getaddrinfo                                          
                        for res in _socket.getaddrinfo(host, port, family, type, proto, flags):                          
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                           
                    socket.gaierror: [Errno 8] nodename nor servname provided, or not known                              

                    The above exception was the direct cause of the following exception:                                 

                    Traceback (most recent call last):                                                                   
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/_requests.py",                         
                    line 306, in _send                                                                                   
                        requests_res = session.request(                                                                  
                                       ^^^^^^^^^^^^^^^^                                                                  
                      File "/opt/homebrew/lib/python3.11/site-packages/requests/sessions.py",                            
                    line 589, in request                                                                                 
                        resp = self.send(prep, **send_kwargs)                                                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                            
                      File "/opt/homebrew/lib/python3.11/site-packages/requests/sessions.py",                            
                    line 703, in send                                                                                    
                        r = adapter.send(request, **kwargs)                                                              
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                              
                      File "/opt/homebrew/lib/python3.11/site-packages/requests/adapters.py",                            
                    line 486, in send                                                                                    
                        resp = conn.urlopen(                                                                             
                               ^^^^^^^^^^^^^                                                                             
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py", line                         
                    847, in urlopen                                                                                      
                        retries = retries.increment(                                                                     
                                  ^^^^^^^^^^^^^^^^^^                                                                     
                      File "/opt/homebrew/lib/python3.11/site-packages/urllib3/util/retry.py",                           
                    line 445, in increment                                                                               
                        raise reraise(type(error), error, _stacktrace)                                                   
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                   
                      File "/opt/homebrew/lib/python3.11/site-packages/urllib3/util/util.py",                            
                    line 39, in reraise                                                                                  
                        raise value                                                                                      
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py", line                         
                    793, in urlopen                                                                                      
                        response = self._make_request(                                                                   
                                   ^^^^^^^^^^^^^^^^^^^                                                                   
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py", line                         
                    491, in _make_request                                                                                
                        raise new_e                                                                                      
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py", line                         
                    467, in _make_request                                                                                
                        self._validate_conn(conn)                                                                        
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py", line                         
                    1099, in _validate_conn                                                                              
                        conn.connect()                                                                                   
                      File "/opt/homebrew/lib/python3.11/site-packages/urllib3/connection.py",                           
                    line 616, in connect                                                                                 
                        self.sock = sock = self._new_conn()                                                              
                                           ^^^^^^^^^^^^^^^^                                                              
                      File "/opt/homebrew/lib/python3.11/site-packages/urllib3/connection.py",                           
                    line 205, in _new_conn                                                                               
                        raise NameResolutionError(self.host, self, e) from e                                             
                    urllib3.exceptions.NameResolutionError: <urllib3.connection.HTTPSConnection                          
                    object at 0x2a598b090>: Failed to resolve 'music.youtube.com' ([Errno 8]                             
                    nodename nor servname provided, or not known)                                                        

                    The above exception was the direct cause of the following exception:                                 

                    Traceback (most recent call last):                                                                   
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line                        
                    850, in _request_webpage                                                                             
                        return self._downloader.urlopen(self._create_request(url_or_request,                             
                    data, headers, query))                                                                               
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^                                                                                   
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    4082, in urlopen                                                                                     
                        return self._request_director.send(req)                                                          
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                          
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/common.py",                            
                    line 114, in send                                                                                    
                        response = handler.send(request)                                                                 
                                   ^^^^^^^^^^^^^^^^^^^^^                                                                 
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/_helper.py",                           
                    line 204, in wrapper                                                                                 
                        return func(self, *args, **kwargs)                                                               
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                               
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/common.py",                            
                    line 325, in send                                                                                    
                        return self._send(request)                                                                       
                               ^^^^^^^^^^^^^^^^^^^                                                                       
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/_requests.py",                         
                    line 334, in _send                                                                                   
                        raise TransportError(cause=e) from e                                                             
                    yt_dlp.networking.exceptions.TransportError:                                                         
                    <urllib3.connection.HTTPSConnection object at 0x2a598b090>: Failed to resolve                        
                    'music.youtube.com' ([Errno 8] nodename nor servname provided, or not known)                         

                    During handling of the above exception, another exception occurred:                                  

                    Traceback (most recent call last):                                                                   
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    1587, in wrapper                                                                                     
                        return func(self, *args, **kwargs)                                                               
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                               
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    1722, in __extract_info                                                                              
                        ie_result = ie.extract(url)                                                                      
                                    ^^^^^^^^^^^^^^^                                                                      
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line                        
                    718, in extract                                                                                      
                        ie_result = self._real_extract(url)                                                              
                                    ^^^^^^^^^^^^^^^^^^^^^^^                                                              
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 4072, in _real_extract                                                                          
                        webpage, master_ytcfg, player_responses, player_url =                                            
                    self._download_player_responses(url, smuggled_data, video_id, webpage_url)                           
                                                                              ^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                              
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 4036, in _download_player_responses                                                             
                        player_responses, player_url = self._extract_player_responses(                                   
                                                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                   
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 3727, in _extract_player_responses                                                              
                        raise last_error                                                                                 
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 3692, in _extract_player_responses                                                              
                        pr = initial_pr if client == 'web' and initial_pr else                                           
                    self._extract_player_response(                                                                       
                                                                               ^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^                                                                                         
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 3612, in _extract_player_response                                                               
                        return self._extract_response(                                                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^                                                                   
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 966, in _extract_response                                                                       
                        next(main_retries)                                                                               
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/utils/_utils.py",                          
                    line 5046, in __iter__                                                                               
                        self.error_callback(self.error, self.attempt, self.retries)                                      
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line                        
                    3767, in _error_or_warning                                                                           
                        RetryManager.report_retry(                                                                       
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/utils/_utils.py",                          
                    line 5054, in report_retry                                                                           
                        raise e                                                                                          
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 955, in _extract_response                                                                       
                        response = self._call_api(                                                                       
                                   ^^^^^^^^^^^^^^^                                                                       
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py",                            
                    line 603, in _call_api                                                                               
                        return self._download_json(                                                                      
                               ^^^^^^^^^^^^^^^^^^^^                                                                      
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line                        
                    1072, in download_content                                                                            
                        res = getattr(self, download_handle.__name__)(url_or_request, video_id,                          
                    **kwargs)                                                                                            
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^                                                                                             
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line                        
                    1036, in download_handle                                                                             
                        res = self._download_webpage_handle(                                                             
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                                             
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line                        
                    906, in _download_webpage_handle                                                                     
                        urlh = self._request_webpage(url_or_request, video_id, note, errnote,                            
                    fatal, data=data, headers=headers, query=query,                                                      
                    expected_status=expected_status)                                                                     
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py", line                        
                    863, in _request_webpage                                                                             
                        raise ExtractorError(errmsg, cause=err)                                                          
                    yt_dlp.utils.ExtractorError:  OPKTk5vUtDY: Unable to download API page:                              
                    <urllib3.connection.HTTPSConnection object at 0x2a598b090>: Failed to resolve                        
                    'music.youtube.com' ([Errno 8] nodename nor servname provided, or not known)                         
                    (caused by TransportError("<urllib3.connection.HTTPSConnection object at                             
                    0x2a598b090>: Failed to resolve 'music.youtube.com' ([Errno 8] nodename nor                          
                    servname provided, or not known)"))                                                                  

                    During handling of the above exception, another exception occurred:                                  

                    Traceback (most recent call last):                                                                   
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/spotdl/providers/audio/base.py",                         
                    line 369, in get_download_metadata                                                                   
                        data = self.audio_handler.extract_info(url, download=download)                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                   
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    1576, in extract_info                                                                                
                        return self.__extract_info(url, self.get_info_extractor(key), download,                          
                    extra_info, process)                                                                                 
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^                                                                                  
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    1605, in wrapper                                                                                     
                        self.report_error(str(e), e.format_traceback())                                                  
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    1054, in report_error                                                                                
                        self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)}                                   
                    {message}', *args, **kwargs)                                                                         
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    973, in trouble                                                                                      
                        self.to_stderr(message)                                                                          
                      File "/opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py", line                        
                    915, in to_stderr                                                                                    
                        self.params['logger'].error(message)                                                             
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/spotdl/providers/audio/base.py",                         
                    line 57, in error                                                                                    
                        raise AudioProviderError(msg)                                                                    
                    spotdl.providers.audio.base.AudioProviderError: [0;31mERROR:[0m  OPKTk5vUtDY:                        
                    Unable to download API page: <urllib3.connection.HTTPSConnection object at                           
                    0x2a598b090>: Failed to resolve 'music.youtube.com' ([Errno 8] nodename nor                          
                    servname provided, or not known) (caused by                                                          
                    TransportError("<urllib3.connection.HTTPSConnection object at 0x2a598b090>:                          
                    Failed to resolve 'music.youtube.com' ([Errno 8] nodename nor servname                               
                    provided, or not known)"))                                                                           

                    The above exception was the direct cause of the following exception:                                 

                    Traceback (most recent call last):                                                                   
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/spotdl/download/downloader.py",                          
                    line 646, in search_and_download                                                                     
                        download_info = audio_downloader.get_download_metadata(                                          
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                          
                      File                                                                                               
                    "/opt/homebrew/lib/python3.11/site-packages/spotdl/providers/audio/base.py",                         
                    line 375, in get_download_metadata                                                                   
                        raise AudioProviderError(f"YT-DLP download error - {url}") from exception                        
                    spotdl.providers.audio.base.AudioProviderError: YT-DLP download error -                              
                    https://music.youtube.com/watch?v=OPKTk5vUtDY                                                        

                    ╭──────────────────── Traceback (most recent call last) ────────────────────╮                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connection.py:198 in   │                        
                    │ _new_conn                                                                 │                        
                    │                                                                           │                        
                    │   195 │   │   :return: New socket connection.                             │                        
                    │   196 │   │   """                                                         │                        
                    │   197 │   │   try:                                                        │                        
                    │ ❱ 198 │   │   │   sock = connection.create_connection(                    │                        
                    │   199 │   │   │   │   (self._dns_host, self.port),                        │                        
                    │   200 │   │   │   │   self.timeout,                                       │                        
                    │   201 │   │   │   │   source_address=self.source_address,                 │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/util/connection.py:60  │                        
                    │ in create_connection                                                      │                        
                    │                                                                           │                        
                    │    57 │   except UnicodeError:                                            │                        
                    │    58 │   │   raise LocationParseError(f"'{host}', label empty or too lon │                        
                    │    59 │                                                                   │                        
                    │ ❱  60 │   for res in socket.getaddrinfo(host, port, family, socket.SOCK_S │                        
                    │    61 │   │   af, socktype, proto, canonname, sa = res                    │                        
                    │    62 │   │   sock = None                                                 │                        
                    │    63 │   │   try:                                                        │                        
                    │                                                                           │                        
                    │ /opt/homebrew/Cellar/python@3.11/3.11.7_1/Frameworks/Python.framework/Ver │                        
                    │ sions/3.11/lib/python3.11/socket.py:962 in getaddrinfo                    │                        
                    │                                                                           │                        
                    │   959 │   # We override this function since we want to translate the nume │                        
                    │   960 │   # and socket type values to enum constants.                     │                        
                    │   961 │   addrlist = []                                                   │                        
                    │ ❱ 962 │   for res in _socket.getaddrinfo(host, port, family, type, proto, │                        
                    │   963 │   │   af, socktype, proto, canonname, sa = res                    │                        
                    │   964 │   │   addrlist.append((_intenum_converter(af, AddressFamily),     │                        
                    │   965 │   │   │   │   │   │    _intenum_converter(socktype, SocketKind),  │                        
                    ╰───────────────────────────────────────────────────────────────────────────╯                        
                    gaierror: [Errno 8] nodename nor servname provided, or not known                                     

                    The above exception was the direct cause of the following exception:                                 

                    ╭──────────────────── Traceback (most recent call last) ────────────────────╮                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/_requests.py │                        
                    │ :306 in _send                                                             │                        
                    │                                                                           │                        
                    │   303 │   │   │   cookiejar=request.extensions.get('cookiejar') or self.c │                        
                    │   304 │   │                                                               │                        
                    │   305 │   │   try:                                                        │                        
                    │ ❱ 306 │   │   │   requests_res = session.request(                         │                        
                    │   307 │   │   │   │   method=request.method,                              │                        
                    │   308 │   │   │   │   url=request.url,                                    │                        
                    │   309 │   │   │   │   data=request.data,                                  │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/requests/sessions.py:589 in    │                        
                    │ request                                                                   │                        
                    │                                                                           │                        
                    │   586 │   │   │   "allow_redirects": allow_redirects,                     │                        
                    │   587 │   │   }                                                           │                        
                    │   588 │   │   send_kwargs.update(settings)                                │                        
                    │ ❱ 589 │   │   resp = self.send(prep, **send_kwargs)                       │                        
                    │   590 │   │                                                               │                        
                    │   591 │   │   return resp                                                 │                        
                    │   592                                                                     │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/requests/sessions.py:703 in    │                        
                    │ send                                                                      │                        
                    │                                                                           │                        
                    │   700 │   │   start = preferred_clock()                                   │                        
                    │   701 │   │                                                               │                        
                    │   702 │   │   # Send the request                                          │                        
                    │ ❱ 703 │   │   r = adapter.send(request, **kwargs)                         │                        
                    │   704 │   │                                                               │                        
                    │   705 │   │   # Total elapsed time of the request (approximately)         │                        
                    │   706 │   │   elapsed = preferred_clock() - start                         │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/requests/adapters.py:486 in    │                        
                    │ send                                                                      │                        
                    │                                                                           │                        
                    │   483 │   │   │   timeout = TimeoutSauce(connect=timeout, read=timeout)   │                        
                    │   484 │   │                                                               │                        
                    │   485 │   │   try:                                                        │                        
                    │ ❱ 486 │   │   │   resp = conn.urlopen(                                    │                        
                    │   487 │   │   │   │   method=request.method,                              │                        
                    │   488 │   │   │   │   url=url,                                            │                        
                    │   489 │   │   │   │   body=request.body,                                  │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py:847  │                        
                    │ in urlopen                                                                │                        
                    │                                                                           │                        
                    │    844 │   │   │   elif isinstance(new_e, (OSError, HTTPException)):      │                        
                    │    845 │   │   │   │   new_e = ProtocolError("Connection aborted.", new_e │                        
                    │    846 │   │   │                                                          │                        
                    │ ❱  847 │   │   │   retries = retries.increment(                           │                        
                    │    848 │   │   │   │   method, url, error=new_e, _pool=self, _stacktrace= │                        
                    │    849 │   │   │   )                                                      │                        
                    │    850 │   │   │   retries.sleep()                                        │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/util/retry.py:445 in   │                        
                    │ increment                                                                 │                        
                    │                                                                           │                        
                    │   442 │   │   """                                                         │                        
                    │   443 │   │   if self.total is False and error:                           │                        
                    │   444 │   │   │   # Disabled, indicate to re-raise the error.             │                        
                    │ ❱ 445 │   │   │   raise reraise(type(error), error, _stacktrace)          │                        
                    │   446 │   │                                                               │                        
                    │   447 │   │   total = self.total                                          │                        
                    │   448 │   │   if total is not None:                                       │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/util/util.py:39 in     │                        
                    │ reraise                                                                   │                        
                    │                                                                           │                        
                    │   36 │   try:                                                             │                        
                    │   37 │   │   if value.__traceback__ is not tb:                            │                        
                    │   38 │   │   │   raise value.with_traceback(tb)                           │                        
                    │ ❱ 39 │   │   raise value                                                  │                        
                    │   40 │   finally:                                                         │                        
                    │   41 │   │   value = None  # type: ignore[assignment]                     │                        
                    │   42 │   │   tb = None                                                    │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py:793  │                        
                    │ in urlopen                                                                │                        
                    │                                                                           │                        
                    │    790 │   │   │   response_conn = conn if not release_conn else None     │                        
                    │    791 │   │   │                                                          │                        
                    │    792 │   │   │   # Make the request on the HTTPConnection object        │                        
                    │ ❱  793 │   │   │   response = self._make_request(                         │                        
                    │    794 │   │   │   │   conn,                                              │                        
                    │    795 │   │   │   │   method,                                            │                        
                    │    796 │   │   │   │   url,                                               │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py:491  │                        
                    │ in _make_request                                                          │                        
                    │                                                                           │                        
                    │    488 │   │   │   │   new_e, (OSError, NewConnectionError, TimeoutError, │                        
                    │    489 │   │   │   ) and (conn and conn.proxy and not conn.has_connected_ │                        
                    │    490 │   │   │   │   new_e = _wrap_proxy_error(new_e, conn.proxy.scheme │                        
                    │ ❱  491 │   │   │   raise new_e                                            │                        
                    │    492 │   │                                                              │                        
                    │    493 │   │   # conn.request() calls http.client.*.request, not the meth │                        
                    │    494 │   │   # urllib3.request. It also calls makefile (recv) on the so │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py:467  │                        
                    │ in _make_request                                                          │                        
                    │                                                                           │                        
                    │    464 │   │   try:                                                       │                        
                    │    465 │   │   │   # Trigger any extra validation we need to do.          │                        
                    │    466 │   │   │   try:                                                   │                        
                    │ ❱  467 │   │   │   │   self._validate_conn(conn)                          │                        
                    │    468 │   │   │   except (SocketTimeout, BaseSSLError) as e:             │                        
                    │    469 │   │   │   │   self._raise_timeout(err=e, url=url, timeout_value= │                        
                    │    470 │   │   │   │   raise                                              │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connectionpool.py:1099 │                        
                    │ in _validate_conn                                                         │                        
                    │                                                                           │                        
                    │   1096 │   │                                                              │                        
                    │   1097 │   │   # Force connect early to allow us to validate the connecti │                        
                    │   1098 │   │   if conn.is_closed:                                         │                        
                    │ ❱ 1099 │   │   │   conn.connect()                                         │                        
                    │   1100 │   │                                                              │                        
                    │   1101 │   │   # TODO revise this, see https://github.com/urllib3/urllib3 │                        
                    │   1102 │   │   if not conn.is_verified and not conn.proxy_is_verified:    │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connection.py:616 in   │                        
                    │ connect                                                                   │                        
                    │                                                                           │                        
                    │   613 │                                                                   │                        
                    │   614 │   def connect(self) -> None:                                      │                        
                    │   615 │   │   sock: socket.socket | ssl.SSLSocket                         │                        
                    │ ❱ 616 │   │   self.sock = sock = self._new_conn()                         │                        
                    │   617 │   │   server_hostname: str = self.host                            │                        
                    │   618 │   │   tls_in_tls = False                                          │                        
                    │   619                                                                     │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/urllib3/connection.py:205 in   │                        
                    │ _new_conn                                                                 │                        
                    │                                                                           │                        
                    │   202 │   │   │   │   socket_options=self.socket_options,                 │                        
                    │   203 │   │   │   )                                                       │                        
                    │   204 │   │   except socket.gaierror as e:                                │                        
                    │ ❱ 205 │   │   │   raise NameResolutionError(self.host, self, e) from e    │                        
                    │   206 │   │   except SocketTimeout as e:                                  │                        
                    │   207 │   │   │   raise ConnectTimeoutError(                              │                        
                    │   208 │   │   │   │   self,                                               │                        
                    ╰───────────────────────────────────────────────────────────────────────────╯                        
                    NameResolutionError: <urllib3.connection.HTTPSConnection object at                                   
                    0x2a598b090>: Failed to resolve 'music.youtube.com' ([Errno 8] nodename nor                          
                    servname provided, or not known)                                                                     

                    The above exception was the direct cause of the following exception:                                 

                    ╭──────────────────── Traceback (most recent call last) ────────────────────╮                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py:850 │                        
                    │ in _request_webpage                                                       │                        
                    │                                                                           │                        
                    │    847 │   │   │   headers.setdefault('X-Forwarded-For', self._x_forwarde │                        
                    │    848 │   │                                                              │                        
                    │    849 │   │   try:                                                       │                        
                    │ ❱  850 │   │   │   return self._downloader.urlopen(self._create_request(u │                        
                    │        headers, query))                                                   │                        
                    │    851 │   │   except network_exceptions as err:                          │                        
                    │    852 │   │   │   if isinstance(err, HTTPError):                         │                        
                    │    853 │   │   │   │   if self.__can_accept_status_code(err, expected_sta │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:4082 in    │                        
                    │ urlopen                                                                   │                        
                    │                                                                           │                        
                    │   4079 │   │   clean_headers(req.headers)                                 │                        
                    │   4080 │   │                                                              │                        
                    │   4081 │   │   try:                                                       │                        
                    │ ❱ 4082 │   │   │   return self._request_director.send(req)                │                        
                    │   4083 │   │   except NoSupportingHandlers as e:                          │                        
                    │   4084 │   │   │   for ue in e.unsupported_errors:                        │                        
                    │   4085 │   │   │   │   # FIXME: This depends on the order of errors.      │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/common.py:11 │                        
                    │ 4 in send                                                                 │                        
                    │                                                                           │                        
                    │   111 │   │   │                                                           │                        
                    │   112 │   │   │   self._print_verbose(f'Sending request via "{handler.RH_ │                        
                    │   113 │   │   │   try:                                                    │                        
                    │ ❱ 114 │   │   │   │   response = handler.send(request)                    │                        
                    │   115 │   │   │   except RequestError:                                    │                        
                    │   116 │   │   │   │   raise                                               │                        
                    │   117 │   │   │   except Exception as e:                                  │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/_helper.py:2 │                        
                    │ 04 in wrapper                                                             │                        
                    │                                                                           │                        
                    │   201 │   @functools.wraps(func)                                          │                        
                    │   202 │   def wrapper(self, *args, **kwargs):                             │                        
                    │   203 │   │   try:                                                        │                        
                    │ ❱ 204 │   │   │   return func(self, *args, **kwargs)                      │                        
                    │   205 │   │   except UnsupportedRequest as e:                             │                        
                    │   206 │   │   │   if e.handler is None:                                   │                        
                    │   207 │   │   │   │   e.handler = self                                    │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/common.py:32 │                        
                    │ 5 in send                                                                 │                        
                    │                                                                           │                        
                    │   322 │   def send(self, request: Request) -> Response:                   │                        
                    │   323 │   │   if not isinstance(request, Request):                        │                        
                    │   324 │   │   │   raise TypeError('Expected an instance of Request')      │                        
                    │ ❱ 325 │   │   return self._send(request)                                  │                        
                    │   326 │                                                                   │                        
                    │   327 │   @abc.abstractmethod                                             │                        
                    │   328 │   def _send(self, request: Request):                              │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/networking/_requests.py │                        
                    │ :334 in _send                                                             │                        
                    │                                                                           │                        
                    │   331 │   │                                                               │                        
                    │   332 │   │   except urllib3.exceptions.HTTPError as e:                   │                        
                    │   333 │   │   │   # Catch any urllib3 exceptions that may leak through    │                        
                    │ ❱ 334 │   │   │   raise TransportError(cause=e) from e                    │                        
                    │   335 │   │                                                               │                        
                    │   336 │   │   except requests.exceptions.RequestException as e:           │                        
                    │   337 │   │   │   # Miscellaneous Requests exceptions. May not necessary  │                        
                    │       e.g. InvalidURL                                                     │                        
                    ╰───────────────────────────────────────────────────────────────────────────╯                        
                    TransportError: <urllib3.connection.HTTPSConnection object at 0x2a598b090>:                          
                    Failed to resolve 'music.youtube.com' ([Errno 8] nodename nor servname                               
                    provided, or not known)                                                                              

                    During handling of the above exception, another exception occurred:                                  

                    ╭──────────────────── Traceback (most recent call last) ────────────────────╮                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:1587 in    │                        
                    │ wrapper                                                                   │                        
                    │                                                                           │                        
                    │   1584 │   │   def wrapper(self, *args, **kwargs):                        │                        
                    │   1585 │   │   │   while True:                                            │                        
                    │   1586 │   │   │   │   try:                                               │                        
                    │ ❱ 1587 │   │   │   │   │   return func(self, *args, **kwargs)             │                        
                    │   1588 │   │   │   │   except (DownloadCancelled, LazyList.IndexError, Pa │                        
                    │   1589 │   │   │   │   │   raise                                          │                        
                    │   1590 │   │   │   │   except ReExtractInfo as e:                         │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:1722 in    │                        
                    │ __extract_info                                                            │                        
                    │                                                                           │                        
                    │   1719 │   │   self._apply_header_cookies(url)                            │                        
                    │   1720 │   │                                                              │                        
                    │   1721 │   │   try:                                                       │                        
                    │ ❱ 1722 │   │   │   ie_result = ie.extract(url)                            │                        
                    │   1723 │   │   except UserNotLive as e:                                   │                        
                    │   1724 │   │   │   if process:                                            │                        
                    │   1725 │   │   │   │   if self.params.get('wait_for_video'):              │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py:718 │                        
                    │ in extract                                                                │                        
                    │                                                                           │                        
                    │    715 │   │   │   │   │   self.initialize()                              │                        
                    │    716 │   │   │   │   │   self.to_screen('Extracting URL: %s' % (        │                        
                    │    717 │   │   │   │   │   │   url if self.get_param('verbose') else trun │                        
                    │        20)))                                                              │                        
                    │ ❱  718 │   │   │   │   │   ie_result = self._real_extract(url)            │                        
                    │    719 │   │   │   │   │   if ie_result is None:                          │                        
                    │    720 │   │   │   │   │   │   return None                                │                        
                    │    721 │   │   │   │   │   if self._x_forwarded_for_ip:                   │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:40 │                        
                    │ 72 in _real_extract                                                       │                        
                    │                                                                           │                        
                    │   4069 │   │   base_url = self.http_scheme() + '//www.youtube.com/'       │                        
                    │   4070 │   │   webpage_url = base_url + 'watch?v=' + video_id             │                        
                    │   4071 │   │                                                              │                        
                    │ ❱ 4072 │   │   webpage, master_ytcfg, player_responses, player_url =      │                        
                    │        self._download_player_responses(url, smuggled_data, video_id, webp │                        
                    │   4073 │   │                                                              │                        
                    │   4074 │   │   playability_statuses = traverse_obj(                       │                        
                    │   4075 │   │   │   player_responses, (..., 'playabilityStatus'), expected │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:40 │                        
                    │ 36 in _download_player_responses                                          │                        
                    │                                                                           │                        
                    │   4033 │   │                                                              │                        
                    │   4034 │   │   master_ytcfg = self.extract_ytcfg(video_id, webpage) or    │                        
                    │        self._get_default_ytcfg()                                          │                        
                    │   4035 │   │                                                              │                        
                    │ ❱ 4036 │   │   player_responses, player_url = self._extract_player_respon │                        
                    │   4037 │   │   │   self._get_requested_clients(url, smuggled_data),       │                        
                    │   4038 │   │   │   video_id, webpage, master_ytcfg, smuggled_data)        │                        
                    │   4039                                                                    │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:37 │                        
                    │ 27 in _extract_player_responses                                           │                        
                    │                                                                           │                        
                    │   3724 │   │                                                              │                        
                    │   3725 │   │   if last_error:                                             │                        
                    │   3726 │   │   │   if not len(prs):                                       │                        
                    │ ❱ 3727 │   │   │   │   raise last_error                                   │                        
                    │   3728 │   │   │   self.report_warning(last_error)                        │                        
                    │   3729 │   │   return prs, player_url                                     │                        
                    │   3730                                                                    │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:36 │                        
                    │ 92 in _extract_player_responses                                           │                        
                    │                                                                           │                        
                    │   3689 │   │   │   │   tried_iframe_fallback = True                       │                        
                    │   3690 │   │   │                                                          │                        
                    │   3691 │   │   │   try:                                                   │                        
                    │ ❱ 3692 │   │   │   │   pr = initial_pr if client == 'web' and initial_pr  │                        
                    │        self._extract_player_response(                                     │                        
                    │   3693 │   │   │   │   │   client, video_id, player_ytcfg or master_ytcfg │                        
                    │        player_url if require_js_player else None, initial_pr, smuggled_da │                        
                    │   3694 │   │   │   except ExtractorError as e:                            │                        
                    │   3695 │   │   │   │   if last_error:                                     │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:36 │                        
                    │ 12 in _extract_player_response                                            │                        
                    │                                                                           │                        
                    │   3609 │   │   │   yt_query['params'] = pp_arg                            │                        
                    │   3610 │   │                                                              │                        
                    │   3611 │   │   yt_query.update(self._generate_player_context(sts))        │                        
                    │ ❱ 3612 │   │   return self._extract_response(                             │                        
                    │   3613 │   │   │   item_id=video_id, ep='player', query=yt_query,         │                        
                    │   3614 │   │   │   ytcfg=player_ytcfg, headers=headers, fatal=True,       │                        
                    │   3615 │   │   │   default_client=client,                                 │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:96 │                        
                    │ 6 in _extract_response                                                    │                        
                    │                                                                           │                        
                    │    963 │   │   │   │   │   return self._error_or_warning(e, fatal=fatal)  │                        
                    │    964 │   │   │   │   elif not isinstance(e.cause, HTTPError):           │                        
                    │    965 │   │   │   │   │   main_rm.error = e                              │                        
                    │ ❱  966 │   │   │   │   │   next(main_retries)                             │                        
                    │    967 │   │   │   │   │   continue                                       │                        
                    │    968 │   │   │   │                                                      │                        
                    │    969 │   │   │   │   first_bytes = e.cause.response.read(512)           │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/utils/_utils.py:5046 in │                        
                    │ __iter__                                                                  │                        
                    │                                                                           │                        
                    │   5043 │   │   │   self.attempt += 1                                      │                        
                    │   5044 │   │   │   yield self                                             │                        
                    │   5045 │   │   │   if self.error:                                         │                        
                    │ ❱ 5046 │   │   │   │   self.error_callback(self.error, self.attempt, self │                        
                    │   5047 │                                                                  │                        
                    │   5048 │   @staticmethod                                                  │                        
                    │   5049 │   def report_retry(e, count, retries, *, sleep_func, info, warn, │                        
                    │        suffix=None):                                                      │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py:376 │                        
                    │ 7 in _error_or_warning                                                    │                        
                    │                                                                           │                        
                    │   3764 │   │   return True                                                │                        
                    │   3765 │                                                                  │                        
                    │   3766 │   def _error_or_warning(self, err, _count=None, _retries=0, *, f │                        
                    │ ❱ 3767 │   │   RetryManager.report_retry(                                 │                        
                    │   3768 │   │   │   err, _count or int(fatal), _retries,                   │                        
                    │   3769 │   │   │   info=self.to_screen, warn=self.report_warning, error=N │                        
                    │        self.report_warning,                                               │                        
                    │   3770 │   │   │   sleep_func=self.get_param('retry_sleep_functions', {}) │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/utils/_utils.py:5054 in │                        
                    │ report_retry                                                              │                        
                    │                                                                           │                        
                    │   5051 │   │   if count > retries:                                        │                        
                    │   5052 │   │   │   if error:                                              │                        
                    │   5053 │   │   │   │   return error(f'{e}. Giving up after {count - 1} re │                        
                    │        else error(str(e))                                                 │                        
                    │ ❱ 5054 │   │   │   raise e                                                │                        
                    │   5055 │   │                                                              │                        
                    │   5056 │   │   if not count:                                              │                        
                    │   5057 │   │   │   return warn(e)                                         │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:95 │                        
                    │ 5 in _extract_response                                                    │                        
                    │                                                                           │                        
                    │    952 │   │   # and its result MUST be checked if the manager is non fat │                        
                    │    953 │   │   while True:                                                │                        
                    │    954 │   │   │   try:                                                   │                        
                    │ ❱  955 │   │   │   │   response = self._call_api(                         │                        
                    │    956 │   │   │   │   │   ep=ep, fatal=True, headers=headers,            │                        
                    │    957 │   │   │   │   │   video_id=item_id, query=query, note=note,      │                        
                    │    958 │   │   │   │   │   context=self._extract_context(ytcfg, default_c │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/youtube.py:60 │                        
                    │ 3 in _call_api                                                            │                        
                    │                                                                           │                        
                    │    600 │   │   │   real_headers.update(headers)                           │                        
                    │    601 │   │   api_key = (self._configuration_arg('innertube_key', [''],  │                        
                    │        ie_key=YoutubeIE.ie_key(), casesense=True)[0]                      │                        
                    │    602 │   │   │   │      or api_key or self._extract_api_key(default_cli │                        
                    │ ❱  603 │   │   return self._download_json(                                │                        
                    │    604 │   │   │   f'https://{self._select_api_hostname(api_hostname,     │                        
                    │        default_client)}/youtubei/v1/{ep}',                                │                        
                    │    605 │   │   │   video_id=video_id, fatal=fatal, note=note, errnote=err │                        
                    │    606 │   │   │   data=json.dumps(data).encode('utf8'), headers=real_hea │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py:107 │                        
                    │ 2 in download_content                                                     │                        
                    │                                                                           │                        
                    │   1069 │   │   │   if parser is None:                                     │                        
                    │   1070 │   │   │   │   kwargs.pop('transform_source')                     │                        
                    │   1071 │   │   │   # The method is fetched by name so subclasses can over │                        
                    │        _download_..._handle                                               │                        
                    │ ❱ 1072 │   │   │   res = getattr(self, download_handle.__name__)(url_or_r │                        
                    │        **kwargs)                                                          │                        
                    │   1073 │   │   │   return res if res is False else res[0]                 │                        
                    │   1074 │   │                                                              │                        
                    │   1075 │   │   def impersonate(func, name, return_value):                 │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py:103 │                        
                    │ 6 in download_handle                                                      │                        
                    │                                                                           │                        
                    │   1033 │   │                                                              │                        
                    │   1034 │   │   def download_handle(self, url_or_request, video_id, note=n │                        
                    │        transform_source=None,                                             │                        
                    │   1035 │   │   │   │   │   │   │   fatal=True, encoding=None, data=None,  │                        
                    │        expected_status=None):                                             │                        
                    │ ❱ 1036 │   │   │   res = self._download_webpage_handle(                   │                        
                    │   1037 │   │   │   │   url_or_request, video_id, note=note, errnote=errno │                        
                    │        encoding=encoding,                                                 │                        
                    │   1038 │   │   │   │   data=data, headers=headers, query=query,           │                        
                    │        expected_status=expected_status)                                   │                        
                    │   1039 │   │   │   if res is False:                                       │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py:906 │                        
                    │ in _download_webpage_handle                                               │                        
                    │                                                                           │                        
                    │    903 │   │   if isinstance(url_or_request, str):                        │                        
                    │    904 │   │   │   url_or_request = url_or_request.partition('#')[0]      │                        
                    │    905 │   │                                                              │                        
                    │ ❱  906 │   │   urlh = self._request_webpage(url_or_request, video_id, not │                        
                    │        data=data, headers=headers, query=query, expected_status=expected_ │                        
                    │    907 │   │   if urlh is False:                                          │                        
                    │    908 │   │   │   assert not fatal                                       │                        
                    │    909 │   │   │   return False                                           │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/extractor/common.py:863 │                        
                    │ in _request_webpage                                                       │                        
                    │                                                                           │                        
                    │    860 │   │   │                                                          │                        
                    │    861 │   │   │   errmsg = f'{errnote}: {error_to_compat_str(err)}'      │                        
                    │    862 │   │   │   if fatal:                                              │                        
                    │ ❱  863 │   │   │   │   raise ExtractorError(errmsg, cause=err)            │                        
                    │    864 │   │   │   else:                                                  │                        
                    │    865 │   │   │   │   self.report_warning(errmsg)                        │                        
                    │    866 │   │   │   │   return False                                       │                        
                    ╰───────────────────────────────────────────────────────────────────────────╯                        
                    ExtractorError: [youtube] OPKTk5vUtDY: Unable to download API page:                                  
                    <urllib3.connection.HTTPSConnection object at 0x2a598b090>: Failed to resolve                        
                    'music.youtube.com' ([Errno 8] nodename nor servname provided, or not known)                         
                    (caused by TransportError("<urllib3.connection.HTTPSConnection object at                             
                    0x2a598b090>: Failed to resolve 'music.youtube.com' ([Errno 8] nodename nor                          
                    servname provided, or not known)"))                                                                  

                    During handling of the above exception, another exception occurred:                                  

                    ╭──────────────────── Traceback (most recent call last) ────────────────────╮                        
                    │ /opt/homebrew/lib/python3.11/site-packages/spotdl/providers/audio/base.py │                        
                    │ :369 in get_download_metadata                                             │                        
                    │                                                                           │                        
                    │   366 │   │   """                                                         │                        
                    │   367 │   │                                                               │                        
                    │   368 │   │   try:                                                        │                        
                    │ ❱ 369 │   │   │   data = self.audio_handler.extract_info(url, download=do │                        
                    │   370 │   │   │                                                           │                        
                    │   371 │   │   │   if data:                                                │                        
                    │   372 │   │   │   │   return data                                         │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:1576 in    │                        
                    │ extract_info                                                              │                        
                    │                                                                           │                        
                    │   1573 │   │   │   │   if self.params.get('break_on_existing', False):    │                        
                    │   1574 │   │   │   │   │   raise ExistingVideoReached()                   │                        
                    │   1575 │   │   │   │   break                                              │                        
                    │ ❱ 1576 │   │   │   return self.__extract_info(url, self.get_info_extracto │                        
                    │        extra_info, process)                                               │                        
                    │   1577 │   │   else:                                                      │                        
                    │   1578 │   │   │   extractors_restricted = self.params.get('allowed_extra │                        
                    │        ['default'])                                                       │                        
                    │   1579 │   │   │   self.report_error(f'No suitable extractor{format_field │                        
                    │        (%s)")} found for URL {url}',                                      │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:1605 in    │                        
                    │ wrapper                                                                   │                        
                    │                                                                           │                        
                    │   1602 │   │   │   │   │   msg += '\nYou might want to use a VPN or a pro │                        
                    │        --proxy) to workaround.'                                           │                        
                    │   1603 │   │   │   │   │   self.report_error(msg)                         │                        
                    │   1604 │   │   │   │   except ExtractorError as e:  # An error we somewha │                        
                    │ ❱ 1605 │   │   │   │   │   self.report_error(str(e), e.format_traceback() │                        
                    │   1606 │   │   │   │   except Exception as e:                             │                        
                    │   1607 │   │   │   │   │   if self.params.get('ignoreerrors'):            │                        
                    │   1608 │   │   │   │   │   │   self.report_error(str(e),                  │                        
                    │        tb=encode_compat_str(traceback.format_exc()))                      │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:1054 in    │                        
                    │ report_error                                                              │                        
                    │                                                                           │                        
                    │   1051 │   │   Do the same as trouble, but prefixes the message with 'ERR │                        
                    │   1052 │   │   in red if stderr is a tty file.                            │                        
                    │   1053 │   │   '''                                                        │                        
                    │ ❱ 1054 │   │   self.trouble(f'{self._format_err("ERROR:", self.Styles.ERR │                        
                    │        *args, **kwargs)                                                   │                        
                    │   1055 │                                                                  │                        
                    │   1056 │   def write_debug(self, message, only_once=False):               │                        
                    │   1057 │   │   '''Log debug message or Print message to stderr'''         │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:973 in     │                        
                    │ trouble                                                                   │                        
                    │                                                                           │                        
                    │    970 │   │   @param is_error    Whether to raise error according to ign │                        
                    │    971 │   │   """                                                        │                        
                    │    972 │   │   if message is not None:                                    │                        
                    │ ❱  973 │   │   │   self.to_stderr(message)                                │                        
                    │    974 │   │   if self.params.get('verbose'):                             │                        
                    │    975 │   │   │   if tb is None:                                         │                        
                    │    976 │   │   │   │   if sys.exc_info()[0]:  # if .trouble has been call │                        
                    │        block                                                              │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/yt_dlp/YoutubeDL.py:915 in     │                        
                    │ to_stderr                                                                 │                        
                    │                                                                           │                        
                    │    912 │   │   """Print message to stderr"""                              │                        
                    │    913 │   │   assert isinstance(message, str)                            │                        
                    │    914 │   │   if self.params.get('logger'):                              │                        
                    │ ❱  915 │   │   │   self.params['logger'].error(message)                   │                        
                    │    916 │   │   else:                                                      │                        
                    │    917 │   │   │   self._write_string(f'{self._bidi_workaround(message)}\ │                        
                    │        self._out_files.error, only_once=only_once)                        │                        
                    │    918                                                                    │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/spotdl/providers/audio/base.py │                        
                    │ :57 in error                                                              │                        
                    │                                                                           │                        
                    │    54 │   │   YTDL uses this to print errors.                             │                        
                    │    55 │   │   """                                                         │                        
                    │    56 │   │                                                               │                        
                    │ ❱  57 │   │   raise AudioProviderError(msg)                               │                        
                    │    58                                                                     │                        
                    │    59                                                                     │                        
                    │    60 ISRC_REGEX = re.compile(r"^[A-Z]{2}-?\w{3}-?\d{2}-?\d{5}$")         │                        
                    ╰───────────────────────────────────────────────────────────────────────────╯                        
                    AudioProviderError: [0;31mERROR:[0m [youtube] OPKTk5vUtDY: Unable to download                        
                    API page: <urllib3.connection.HTTPSConnection object at 0x2a598b090>: Failed                         
                    to resolve 'music.youtube.com' ([Errno 8] nodename nor servname provided, or                         
                    not known) (caused by TransportError("<urllib3.connection.HTTPSConnection                            
                    object at 0x2a598b090>: Failed to resolve 'music.youtube.com' ([Errno 8]                             
                    nodename nor servname provided, or not known)"))                                                     

                    The above exception was the direct cause of the following exception:                                 

                    ╭──────────────────── Traceback (most recent call last) ────────────────────╮                        
                    │ /opt/homebrew/lib/python3.11/site-packages/spotdl/download/downloader.py: │                        
                    │ 646 in search_and_download                                                │                        
                    │                                                                           │                        
                    │   643 │   │   │   │   display_progress_tracker.yt_dlp_progress_hook       │                        
                    │   644 │   │   │   )                                                       │                        
                    │   645 │   │   │                                                           │                        
                    │ ❱ 646 │   │   │   download_info = audio_downloader.get_download_metadata( │                        
                    │   647 │   │   │   │   download_url, download=True                         │                        
                    │   648 │   │   │   )                                                       │                        
                    │   649                                                                     │                        
                    │                                                                           │                        
                    │ /opt/homebrew/lib/python3.11/site-packages/spotdl/providers/audio/base.py │                        
                    │ :375 in get_download_metadata                                             │                        
                    │                                                                           │                        
                    │   372 │   │   │   │   return data                                         │                        
                    │   373 │   │   except Exception as exception:                              │                        
                    │   374 │   │   │   logger.debug(exception)                                 │                        
                    │ ❱ 375 │   │   │   raise AudioProviderError(f"YT-DLP download error - {url │                        
                    │   376 │   │                                                               │                        
                    │   377 │   │   raise AudioProviderError(f"No metadata found for the provid │                        
                    │   378                                                                     │                        
                    ╰───────────────────────────────────────────────────────────────────────────╯                        
                    AudioProviderError: YT-DLP download error -                                                          
                    https://music.youtube.com/watch?v=OPKTk5vUtDY         
Tomiwa-Ot commented 8 months ago

@xnetcat here you go

tomiwa@grephq ~/D/h/Prod&Serv&Cust> spotdl download "https://open.spotify.com/track/4VQ46sRJtb6osiD3xfYGHx?si=c9f290df981645cb" --log-level DEBUG
[16:38:40] DEBUG    MainThread - Downloader settings:          downloader.py:130
                    {'audio_providers': ['youtube-music'],                      
                    'lyrics_providers': ['genius', 'azlyrics',                  
                    'musixmatch'], 'playlist_numbering':                        
                    False, 'scan_for_songs': False, 'm3u':                      
                    None, 'output': '{artists} -                                
                    {title}.{output-ext}', 'overwrite':                         
                    'skip', 'search_query': None, 'ffmpeg':                     
                    'ffmpeg', 'bitrate': None, 'ffmpeg_args':                   
                    None, 'format': 'mp3', 'save_file': None,                   
                    'filter_results': True, 'threads': 4,                       
                    'cookie_file': None, 'restrict': None,                      
                    'print_errors': False, 'sponsor_block':                     
                    False, 'preload': False, 'archive': None,                   
                    'load_config': True, 'log_level': 'DEBUG',                  
                    'simple_tui': False, 'fetch_albums':                        
                    False, 'id3_separator': '/', 'ytm_data':                    
                    False, 'add_unavailable': False,                            
                    'generate_lrc': False,                                      
                    'force_update_metadata': False,                             
                    'only_verified_results': False,                             
                    'sync_without_deleting': False,                             
                    'max_filename_length': None,                                
                    'yt_dlp_args': None, 'detect_formats':                      
                    None, 'save_errors': None,                                  
                    'ignore_albums': None, 'proxy': None,                       
                    'skip_explicit': False, 'log_format':                       
                    None, 'redownload': False}                                  
[16:38:40] DEBUG    MainThread - FFmpeg path: ffmpeg           downloader.py:148
[16:38:40] DEBUG    MainThread - Found 0 known songs           downloader.py:183
[16:38:42] DEBUG    MainThread - Archive: 0 urls               downloader.py:230
[16:38:42] DEBUG    MainThread - Downloader initialized        downloader.py:232
[16:38:42] INFO     MainThread - Processing query:                 search.py:132
                    https://open.spotify.com/track/4VQ46sRJtb6osiD              
                    3xfYGHx?si=c9f290df981645cb                                 
[16:38:45] DEBUG    MainThread - Found 1 songs in 0 lists          search.py:322
[16:38:45] DEBUG    MainThread - Downloading 1 songs           downloader.py:279
[16:38:53] DEBUG    asyncio_0 - Found lyrics for Kodak Black - downloader.py:399
                    Could of Been Different on Genius                           
[16:38:53] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Searching   base.py:167
                    for kodak black - could of been different                   
[16:38:56] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Found 1     base.py:180
                    results for ISRC USAT21813004                               
[16:38:56] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Filtered to base.py:192
                    1 ISRC results                                              
[16:38:56] DEBUG    asyncio_0 - [4VQ46sRJtb6osiD3xfYGHx] Best ISRC   base.py:201
                    result is                                                   
                    https://music.youtube.com/watch?v=ad30z1t_t30               
                    with score 100.0                                            
[16:38:57] DEBUG    asyncio_0 - Downloading Kodak Black -      downloader.py:639
                    Could of Been Different using                               
                    https://music.youtube.com/watch?v=ad30z1t_                  
                    t30                                                         
[16:39:42] DEBUG    asyncio_0 - ERROR: [youtube] ad30z1t_t30: Unable base.py:374
                    to download API page: <urlopen error Tunnel                 
                    connection failed: 407 Proxy Authentication                 
                    Required> (caused by ProxyError('<urlopen error             
                    Tunnel connection failed: 407 Proxy                         
                    Authentication Required>')); please report this             
                    issue on                                                    
                    https://github.com/yt-dlp/yt-dlp/issues?q= ,                
                    filling out the appropriate issue template.                 
                    Confirm you are on the latest version using                 
                    yt-dlp -U                                                   

[16:39:43] ERROR    asyncio_0 - Traceback (most recent   progress_handler.py:358
                    call last):                                                 
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 1348, in do_open                                  
                        h.request(req.get_method(),                             
                    req.selector, req.data, headers,                            
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1282, in request                                     
                        self._send_request(method, url,                         
                    body, headers, encode_chunked)                              
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1328, in _send_request                               
                        self.endheaders(body,                                   
                    encode_chunked=encode_chunked)                              
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1277, in endheaders                                  
                        self._send_output(message_body,                         
                    encode_chunked=encode_chunked)                              
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1037, in _send_output                                
                        self.send(msg)                                          
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 975, in send                                         
                        self.connect()                                          
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 1447, in connect                                     
                        super().connect()                                       
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 951, in connect                                      
                        self._tunnel()                                          
                      File                                                      
                    "/usr/lib/python3.11/http/client.py"                        
                    , line 924, in _tunnel                                      
                        raise OSError(f"Tunnel                                  
                    connection failed: {code}                                   
                    {message.strip()}")                                         
                    OSError: Tunnel connection failed:                          
                    407 Proxy Authentication Required                           

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_urllib.py", line 396,                        
                    in _send                                                    
                        res = opener.open(urllib_req,                           
                    timeout=float(request.extensions.get                        
                    ('timeout') or self.timeout))                               
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 519, in open                                      
                        response = self._open(req, data)                        
                                   ^^^^^^^^^^^^^^^^^^^^^                        
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 536, in _open                                     
                        result =                                                
                    self._call_chain(self.handle_open,                          
                    protocol, protocol +                                        
                                 ^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                            
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 496, in _call_chain                               
                        result = func(*args)                                    
                                 ^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_urllib.py", line 101,                        
                    in https_open                                               
                        return self.do_open(                                    
                               ^^^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3.11/urllib/request.                        
                    py", line 1351, in do_open                                  
                        raise URLError(err)                                     
                    urllib.error.URLError: <urlopen                             
                    error Tunnel connection failed: 407                         
                    Proxy Authentication Required>                              

                    The above exception was the direct                          
                    cause of the following exception:                           

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 847,                          
                    in _request_webpage                                         
                        return                                                  
                    self._downloader.urlopen(self._creat                        
                    e_request(url_or_request, data,                             
                    headers, query))                                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^                                     
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 4052, in                             
                    urlopen                                                     
                        return                                                  
                    self._request_director.send(req)                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^                                                     
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/common.py", line 114,                         
                    in send                                                     
                        response = handler.send(request)                        
                                   ^^^^^^^^^^^^^^^^^^^^^                        
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_helper.py", line 204,                        
                    in wrapper                                                  
                        return func(self, *args,                                
                    **kwargs)                                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^                                                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/common.py", line 325,                         
                    in send                                                     
                        return self._send(request)                              
                               ^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/networking/_urllib.py", line 408,                        
                    in _send                                                    
                        raise ProxyError(cause=e) from e                        
                    yt_dlp.networking.exceptions.ProxyEr                        
                    ror: <urlopen error Tunnel                                  
                    connection failed: 407 Proxy                                
                    Authentication Required>                                    

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1567, in                             
                    wrapper                                                     
                        return func(self, *args,                                
                    **kwargs)                                                   
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^                                                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1702, in                             
                    __extract_info                                              
                        ie_result = ie.extract(url)                             
                                    ^^^^^^^^^^^^^^^                             
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 715,                          
                    in extract                                                  
                        ie_result =                                             
                    self._real_extract(url)                                     
                                    ^^^^^^^^^^^^^^^^^^^^                        
                    ^^^                                                         
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 4073,                        
                    in _real_extract                                            
                        webpage, master_ytcfg,                                  
                    player_responses, player_url =                              
                    self._download_player_responses(url,                        
                    smuggled_data, video_id,                                    
                    webpage_url)                                                

                                          ^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 4037,                        
                    in _download_player_responses                               
                        player_responses, player_url =                          
                    self._extract_player_responses(                             
                                                       ^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 3728,                        
                    in _extract_player_responses                                
                        raise last_error                                        
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 3693,                        
                    in _extract_player_responses                                
                        pr = initial_pr if client ==                            
                    'web' and initial_pr else                                   
                    self._extract_player_response(                              

                                           ^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^                                           
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 3613,                        
                    in _extract_player_response                                 
                        return self._extract_response(                          
                               ^^^^^^^^^^^^^^^^^^^^^^^                          
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 966,                         
                    in _extract_response                                        
                        next(main_retries)                                      
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/utils/_utils.py", line 5114, in                          
                    __iter__                                                    
                        self.error_callback(self.error,                         
                    self.attempt, self.retries)                                 
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 3762,                         
                    in _error_or_warning                                        
                        RetryManager.report_retry(                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/utils/_utils.py", line 5122, in                          
                    report_retry                                                
                        raise e                                                 
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 955,                         
                    in _extract_response                                        
                        response = self._call_api(                              
                                   ^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/youtube.py", line 603,                         
                    in _call_api                                                
                        return self._download_json(                             
                               ^^^^^^^^^^^^^^^^^^^^                             
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 1069,                         
                    in download_content                                         
                        res = getattr(self,                                     
                    download_handle.__name__)(url_or_req                        
                    uest, video_id, **kwargs)                                   
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^                                               
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 1033,                         
                    in download_handle                                          
                        res =                                                   
                    self._download_webpage_handle(                              
                              ^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^                                                        
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 903,                          
                    in _download_webpage_handle                                 
                        urlh =                                                  
                    self._request_webpage(url_or_request                        
                    , video_id, note, errnote, fatal,                           
                    data=data, headers=headers,                                 
                    query=query,                                                
                    expected_status=expected_status)                            
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^                                                  
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/extractor/common.py", line 860,                          
                    in _request_webpage                                         
                        raise ExtractorError(errmsg,                            
                    cause=err)                                                  
                    yt_dlp.utils.ExtractorError:                                
                    ad30z1t_t30: Unable to download API                         
                    page: <urlopen error Tunnel                                 
                    connection failed: 407 Proxy                                
                    Authentication Required> (caused by                         
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/providers/audio/base.py"                        
                    , line 369, in get_download_metadata                        
                        data =                                                  
                    self.audio_handler.extract_info(url,                        
                    download=download)                                          
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                              
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1556, in                             
                    extract_info                                                
                        return self.__extract_info(url,                         
                    self.get_info_extractor(key),                               
                    download, extra_info, process)                              
                               ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^^                                    
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1585, in                             
                    wrapper                                                     
                        self.report_error(str(e),                               
                    e.format_traceback())                                       
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 1045, in                             
                    report_error                                                
                        self.trouble(f'{self._format_err                        
                    ("ERROR:", self.Styles.ERROR)}                              
                    {message}', *args, **kwargs)                                
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 964, in                              
                    trouble                                                     
                        self.to_stderr(message)                                 
                      File                                                      
                    "/usr/lib/python3/dist-packages/yt_d                        
                    lp/YoutubeDL.py", line 906, in                              
                    to_stderr                                                   
                        self.params['logger'].error(mess                        
                    age)                                                        
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/providers/audio/base.py"                        
                    , line 57, in error                                         
                        raise AudioProviderError(msg)                           
                    spotdl.providers.audio.base.AudioPro                        
                    viderError: ERROR:  ad30z1t_t30:                            
                    Unable to download API page:                                
                    <urlopen error Tunnel connection                            
                    failed: 407 Proxy Authentication                            
                    Required> (caused by                                        
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    The above exception was the direct                          
                    cause of the following exception:                           

                    Traceback (most recent call last):                          
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/download/downloader.py",                        
                     line 646, in search_and_download                           
                        download_info =                                         
                    audio_downloader.get_download_metada                        
                    ta(                                                         
                                        ^^^^^^^^^^^^^^^^                        
                    ^^^^^^^^^^^^^^^^^^^^^^^                                     
                      File                                                      
                    "/usr/local/lib/python3.11/dist-pack                        
                    ages/spotdl/providers/audio/base.py"                        
                    , line 375, in get_download_metadata                        
                        raise                                                   
                    AudioProviderError(f"YT-DLP download                        
                    error - {url}") from exception                              
                    spotdl.providers.audio.base.AudioPro                        
                    viderError: YT-DLP download error -                         
                    https://music.youtube.com/watch?v=ad                        
                    30z1t_t30                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:1348 in do_open            │                        
                    │                                  │                        
                    │   1345 │   │                     │                        
                    │   1346 │   │   try:              │                        
                    │   1347 │   │   │   try:          │                        
                    │ ❱ 1348 │   │   │   │   h.request │                        
                    │   1349 │   │   │   │   │   │     │                        
                    │   1350 │   │   │   except OSErro │                        
                    │   1351 │   │   │   │   raise URL │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1282 in request               │                        
                    │                                  │                        
                    │   1279 │   def request(self, met │                        
                    │   1280 │   │   │   │   encode_ch │                        
                    │   1281 │   │   """Send a complet │                        
                    │ ❱ 1282 │   │   self._send_reques │                        
                    │   1283 │                         │                        
                    │   1284 │   def _send_request(sel │                        
                    │   1285 │   │   # Honor explicitl │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1328 in _send_request         │                        
                    │                                  │                        
                    │   1325 │   │   │   # RFC 2616 Se │                        
                    │   1326 │   │   │   # default cha │                        
                    │   1327 │   │   │   body = _encod │                        
                    │ ❱ 1328 │   │   self.endheaders(b │                        
                    │   1329 │                         │                        
                    │   1330 │   def getresponse(self) │                        
                    │   1331 │   │   """Get the respon │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1277 in endheaders            │                        
                    │                                  │                        
                    │   1274 │   │   │   self.__state  │                        
                    │   1275 │   │   else:             │                        
                    │   1276 │   │   │   raise CannotS │                        
                    │ ❱ 1277 │   │   self._send_output │                        
                    │   1278 │                         │                        
                    │   1279 │   def request(self, met │                        
                    │   1280 │   │   │   │   encode_ch │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1037 in _send_output          │                        
                    │                                  │                        
                    │   1034 │   │   self._buffer.exte │                        
                    │   1035 │   │   msg = b"\r\n".joi │                        
                    │   1036 │   │   del self._buffer[ │                        
                    │ ❱ 1037 │   │   self.send(msg)    │                        
                    │   1038 │   │                     │                        
                    │   1039 │   │   if message_body i │                        
                    │   1040                           │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:975 in send                   │                        
                    │                                  │                        
                    │    972 │   │                     │                        
                    │    973 │   │   if self.sock is N │                        
                    │    974 │   │   │   if self.auto_ │                        
                    │ ❱  975 │   │   │   │   self.conn │                        
                    │    976 │   │   │   else:         │                        
                    │    977 │   │   │   │   raise Not │                        
                    │    978                           │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:1447 in connect               │                        
                    │                                  │                        
                    │   1444 │   │   def connect(self) │                        
                    │   1445 │   │   │   "Connect to a │                        
                    │   1446 │   │   │                 │                        
                    │ ❱ 1447 │   │   │   super().conne │                        
                    │   1448 │   │   │                 │                        
                    │   1449 │   │   │   if self._tunn │                        
                    │   1450 │   │   │   │   server_ho │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:951 in connect                │                        
                    │                                  │                        
                    │    948 │   │   │   │   raise     │                        
                    │    949 │   │                     │                        
                    │    950 │   │   if self._tunnel_h │                        
                    │ ❱  951 │   │   │   self._tunnel( │                        
                    │    952 │                         │                        
                    │    953 │   def close(self):      │                        
                    │    954 │   │   """Close the conn │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/http/client. │                        
                    │ py:924 in _tunnel                │                        
                    │                                  │                        
                    │    921 │   │                     │                        
                    │    922 │   │   if code != http.H │                        
                    │    923 │   │   │   self.close()  │                        
                    │ ❱  924 │   │   │   raise OSError │                        
                    │    925 │   │   while True:       │                        
                    │    926 │   │   │   line = respon │                        
                    │    927 │   │   │   if len(line)  │                        
                    ╰──────────────────────────────────╯                        
                    OSError: Tunnel connection failed:                          
                    407 Proxy Authentication Required                           

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_urllib.py:396  │                        
                    │ in _send                         │                        
                    │                                  │                        
                    │   393 │   │   │   cookiejar=requ │                        
                    │   394 │   │   )                  │                        
                    │   395 │   │   try:               │                        
                    │ ❱ 396 │   │   │   res = opener.o │                        
                    │       timeout=float(request.exte │                        
                    │   397 │   │   except urllib.erro │                        
                    │   398 │   │   │   if isinstance( │                        
                    │   399 │   │   │   │   # Prevent  │                        
                    │       destroyed.                 │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:519 in open                │                        
                    │                                  │                        
                    │    516 │   │   │   req = meth(re │                        
                    │    517 │   │                     │                        
                    │    518 │   │   sys.audit('urllib │                        
                    │        req.get_method())         │                        
                    │ ❱  519 │   │   response = self._ │                        
                    │    520 │   │                     │                        
                    │    521 │   │   # post-process re │                        
                    │    522 │   │   meth_name = proto │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:536 in _open               │                        
                    │                                  │                        
                    │    533 │   │   │   return result │                        
                    │    534 │   │                     │                        
                    │    535 │   │   protocol = req.ty │                        
                    │ ❱  536 │   │   result = self._ca │                        
                    │    537 │   │   │   │   │   │   │ │                        
                    │    538 │   │   if result:        │                        
                    │    539 │   │   │   return result │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:496 in _call_chain         │                        
                    │                                  │                        
                    │    493 │   │   handlers = chain. │                        
                    │    494 │   │   for handler in ha │                        
                    │    495 │   │   │   func = getatt │                        
                    │ ❱  496 │   │   │   result = func │                        
                    │    497 │   │   │   if result is  │                        
                    │    498 │   │   │   │   return re │                        
                    │    499                           │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_urllib.py:101  │                        
                    │ in https_open                    │                        
                    │                                  │                        
                    │    98 │                          │                        
                    │    99 │   def https_open(self, r │                        
                    │   100 │   │   conn_class = self. │                        
                    │ ❱ 101 │   │   return self.do_ope │                        
                    │   102 │   │   │   functools.part │                        
                    │   103 │   │   │   │   _create_ht │                        
                    │   104 │   │   │   req, context=s │                        
                    │                                  │                        
                    │ /usr/lib/python3.11/urllib/reque │                        
                    │ st.py:1351 in do_open            │                        
                    │                                  │                        
                    │   1348 │   │   │   │   h.request │                        
                    │   1349 │   │   │   │   │   │     │                        
                    │   1350 │   │   │   except OSErro │                        
                    │ ❱ 1351 │   │   │   │   raise URL │                        
                    │   1352 │   │   │   r = h.getresp │                        
                    │   1353 │   │   except:           │                        
                    │   1354 │   │   │   h.close()     │                        
                    ╰──────────────────────────────────╯                        
                    URLError: <urlopen error Tunnel                             
                    connection failed: 407 Proxy                                
                    Authentication Required>                                    

                    The above exception was the direct                          
                    cause of the following exception:                           

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:847 in │                        
                    │ _request_webpage                 │                        
                    │                                  │                        
                    │    844 │   │   │   headers.setde │                        
                    │    845 │   │                     │                        
                    │    846 │   │   try:              │                        
                    │ ❱  847 │   │   │   return self._ │                        
                    │        headers, query))          │                        
                    │    848 │   │   except network_ex │                        
                    │    849 │   │   │   if isinstance │                        
                    │    850 │   │   │   │   if self._ │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:4052 in       │                        
                    │ urlopen                          │                        
                    │                                  │                        
                    │   4049 │   │   clean_headers(req │                        
                    │   4050 │   │                     │                        
                    │   4051 │   │   try:              │                        
                    │ ❱ 4052 │   │   │   return self._ │                        
                    │   4053 │   │   except NoSupporti │                        
                    │   4054 │   │   │   for ue in e.u │                        
                    │   4055 │   │   │   │   if not (u │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/common.py:114   │                        
                    │ in send                          │                        
                    │                                  │                        
                    │   111 │   │   │                  │                        
                    │   112 │   │   │   self._print_ve │                        
                    │   113 │   │   │   try:           │                        
                    │ ❱ 114 │   │   │   │   response = │                        
                    │   115 │   │   │   except Request │                        
                    │   116 │   │   │   │   raise      │                        
                    │   117 │   │   │   except Excepti │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_helper.py:204  │                        
                    │ in wrapper                       │                        
                    │                                  │                        
                    │   201 │   @functools.wraps(func) │                        
                    │   202 │   def wrapper(self, *arg │                        
                    │   203 │   │   try:               │                        
                    │ ❱ 204 │   │   │   return func(se │                        
                    │   205 │   │   except Unsupported │                        
                    │   206 │   │   │   if e.handler i │                        
                    │   207 │   │   │   │   e.handler  │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/common.py:325   │                        
                    │ in send                          │                        
                    │                                  │                        
                    │   322 │   def send(self, request │                        
                    │   323 │   │   if not isinstance( │                        
                    │   324 │   │   │   raise TypeErro │                        
                    │ ❱ 325 │   │   return self._send( │                        
                    │   326 │                          │                        
                    │   327 │   @abc.abstractmethod    │                        
                    │   328 │   def _send(self, reques │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/networking/_urllib.py:408  │                        
                    │ in _send                         │                        
                    │                                  │                        
                    │   405 │   │   │                  │                        
                    │   406 │   │   │   # proxy errors │                        
                    │   407 │   │   │   if 'tunnel con │                        
                    │       SocksProxyError):          │                        
                    │ ❱ 408 │   │   │   │   raise Prox │                        
                    │   409 │   │   │                  │                        
                    │   410 │   │   │   handle_respons │                        
                    │   411 │   │   │   raise Transpor │                        
                    ╰──────────────────────────────────╯                        
                    ProxyError: <urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>                                    

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1567 in       │                        
                    │ wrapper                          │                        
                    │                                  │                        
                    │   1564 │   │   def wrapper(self, │                        
                    │   1565 │   │   │   while True:   │                        
                    │   1566 │   │   │   │   try:      │                        
                    │ ❱ 1567 │   │   │   │   │   retur │                        
                    │   1568 │   │   │   │   except (D │                        
                    │   1569 │   │   │   │   │   raise │                        
                    │   1570 │   │   │   │   except Re │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1702 in       │                        
                    │ __extract_info                   │                        
                    │                                  │                        
                    │   1699 │   │   self._apply_heade │                        
                    │   1700 │   │                     │                        
                    │   1701 │   │   try:              │                        
                    │ ❱ 1702 │   │   │   ie_result = i │                        
                    │   1703 │   │   except UserNotLiv │                        
                    │   1704 │   │   │   if process:   │                        
                    │   1705 │   │   │   │   if self.p │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:715 in │                        
                    │ extract                          │                        
                    │                                  │                        
                    │    712 │   │   │   │   │   self. │                        
                    │    713 │   │   │   │   │   self. │                        
                    │    714 │   │   │   │   │   │   u │                        
                    │        20)))                     │                        
                    │ ❱  715 │   │   │   │   │   ie_re │                        
                    │    716 │   │   │   │   │   if ie │                        
                    │    717 │   │   │   │   │   │   r │                        
                    │    718 │   │   │   │   │   if se │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:4073  │                        
                    │ in _real_extract                 │                        
                    │                                  │                        
                    │   4070 │   │   base_url = self.h │                        
                    │   4071 │   │   webpage_url = bas │                        
                    │   4072 │   │                     │                        
                    │ ❱ 4073 │   │   webpage, master_y │                        
                    │        self._download_player_res │                        
                    │   4074 │   │                     │                        
                    │   4075 │   │   playability_statu │                        
                    │   4076 │   │   │   player_respon │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:4037  │                        
                    │ in _download_player_responses    │                        
                    │                                  │                        
                    │   4034 │   │                     │                        
                    │   4035 │   │   master_ytcfg = se │                        
                    │        self._get_default_ytcfg() │                        
                    │   4036 │   │                     │                        
                    │ ❱ 4037 │   │   player_responses, │                        
                    │   4038 │   │   │   self._get_req │                        
                    │   4039 │   │   │   video_id, web │                        
                    │   4040                           │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:3728  │                        
                    │ in _extract_player_responses     │                        
                    │                                  │                        
                    │   3725 │   │                     │                        
                    │   3726 │   │   if last_error:    │                        
                    │   3727 │   │   │   if not len(pr │                        
                    │ ❱ 3728 │   │   │   │   raise las │                        
                    │   3729 │   │   │   self.report_w │                        
                    │   3730 │   │   return prs, playe │                        
                    │   3731                           │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:3693  │                        
                    │ in _extract_player_responses     │                        
                    │                                  │                        
                    │   3690 │   │   │   │   tried_ifr │                        
                    │   3691 │   │   │                 │                        
                    │   3692 │   │   │   try:          │                        
                    │ ❱ 3693 │   │   │   │   pr = init │                        
                    │        self._extract_player_resp │                        
                    │   3694 │   │   │   │   │   clien │                        
                    │        player_url if require_js_ │                        
                    │   3695 │   │   │   except Extrac │                        
                    │   3696 │   │   │   │   if last_e │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:3613  │                        
                    │ in _extract_player_response      │                        
                    │                                  │                        
                    │   3610 │   │   │   yt_query['par │                        
                    │   3611 │   │                     │                        
                    │   3612 │   │   yt_query.update(s │                        
                    │ ❱ 3613 │   │   return self._extr │                        
                    │   3614 │   │   │   item_id=video │                        
                    │   3615 │   │   │   ytcfg=player_ │                        
                    │   3616 │   │   │   default_clien │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:966   │                        
                    │ in _extract_response             │                        
                    │                                  │                        
                    │    963 │   │   │   │   │   retur │                        
                    │    964 │   │   │   │   elif not  │                        
                    │    965 │   │   │   │   │   main_ │                        
                    │ ❱  966 │   │   │   │   │   next( │                        
                    │    967 │   │   │   │   │   conti │                        
                    │    968 │   │   │   │             │                        
                    │    969 │   │   │   │   first_byt │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/utils/_utils.py:5114 in    │                        
                    │ __iter__                         │                        
                    │                                  │                        
                    │   5111 │   │   │   self.attempt  │                        
                    │   5112 │   │   │   yield self    │                        
                    │   5113 │   │   │   if self.error │                        
                    │ ❱ 5114 │   │   │   │   self.erro │                        
                    │   5115 │                         │                        
                    │   5116 │   @staticmethod         │                        
                    │   5117 │   def report_retry(e, c │                        
                    │        suffix=None):             │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:3762   │                        
                    │ in _error_or_warning             │                        
                    │                                  │                        
                    │   3759 │   │   return True       │                        
                    │   3760 │                         │                        
                    │   3761 │   def _error_or_warning │                        
                    │ ❱ 3762 │   │   RetryManager.repo │                        
                    │   3763 │   │   │   err, _count o │                        
                    │   3764 │   │   │   info=self.to_ │                        
                    │        self.report_warning,      │                        
                    │   3765 │   │   │   sleep_func=se │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/utils/_utils.py:5122 in    │                        
                    │ report_retry                     │                        
                    │                                  │                        
                    │   5119 │   │   if count > retrie │                        
                    │   5120 │   │   │   if error:     │                        
                    │   5121 │   │   │   │   return er │                        
                    │        else error(str(e))        │                        
                    │ ❱ 5122 │   │   │   raise e       │                        
                    │   5123 │   │                     │                        
                    │   5124 │   │   if not count:     │                        
                    │   5125 │   │   │   return warn(e │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:955   │                        
                    │ in _extract_response             │                        
                    │                                  │                        
                    │    952 │   │   # and its result  │                        
                    │    953 │   │   while True:       │                        
                    │    954 │   │   │   try:          │                        
                    │ ❱  955 │   │   │   │   response  │                        
                    │    956 │   │   │   │   │   ep=ep │                        
                    │    957 │   │   │   │   │   video │                        
                    │    958 │   │   │   │   │   conte │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/youtube.py:603   │                        
                    │ in _call_api                     │                        
                    │                                  │                        
                    │    600 │   │   │   real_headers. │                        
                    │    601 │   │   api_key = (self._ │                        
                    │        ie_key=YoutubeIE.ie_key() │                        
                    │    602 │   │   │   │      or api │                        
                    │ ❱  603 │   │   return self._down │                        
                    │    604 │   │   │   f'https://{se │                        
                    │        default_client)}/youtubei │                        
                    │    605 │   │   │   video_id=vide │                        
                    │    606 │   │   │   data=json.dum │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:1069   │                        
                    │ in download_content              │                        
                    │                                  │                        
                    │   1066 │   │   │   if parser is  │                        
                    │   1067 │   │   │   │   kwargs.po │                        
                    │   1068 │   │   │   # The method  │                        
                    │        _download_..._handle      │                        
                    │ ❱ 1069 │   │   │   res = getattr │                        
                    │        **kwargs)                 │                        
                    │   1070 │   │   │   return res if │                        
                    │   1071 │   │                     │                        
                    │   1072 │   │   def impersonate(f │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:1033   │                        
                    │ in download_handle               │                        
                    │                                  │                        
                    │   1030 │   │                     │                        
                    │   1031 │   │   def download_hand │                        
                    │        transform_source=None,    │                        
                    │   1032 │   │   │   │   │   │   │ │                        
                    │        expected_status=None):    │                        
                    │ ❱ 1033 │   │   │   res = self._d │                        
                    │   1034 │   │   │   │   url_or_re │                        
                    │        encoding=encoding,        │                        
                    │   1035 │   │   │   │   data=data │                        
                    │        expected_status=expected_ │                        
                    │   1036 │   │   │   if res is Fal │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:903 in │                        
                    │ _download_webpage_handle         │                        
                    │                                  │                        
                    │    900 │   │   if isinstance(url │                        
                    │    901 │   │   │   url_or_reques │                        
                    │    902 │   │                     │                        
                    │ ❱  903 │   │   urlh = self._requ │                        
                    │        data=data, headers=header │                        
                    │    904 │   │   if urlh is False: │                        
                    │    905 │   │   │   assert not fa │                        
                    │    906 │   │   │   return False  │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/extractor/common.py:860 in │                        
                    │ _request_webpage                 │                        
                    │                                  │                        
                    │    857 │   │   │                 │                        
                    │    858 │   │   │   errmsg = f'{e │                        
                    │    859 │   │   │   if fatal:     │                        
                    │ ❱  860 │   │   │   │   raise Ext │                        
                    │    861 │   │   │   else:         │                        
                    │    862 │   │   │   │   self.repo │                        
                    │    863 │   │   │   │   return Fa │                        
                    ╰──────────────────────────────────╯                        
                    ExtractorError: [youtube]                                   
                    ad30z1t_t30: Unable to download API                         
                    page: <urlopen error Tunnel                                 
                    connection failed: 407 Proxy                                
                    Authentication Required> (caused by                         
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    During handling of the above                                
                    exception, another exception                                
                    occurred:                                                   

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/providers/audio/b │                        
                    │ ase.py:369 in                    │                        
                    │ get_download_metadata            │                        
                    │                                  │                        
                    │   366 │   │   """                │                        
                    │   367 │   │                      │                        
                    │   368 │   │   try:               │                        
                    │ ❱ 369 │   │   │   data = self.au │                        
                    │   370 │   │   │                  │                        
                    │   371 │   │   │   if data:       │                        
                    │   372 │   │   │   │   return dat │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1556 in       │                        
                    │ extract_info                     │                        
                    │                                  │                        
                    │   1553 │   │   │   │   if self.p │                        
                    │   1554 │   │   │   │   │   raise │                        
                    │   1555 │   │   │   │   break     │                        
                    │ ❱ 1556 │   │   │   return self._ │                        
                    │        extra_info, process)      │                        
                    │   1557 │   │   else:             │                        
                    │   1558 │   │   │   extractors_re │                        
                    │        ['default'])              │                        
                    │   1559 │   │   │   self.report_e │                        
                    │        (%s)")} found for URL {ur │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1585 in       │                        
                    │ wrapper                          │                        
                    │                                  │                        
                    │   1582 │   │   │   │   │   msg + │                        
                    │        --proxy) to workaround.'  │                        
                    │   1583 │   │   │   │   │   self. │                        
                    │   1584 │   │   │   │   except Ex │                        
                    │ ❱ 1585 │   │   │   │   │   self. │                        
                    │   1586 │   │   │   │   except Ex │                        
                    │   1587 │   │   │   │   │   if se │                        
                    │   1588 │   │   │   │   │   │   s │                        
                    │        tb=encode_compat_str(trac │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:1045 in       │                        
                    │ report_error                     │                        
                    │                                  │                        
                    │   1042 │   │   Do the same as tr │                        
                    │   1043 │   │   in red if stderr  │                        
                    │   1044 │   │   '''               │                        
                    │ ❱ 1045 │   │   self.trouble(f'{s │                        
                    │        *args, **kwargs)          │                        
                    │   1046 │                         │                        
                    │   1047 │   def write_debug(self, │                        
                    │   1048 │   │   '''Log debug mess │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:964 in        │                        
                    │ trouble                          │                        
                    │                                  │                        
                    │    961 │   │   @param is_error   │                        
                    │    962 │   │   """               │                        
                    │    963 │   │   if message is not │                        
                    │ ❱  964 │   │   │   self.to_stder │                        
                    │    965 │   │   if self.params.ge │                        
                    │    966 │   │   │   if tb is None │                        
                    │    967 │   │   │   │   if sys.ex │                        
                    │        block                     │                        
                    │                                  │                        
                    │ /usr/lib/python3/dist-packages/y │                        
                    │ t_dlp/YoutubeDL.py:906 in        │                        
                    │ to_stderr                        │                        
                    │                                  │                        
                    │    903 │   │   """Print message  │                        
                    │    904 │   │   assert isinstance │                        
                    │    905 │   │   if self.params.ge │                        
                    │ ❱  906 │   │   │   self.params[' │                        
                    │    907 │   │   else:             │                        
                    │    908 │   │   │   self._write_s │                        
                    │        self._out_files.error, on │                        
                    │    909                           │                        
                    │                                  │                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/providers/audio/b │                        
                    │ ase.py:57 in error               │                        
                    │                                  │                        
                    │    54 │   │   YTDL uses this to  │                        
                    │    55 │   │   """                │                        
                    │    56 │   │                      │                        
                    │ ❱  57 │   │   raise AudioProvide │                        
                    │    58                            │                        
                    │    59                            │                        
                    │    60 ISRC_REGEX = re.compile(r" │                        
                    ╰──────────────────────────────────╯                        
                    AudioProviderError: ERROR: [youtube]                        
                    ad30z1t_t30: Unable to download API                         
                    page: <urlopen error Tunnel                                 
                    connection failed: 407 Proxy                                
                    Authentication Required> (caused by                         
                    ProxyError('<urlopen error Tunnel                           
                    connection failed: 407 Proxy                                
                    Authentication Required>')); please                         
                    report this issue on                                        
                    https://github.com/yt-dlp/yt-dlp/iss                        
                    ues?q= , filling out the appropriate                        
                    issue template. Confirm you are on                          
                    the latest version using  yt-dlp -U                         

                    The above exception was the direct                          
                    cause of the following exception:                           

                    ╭─ Traceback (most recent call las─╮                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/download/download │                        
                    │ er.py:646 in search_and_download │                        
                    │                                  │                        
                    │   643 │   │   │   │   display_pr │                        
                    │   644 │   │   │   )              │                        
                    │   645 │   │   │                  │                        
                    │ ❱ 646 │   │   │   download_info  │                        
                    │   647 │   │   │   │   download_u │                        
                    │   648 │   │   │   )              │                        
                    │   649                            │                        
                    │                                  │                        
                    │ /usr/local/lib/python3.11/dist-p │                        
                    │ ackages/spotdl/providers/audio/b │                        
                    │ ase.py:375 in                    │                        
                    │ get_download_metadata            │                        
                    │                                  │                        
                    │   372 │   │   │   │   return dat │                        
                    │   373 │   │   except Exception a │                        
                    │   374 │   │   │   logger.debug(e │                        
                    │ ❱ 375 │   │   │   raise AudioPro │                        
                    │   376 │   │                      │                        
                    │   377 │   │   raise AudioProvide │                        
                    │   378                            │                        
                    ╰──────────────────────────────────╯                        
                    AudioProviderError: YT-DLP download                         
                    error -                                                     
                    https://music.youtube.com/watch?v=ad                        
                    30z1t_t30                                                   
[16:40:03] DEBUG    MainThread - Took 80 seconds              entry_point.py:151

Mine has started working again. I didn't do anything to it

lsliddar commented 8 months ago

Not sure if this issue has been resolved - I have the same YT-DLP Error.

However, my logs indicate a 403 error.

Running spotdl and youtube-dl in Docker Containers within Synology NAS. Both containers are up to date to most stable release... the run and debug logs:

`sudo docker run --rm -v /volume1/data/media/music:/music spotdl/spotify-downloader:latest download https://open.spotify.com/track/4t0UsYzmmmZRMTWn77jiGF?si=c9e321b74136490c --log-level DEBUG [16:21:48] DEBUG MainThread - Downloader settings: downloader.py:115 {'audio_providers': ['youtube-music'],
'lyrics_providers': ['genius', 'azlyrics',
'musixmatch'], 'playlist_numbering':
False, 'scan_for_songs': False, 'm3u':
None, 'output': '{artists} -
{title}.{output-ext}', 'overwrite':
'skip', 'search_query': None, 'ffmpeg':
'ffmpeg', 'bitrate': None, 'ffmpeg_args':
None, 'format': 'mp3', 'save_file': None,
'filter_results': True, 'threads': 4,
'cookie_file': None, 'restrict': False,
'print_errors': False, 'sponsor_block':
False, 'preload': False, 'archive': None,
'load_config': True, 'log_level': 'DEBUG',
'simple_tui': False, 'fetch_albums':
False, 'id3_separator': '/', 'ytm_data':
False, 'add_unavailable': False,
'generate_lrc': False,
'force_update_metadata': False,
'only_verified_results': False,
'sync_without_deleting': False,
'max_filename_length': None}
[16:21:48] DEBUG MainThread - FFmpeg path: ffmpeg downloader.py:133 [16:21:48] DEBUG MainThread - Found 0 known songs downloader.py:158 [16:21:50] DEBUG MainThread - Archive: 0 urls downloader.py:192 [16:21:50] DEBUG MainThread - Downloader initialized downloader.py:194 [16:21:50] INFO MainThread - Processing query: search.py:125 https://open.spotify.com/track/4t0UsYzmmmZRMTW
n77jiGF?si=c9e321b74136490c
[16:21:51] DEBUG MainThread - Found 1 songs in 0 lists search.py:257 [16:21:51] DEBUG MainThread - Downloading 1 songs downloader.py:241 [16:21:57] DEBUG asyncio_0 - Found lyrics for Robin S - downloader.py:352 Show Me Love on Genius
[16:21:57] DEBUG asyncio_0 - [4t0UsYzmmmZRMTWn77jiGF] Searching base.py:157 for robin s - show me love
[16:21:58] DEBUG asyncio_0 - [4t0UsYzmmmZRMTWn77jiGF] Found 3 base.py:172 results for ISRC USAT29300075
[16:21:58] DEBUG asyncio_0 - [4t0UsYzmmmZRMTWn77jiGF] Filtered to base.py:184 3 ISRC results
[16:21:58] DEBUG asyncio_0 - [4t0UsYzmmmZRMTWn77jiGF] Best ISRC base.py:193 result is
https://music.youtube.com/watch?v=Wx7I4yWJnXI
with score 100.0
[16:21:58] DEBUG asyncio_0 - Downloading Robin S - Show Me downloader.py:571 Love using
https://music.youtube.com/watch?v=Wx7I4yWJ
nXI
[16:22:00] ERROR asyncio_0 - Traceback (most recent progress_handler.py:358 call last):
File
"/spotdl/providers/audio/base.py",
line 343, in get_download_metadata
data =
self.audio_handler.extract_info(url,
download=download)
^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/YoutubeDL.py",
line 1507, in extract_info
return self.extract_info(url,
self.get_info_extractor(key),
download, extra_info, process)
^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/YoutubeDL.py",
line 1518, in wrapper
return func(self, *args,
**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/YoutubeDL.py",
line 1615, in
extract_info
return
self.process_ie_result(ie_result,
download, extra_info)
^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/YoutubeDL.py",
line 1674, in process_ie_result
ie_result =
self.process_video_result(ie_result,
download=download)
^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/YoutubeDL.py",
line 2779, in process_video_result
self.process_info(new_info)
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/YoutubeDL.py",
line 3247, in process_info
success, real_download =
self.dl(temp_filename, info_dict)
^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/YoutubeDL.py",
line 2970, in dl
return fd.download(name,
new_info, subtitle)
^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/downloader/com
mon.py", line 444, in download
ret =
self.real_download(filename,
info_dict)
^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/downloader/das
h.py", line 60, in real_download
return
self.download_and_append_fragments_m
ultiple(args, is_fatal=lambda idx:
idx == 0)
^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/downloader/fra
gment.py", line 382, in
download_and_append_fragments_multip
le
return
self.download_and_append_fragments(

args[0], **kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/downloader/fra
gment.py", line 521, in
download_and_append_fragments
download_fragment(fragment, ctx)
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/downloader/fra
gment.py", line 466, in
download_fragment
for retry in
RetryManager(self.params.get('fragme
nt_retries'), error_callback):
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/utils.py",
line 6141, in iter
self.error_callback(self.error,
self.attempt, self.retries)
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/downloader/fra
gment.py", line 463, in
error_callback
self.report_retry(err, count,
retries, frag_index, fatal)
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/downloader/com
mon.py", line 389, in report_retry
RetryManager.report_retry(
File
"/root/.cache/pypoetry/virtualenvs/s
potdl-il7asoJj-py3.11/lib/python3.11
/site-packages/yt_dlp/utils.py",
line 6148, in report_retry
return error(f'{e}. Giving up
after {count - 1} retries') if count

1 else error(str(e))

                        ^^^^^^^^^^^^^                                       
                  File                                                      
                "/root/.cache/pypoetry/virtualenvs/s                        
                potdl-il7asoJj-py3.11/lib/python3.11                        
                /site-packages/yt_dlp/downloader/com                        
                mon.py", line 392, in <lambda>                              
                    error=IDENTITY if not fatal else                        
                lambda e: self.report_error(f'\r Got                        
                error: {e}'),                                               

                           ^^^^^^^^^^^^^^^^^^^^^^^^^                        
                ^^^^^^^^^^^^^^^^^^^^^^^^                                    
                  File                                                      
                "/root/.cache/pypoetry/virtualenvs/s                        
                potdl-il7asoJj-py3.11/lib/python3.11                        
                /site-packages/yt_dlp/YoutubeDL.py",                        
                 line 1015, in report_error                                 
                    self.trouble(f'{self._format_err                        
                ("ERROR:", self.Styles.ERROR)}                              
                {message}', *args, **kwargs)                                
                  File                                                      
                "/root/.cache/pypoetry/virtualenvs/s                        
                potdl-il7asoJj-py3.11/lib/python3.11                        
                /site-packages/yt_dlp/YoutubeDL.py",                        
                 line 935, in trouble                                       
                    self.to_stderr(message)                                 
                  File                                                      
                "/root/.cache/pypoetry/virtualenvs/s                        
                potdl-il7asoJj-py3.11/lib/python3.11                        
                /site-packages/yt_dlp/YoutubeDL.py",                        
                 line 883, in to_stderr                                     
                    self.params['logger'].error(mess                        
                age)                                                        
                  File                                                      
                "/spotdl/providers/audio/base.py",                          
                line 52, in error                                           
                    raise AudioProviderError(msg)                           
                spotdl.providers.audio.base.AudioPro                        
                viderError: ERROR:  Got error: HTTP                         
                Error 403: Forbidden                                        

                The above exception was the direct                          
                cause of the following exception:                           

                Traceback (most recent call last):                          
                  File                                                      
                "/spotdl/download/downloader.py",                           
                line 579, in search_and_download                            
                    download_info =                                         
                audio_downloader.get_download_metada                        
                ta(                                                         
                                    ^^^^^^^^^^^^^^^^                        
                ^^^^^^^^^^^^^^^^^^^^^^^                                     
                  File                                                      
                "/spotdl/providers/audio/base.py",                          
                line 348, in get_download_metadata                          
                    raise                                                   
                AudioProviderError(f"YT-DLP download                        
                error - {url}") from exception                              
                spotdl.providers.audio.base.AudioPro                        
                viderError: YT-DLP download error -                         
                https://music.youtube.com/watch?v=Wx                        
                7I4yWJnXI                                                   

                ╭─ Traceback (most recent call las─╮                        
                │ /spotdl/providers/audio/base.py: │                        
                │ 343 in get_download_metadata     │                        
                │                                  │                        
                │   340 │   │   """                │                        
                │   341 │   │                      │                        
                │   342 │   │   try:               │                        
                │ ❱ 343 │   │   │   data = self.au │                        
                │   344 │   │   │                  │                        
                │   345 │   │   │   if data:       │                        
                │   346 │   │   │   │   return dat │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:1507 in extract_info   │                        
                │                                  │                        
                │   1504 │   │   │   │   if self.p │                        
                │   1505 │   │   │   │   │   raise │                        
                │   1506 │   │   │   │   break     │                        
                │ ❱ 1507 │   │   │   return self._ │                        
                │        extra_info, process)      │                        
                │   1508 │   │   else:             │                        
                │   1509 │   │   │   extractors_re │                        
                │        ['default'])              │                        
                │   1510 │   │   │   self.report_e │                        
                │        (%s)")} found for URL {ur │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:1518 in wrapper        │                        
                │                                  │                        
                │   1515 │   │   def wrapper(self, │                        
                │   1516 │   │   │   while True:   │                        
                │   1517 │   │   │   │   try:      │                        
                │ ❱ 1518 │   │   │   │   │   retur │                        
                │   1519 │   │   │   │   except (D │                        
                │   1520 │   │   │   │   │   raise │                        
                │   1521 │   │   │   │   except Re │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:1615 in __extract_info │                        
                │                                  │                        
                │   1612 │   │   self.add_default_ │                        
                │   1613 │   │   if process:       │                        
                │   1614 │   │   │   self._wait_fo │                        
                │ ❱ 1615 │   │   │   return self.p │                        
                │   1616 │   │   else:             │                        
                │   1617 │   │   │   return ie_res │                        
                │   1618                           │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:1674 in                │                        
                │ process_ie_result                │                        
                │                                  │                        
                │   1671 │   │                     │                        
                │   1672 │   │   if result_type == │                        
                │   1673 │   │   │   self.add_extr │                        
                │ ❱ 1674 │   │   │   ie_result = s │                        
                │   1675 │   │   │   self._raise_p │                        
                │   1676 │   │   │   additional_ur │                        
                │   1677 │   │   │   if additional │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:2779 in                │                        
                │ process_video_result             │                        
                │                                  │                        
                │   2776 │   │   │   │   │   })    │                        
                │   2777 │   │   │   │   downloade │                        
                │   2778 │   │   │   │   try:      │                        
                │ ❱ 2779 │   │   │   │   │   self. │                        
                │   2780 │   │   │   │   except Ma │                        
                │   2781 │   │   │   │   │   max_d │                        
                │   2782 │   │   │   │   self._rai │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:3247 in process_info   │                        
                │                                  │                        
                │   3244 │   │   │   │   │   if dl │                        
                │   3245 │   │   │   │   │   │   # │                        
                │        partially downloaded with │                        
                │   3246 │   │   │   │   │   │   # │                        
                │ ❱ 3247 │   │   │   │   │   │   s │                        
                │   3248 │   │   │   │   │   │   i │                        
                │   3249 │   │   │   │   │   else: │                        
                │   3250 │   │   │   │   │   │   s │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:2970 in dl             │                        
                │                                  │                        
                │   2967 │   │   new_info = self._ │                        
                │   2968 │   │   if new_info.get(' │                        
                │   2969 │   │   │   new_info['htt │                        
                │ ❱ 2970 │   │   return fd.downloa │                        
                │   2971 │                         │                        
                │   2972 │   def existing_file(sel │                        
                │   2973 │   │   existing_files =  │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/common.py:444 in         │                        
                │ download                         │                        
                │                                  │                        
                │   441 │   │   │   self.to_screen │                        
                │   442 │   │   │   time.sleep(sle │                        
                │   443 │   │                      │                        
                │ ❱ 444 │   │   ret = self.real_do │                        
                │   445 │   │   self._finish_multi │                        
                │   446 │   │   return ret, True   │                        
                │   447                            │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/dash.py:60 in            │                        
                │ real_download                    │                        
                │                                  │                        
                │   57 │   │   │                   │                        
                │   58 │   │   │   args.append([ct │                        
                │   59 │   │                       │                        
                │ ❱ 60 │   │   return self.downloa │                        
                │      idx == 0)                   │                        
                │   61 │                           │                        
                │   62 │   def _resolve_fragments( │                        
                │   63 │   │   fragments = fragmen │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/fragment.py:382 in       │                        
                │ download_and_append_fragments_mu │                        
                │ ltiple                           │                        
                │                                  │                        
                │   379 │   │   interrupt_trigger  │                        
                │   380 │   │   max_progress = len │                        
                │   381 │   │   if max_progress == │                        
                │ ❱ 382 │   │   │   return self.do │                        
                │   383 │   │   max_workers = self │                        
                │   384 │   │   if max_progress >  │                        
                │   385 │   │   │   self._prepare_ │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/fragment.py:521 in       │                        
                │ download_and_append_fragments    │                        
                │                                  │                        
                │   518 │   │   │   │   if not int │                        
                │   519 │   │   │   │   │   break  │                        
                │   520 │   │   │   │   try:       │                        
                │ ❱ 521 │   │   │   │   │   downlo │                        
                │   522 │   │   │   │   │   result │                        
                │   523 │   │   │   │   │   │   de │                        
                │       fragment['frag_index'], ct │                        
                │   524 │   │   │   │   except Key │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/fragment.py:466 in       │                        
                │ download_fragment                │                        
                │                                  │                        
                │   463 │   │   │   │   self.repor │                        
                │   464 │   │   │   │   ctx['last_ │                        
                │   465 │   │   │                  │                        
                │ ❱ 466 │   │   │   for retry in R │                        
                │       error_callback):           │                        
                │   467 │   │   │   │   try:       │                        
                │   468 │   │   │   │   │   ctx['f │                        
                │   469 │   │   │   │   │   if not │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/uti │                        
                │ ls.py:6141 in __iter__           │                        
                │                                  │                        
                │   6138 │   │   │   self.attempt  │                        
                │   6139 │   │   │   yield self    │                        
                │   6140 │   │   │   if self.error │                        
                │ ❱ 6141 │   │   │   │   self.erro │                        
                │   6142 │                         │                        
                │   6143 │   @staticmethod         │                        
                │   6144 │   def report_retry(e, c │                        
                │        suffix=None):             │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/fragment.py:463 in       │                        
                │ error_callback                   │                        
                │                                  │                        
                │   460 │   │   │   def error_call │                        
                │   461 │   │   │   │   if fatal a │                        
                │   462 │   │   │   │   │   ctx['d │                        
                │ ❱ 463 │   │   │   │   self.repor │                        
                │   464 │   │   │   │   ctx['last_ │                        
                │   465 │   │   │                  │                        
                │   466 │   │   │   for retry in R │                        
                │       error_callback):           │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/common.py:389 in         │                        
                │ report_retry                     │                        
                │                                  │                        
                │   386 │   def report_retry(self, │                        
                │   387 │   │   """Report retry""" │                        
                │   388 │   │   is_frag = False if │                        
                │ ❱ 389 │   │   RetryManager.repor │                        
                │   390 │   │   │   err, count, re │                        
                │   391 │   │   │   warn=lambda ms │                        
                │   392 │   │   │   error=IDENTITY │                        
                │       Got error: {e}'),          │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/uti │                        
                │ ls.py:6148 in report_retry       │                        
                │                                  │                        
                │   6145 │   │   """Utility functi │                        
                │   6146 │   │   if count > retrie │                        
                │   6147 │   │   │   if error:     │                        
                │ ❱ 6148 │   │   │   │   return er │                        
                │        else error(str(e))        │                        
                │   6149 │   │   │   raise e       │                        
                │   6150 │   │                     │                        
                │   6151 │   │   if not count:     │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/dow │                        
                │ nloader/common.py:392 in         │                        
                │ <lambda>                         │                        
                │                                  │                        
                │   389 │   │   RetryManager.repor │                        
                │   390 │   │   │   err, count, re │                        
                │   391 │   │   │   warn=lambda ms │                        
                │ ❱ 392 │   │   │   error=IDENTITY │                        
                │       Got error: {e}'),          │                        
                │   393 │   │   │   sleep_func=sel │                        
                │       'http'),                   │                        
                │   394 │   │   │   suffix=f'fragm │                        
                │       is_frag else None)         │                        
                │   395                            │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:1015 in report_error   │                        
                │                                  │                        
                │   1012 │   │   Do the same as tr │                        
                │   1013 │   │   in red if stderr  │                        
                │   1014 │   │   '''               │                        
                │ ❱ 1015 │   │   self.trouble(f'{s │                        
                │        *args, **kwargs)          │                        
                │   1016 │                         │                        
                │   1017 │   def write_debug(self, │                        
                │   1018 │   │   '''Log debug mess │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:935 in trouble         │                        
                │                                  │                        
                │    932 │   │   @param is_error   │                        
                │    933 │   │   """               │                        
                │    934 │   │   if message is not │                        
                │ ❱  935 │   │   │   self.to_stder │                        
                │    936 │   │   if self.params.ge │                        
                │    937 │   │   │   if tb is None │                        
                │    938 │   │   │   │   if sys.ex │                        
                │        block                     │                        
                │                                  │                        
                │ /root/.cache/pypoetry/virtualenv │                        
                │ s/spotdl-il7asoJj-py3.11/lib/pyt │                        
                │ hon3.11/site-packages/yt_dlp/You │                        
                │ tubeDL.py:883 in to_stderr       │                        
                │                                  │                        
                │    880 │   │   """Print message  │                        
                │    881 │   │   assert isinstance │                        
                │    882 │   │   if self.params.ge │                        
                │ ❱  883 │   │   │   self.params[' │                        
                │    884 │   │   else:             │                        
                │    885 │   │   │   self._write_s │                        
                │        self._out_files.error, on │                        
                │    886                           │                        
                │                                  │                        
                │ /spotdl/providers/audio/base.py: │                        
                │ 52 in error                      │                        
                │                                  │                        
                │    49 │   │   YTDL uses this to  │                        
                │    50 │   │   """                │                        
                │    51 │   │                      │                        
                │ ❱  52 │   │   raise AudioProvide │                        
                │    53                            │                        
                │    54                            │                        
                │    55 ISRC_REGEX = re.compile(r" │                        
                ╰──────────────────────────────────╯                        
                AudioProviderError: ERROR:                                  
                [download] Got error: HTTP Error                            
                403: Forbidden                                              

                The above exception was the direct                          
                cause of the following exception:                           

                ╭─ Traceback (most recent call las─╮                        
                │ /spotdl/download/downloader.py:5 │                        
                │ 79 in search_and_download        │                        
                │                                  │                        
                │   576 │   │   │   )              │                        
                │   577 │   │   │                  │                        
                │   578 │   │   │   # Download the │                        
                │ ❱ 579 │   │   │   download_info  │                        
                │   580 │   │   │   │   download_u │                        
                │   581 │   │   │   )              │                        
                │   582                            │                        
                │                                  │                        
                │ /spotdl/providers/audio/base.py: │                        
                │ 348 in get_download_metadata     │                        
                │                                  │                        
                │   345 │   │   │   if data:       │                        
                │   346 │   │   │   │   return dat │                        
                │   347 │   │   except Exception a │                        
                │ ❱ 348 │   │   │   raise AudioPro │                        
                │   349 │   │                      │                        
                │   350 │   │   raise AudioProvide │                        
                │   351                            │                        
                ╰──────────────────────────────────╯                        
                AudioProviderError: YT-DLP download                         
                error -                                                     
                https://music.youtube.com/watch?v=Wx                        
                7I4yWJnXI                                        `
bdim404 commented 7 months ago

Hello, I have the same problem. macOS Sonoma 14.4

bdim404$ spotdl https://open.spotify.com/track/7yq4Qj7cqayVTp3FF9CWbm?si=5d3221278a584a95
Processing query:                                                               
https://open.spotify.com/track/7yq4Qj7cqayVTp3FF9CWbm?si=5d3221278a584a95       
AudioProviderError: YT-DLP download error -                                     
https://music.youtube.com/watch?v=MsTWpbR_TVE
avishkarsaha commented 7 months ago

I was having this issue too last week. Now I have seen that instead of getting the AudioProviderError from YouTube, the SpotDL download command just hangs at processing query. I opened an issue here: https://github.com/spotDL/spotify-downloader/issues/2050, again seems to be a YouTube rate-limiting issue maybe.

RottenSchnitzel commented 5 months ago

Same issue for me. No notes from the devs?

xnetcat commented 3 months ago

Looks like an rate limiting issue or issue with yt-dlp, new update coming soon with updated yt-dlp hopefully resolving all audio provider issues