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.48k stars 1.6k forks source link

AudioProviderError: YT-DLP download error #2149

Closed KwokBy closed 2 months ago

KwokBy commented 3 months ago

System OS

Linux

Python Version

3.8 (CPython)

Install Source

pip / PyPi

Install version / commit hash

v4.2.5

Expected Behavior vs Actual Behavior

No response

Steps to reproduce - Ensure to include actual links!

spotdl https://open.spotify.com/playlist/6S7E6quT7NRpPVS5J7oLgD

Traceback

spotdl https://open.spotify.com/playlist/6S7E6quT7NRpPVS5J7oLgD
Processing query: https://open.spotify.com/playlist/6S7E6quT7NRpPVS5J7oLgD                                                                                                                       
Found 2 songs in 我的 #1 歌单 (Playlist)                                                                                                                                                         
AudioProviderError: YT-DLP download error - https://music.youtube.com/watch?v=L-M9bA8YNxA                                                                                                        
AudioProviderError: YT-DLP download error - https://music.youtube.com/watch?v=NHY72_n67_k

Other details

No response

tu0mas commented 3 months ago

Works on my end, maybe your IP is banned? Also could you upload more logs with --log-level DEBUG please?

jordank195 commented 3 months ago

I had this issue and fixed it by updating. Make sure to update spotdl and yt-dlp by doing pip install spotdl and pip install yt-dlp

tordenflesk commented 3 months ago

Same issue, latest version of spotdl-beta and yt-dlp-nightly installed via Scoop. creds set in config.json as well

[13:04:01] ERROR    asyncio_3 - Traceback (most recent call last):              progress_handler.py:358
                      File "yt_dlp\YoutubeDL.py", line 3434, in process_info
                      File "yt_dlp\YoutubeDL.py", line 3155, in dl
                      File "yt_dlp\downloader\common.py", line 455, in download
                      File "yt_dlp\downloader\http.py", line 369, in
                    real_download
                      File "yt_dlp\downloader\http.py", line 120, in
                    establish_connection
                      File "yt_dlp\YoutubeDL.py", line 4101, in urlopen
                      File "yt_dlp\networking\common.py", line 115, in send
                      File "yt_dlp\networking\_helper.py", line 204, in wrapper
                      File "yt_dlp\networking\common.py", line 326, in send
                      File "yt_dlp\networking\_requests.py", line 351, in _send
                    yt_dlp.networking.exceptions.HTTPError: HTTP Error 403:
                    Forbidden

                    During handling of the above exception, another exception
                    occurred:

                    Traceback (most recent call last):
                      File "spotdl\providers\audio\base.py", line 369, in
                    get_download_metadata
                      File "yt_dlp\YoutubeDL.py", line 1583, in extract_info
                      File "yt_dlp\YoutubeDL.py", line 1594, in wrapper
                      File "yt_dlp\YoutubeDL.py", line 1750, in __extract_info
                      File "yt_dlp\YoutubeDL.py", line 1809, in
                    process_ie_result
                      File "yt_dlp\YoutubeDL.py", line 2968, in
                    process_video_result
                      File "yt_dlp\YoutubeDL.py", line 3443, in process_info
                      File "yt_dlp\YoutubeDL.py", line 1061, in report_error
                      File "yt_dlp\YoutubeDL.py", line 980, in trouble
                      File "yt_dlp\YoutubeDL.py", line 920, in to_stderr
                      File "spotdl\providers\audio\base.py", line 57, in error
                    spotdl.providers.audio.base.AudioProviderError: ERROR:
                    unable to download video data: 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 661, in
                    search_and_download
                      File "spotdl\providers\audio\base.py", line 375, in
                    get_download_metadata
                    spotdl.providers.audio.base.AudioProviderError: YT-DLP
                    download error -
                    https://music.youtube.com/watch?v=bb2ahU-ypLE

                    ┌─────────── Traceback (most recent call last) ───────────┐
                    │ in process_info:3434                                    │
                    │                                                         │
                    │ in dl:3155                                              │
                    │                                                         │
                    │ in download:455                                         │
                    │                                                         │
                    │ in real_download:369                                    │
                    │                                                         │
                    │ in establish_connection:120                             │
                    │                                                         │
                    │ in urlopen:4101                                         │
                    │                                                         │
                    │ in send:115                                             │
                    │                                                         │
                    │ in wrapper:204                                          │
                    │                                                         │
                    │ in send:326                                             │
                    │                                                         │
                    │ in _send:351                                            │
                    └─────────────────────────────────────────────────────────┘
                    HTTPError: HTTP Error 403: Forbidden

                    During handling of the above exception, another exception
                    occurred:

                    ┌─────────── Traceback (most recent call last) ───────────┐
                    │ in get_download_metadata:369                            │
                    │                                                         │
                    │ in extract_info:1583                                    │
                    │                                                         │
                    │ in wrapper:1594                                         │
                    │                                                         │
                    │ in __extract_info:1750                                  │
                    │                                                         │
                    │ in process_ie_result:1809                               │
                    │                                                         │
                    │ in process_video_result:2968                            │
                    │                                                         │
                    │ in process_info:3443                                    │
                    │                                                         │
                    │ in report_error:1061                                    │
                    │                                                         │
                    │ in trouble:980                                          │
                    │                                                         │
                    │ in to_stderr:920                                        │
                    │                                                         │
                    │ in error:57                                             │
                    └─────────────────────────────────────────────────────────┘
                    AudioProviderError: ERROR: unable to download video data:
                    HTTP Error 403: Forbidden

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

                    ┌─────────── Traceback (most recent call last) ───────────┐
                    │ in search_and_download:661                              │
                    │                                                         │
                    │ in get_download_metadata:375                            │
                    └─────────────────────────────────────────────────────────┘
                    AudioProviderError: YT-DLP download error -
                    https://music.youtube.com/watch?v=bb2ahU-ypLE
periode commented 3 months ago

I have the same error. Running spotdl version 4.2.5 and yt-dlp version 2024.08.06 on ubuntu 22.04.

The logs are:

Scanning for known songs, this might take a while...
Processing query:
https://open.spotify.com/playlist/7qhj4gpe4A7mdCXfUHdvrN?si=8697afaaa0c3400a
Found 72 songs in Minus (Playlist)
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=vsQDcoD68dU
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=SCFzEiKnkmI
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=VhH6xh3Od9s
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=V0--emrNth8
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=_C2vqI9FVwg
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=fRmoHp_fyjo
HTTP Error for GET to https://api.spotify.com/v1/artists/1P6U1dCeHxPui5pIrGmndZ with Params: {} returned 401 due to None
SpotifyException: http status: 401, code:-1 -
https://api.spotify.com/v1/artists/1P6U1dCeHxPui5pIrGmndZ:
 None, reason: None
HTTP Error for GET to https://api.spotify.com/v1/tracks/76TZCvJ8GitQ2FA1q5dKu0 with Params: {'market': None} returned 401 due to None
SpotifyException: http status: 401, code:-1 -
https://api.spotify.com/v1/tracks/76TZCvJ8GitQ2FA1q5dKu0:
 None, reason: None
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=iBeoFqDDW2w
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=ancylcF1XyM
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=jwI1j2DyRJc
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=q2N8ouisNX0
HTTP Error for GET to https://api.spotify.com/v1/artists/6RMDKYDCMydPFG3scpEqjK with Params: {} returned 401 due to None
SpotifyException: http status: 401, code:-1 -
https://api.spotify.com/v1/artists/6RMDKYDCMydPFG3scpEqjK:
 None, reason: None
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=dIGmWrKYMbw
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=l62_GNyw7Mg
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=-qHfMSvMQAk
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=h5-vUY9Ws6Y
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=WCHJ4DEcCxc
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=9T5ulfMGZCs
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=1SuUe4HC0T4
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=pQsF3pzOc54
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=V0dR4OJhzXo
AudioProviderError: YT-DLP download error -

[ truncated for lenghth ]

I'm using my own client credentials.

PS: @tu0mas how would you go about checking if your IP is banned from spotify/youtube?

CopyPasteFail commented 2 months ago

I'm having the same issue:

[20:40:19] DEBUG    MainThread - Found 1 songs in 1 lists                                                  search.py:339
[20:40:19] DEBUG    MainThread - Downloading 1 songs                                                   downloader.py:280
[20:41:20] DEBUG    asyncio_0 - Genius failed to find lyrics for Ann in Black - Ї-їбашить              downloader.py:406
[20:41:21] DEBUG    asyncio_0 - AzLyrics failed to find lyrics for Ann in Black - Ї-їбашить            downloader.py:406
[20:41:22] DEBUG    asyncio_0 - MusixMatch failed to find lyrics for Ann in Black - Ї-їбашить          downloader.py:406
[20:41:22] DEBUG    asyncio_0 - No lyrics found for Ann in Black - Ї-їбашить, lyrics providers:        downloader.py:566
                    Genius, AzLyrics, MusixMatch
[20:41:22] DEBUG    asyncio_0 - [0zhQ4o0cRgCw00mvlH8brN] Searching for ann in black - ї-їбашить              base.py:167
[20:41:22] DEBUG    asyncio_0 - [0zhQ4o0cRgCw00mvlH8brN] Found 1 results for ISRC UABM12400169               base.py:180
[20:41:22] DEBUG    asyncio_0 - [0zhQ4o0cRgCw00mvlH8brN] Filtered to 1 ISRC results                          base.py:192
[20:41:22] DEBUG    asyncio_0 - [0zhQ4o0cRgCw00mvlH8brN] Best ISRC result is                                 base.py:201
                    https://music.youtube.com/watch?v=BFYS4AxL70Q with score 100.0
[20:41:23] DEBUG    asyncio_0 - Downloading Ann in Black - Ї-їбашить using                             downloader.py:654
                    https://music.youtube.com/watch?v=BFYS4AxL70Q
[20:41:27] DEBUG    asyncio_0 - ERROR: unable to download video data: HTTP Error 403: Forbidden              base.py:374
[20:41:27] ERROR    asyncio_0 - Traceback (most recent call last):                               progress_handler.py:358
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 3434, in process_info
                        success, real_download = self.dl(temp_filename, info_dict)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 3155, in dl
                        return fd.download(name, new_info, subtitle)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\downloader\common.py", line 455, in download
                        ret = self.real_download(filename, info_dict)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\downloader\http.py", line 369, in real_download
                        establish_connection()
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\downloader\http.py", line 120, in establish_connection
                        ctx.data = self.ydl.urlopen(request)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 4101, in urlopen
                        return self._request_director.send(req)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\networking\common.py", line 115, in send
                        response = handler.send(request)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\networking\_helper.py", line 204, in wrapper
                        return func(self, *args, **kwargs)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\networking\common.py", line 326, in send
                        return self._send(request)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\networking\_requests.py", line 351, in _send
                        raise HTTPError(res, redirect_loop=max_redirects_exceeded)
                    yt_dlp.networking.exceptions.HTTPError: HTTP Error 403: Forbidden

                    During handling of the above exception, another exception occurred:

                    Traceback (most recent call last):
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\sp
                    otdl\providers\audio\base.py", line 369, in get_download_metadata
                        data = self.audio_handler.extract_info(url, download=download)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 1583, in extract_info
                        return self.__extract_info(url, self.get_info_extractor(key), download,
                    extra_info, process)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 1594, in wrapper
                        return func(self, *args, **kwargs)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 1750, in __extract_info
                        return self.process_ie_result(ie_result, download, extra_info)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 1809, in process_ie_result
                        ie_result = self.process_video_result(ie_result, download=download)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 2968, in process_video_result
                        self.process_info(new_info)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 3443, in process_info
                        self.report_error('unable to download video data: %s' %
                    error_to_compat_str(err))
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 1061, in report_error
                        self.trouble(f'{self._format_err("ERROR:", self.Styles.ERROR)}
                    {message}', *args, **kwargs)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 980, in trouble
                        self.to_stderr(message)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\yt
                    _dlp\YoutubeDL.py", line 920, in to_stderr
                        self.params['logger'].error(message)
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\sp
                    otdl\providers\audio\base.py", line 57, in error
                        raise AudioProviderError(msg)
                    spotdl.providers.audio.base.AudioProviderError: ERROR: unable to download
                    video data: HTTP Error 403: Forbidden

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

                    Traceback (most recent call last):
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\sp
                    otdl\download\downloader.py", line 661, in search_and_download
                        download_info = audio_downloader.get_download_metadata(
                      File
                    "C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages\sp
                    otdl\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=BFYS4AxL70Q

                    ╭─────────────────── Traceback (most recent call last) ────────────────────╮
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:3434 in process_info                                │
                    │                                                                          │
                    │   3431 │   │   │   │   │   if dl_filename is None or dl_filename == temp │
                    │   3432 │   │   │   │   │   │   # dl_filename == temp_filename could mean │
                    │        partially downloaded with --no-part.                              │
                    │   3433 │   │   │   │   │   │   # So we should try to resume the download │
                    │ ❱ 3434 │   │   │   │   │   │   success, real_download = self.dl(temp_fil │
                    │   3435 │   │   │   │   │   │   info_dict['__real_download'] = real_downl │
                    │   3436 │   │   │   │   │   else:                                         │
                    │   3437 │   │   │   │   │   │   self.report_file_already_downloaded(dl_fi │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:3155 in dl                                          │
                    │                                                                          │
                    │   3152 │   │   new_info = self._copy_infodict(info)                      │
                    │   3153 │   │   if new_info.get('http_headers') is None:                  │
                    │   3154 │   │   │   new_info['http_headers'] = self._calc_headers(new_inf │
                    │ ❱ 3155 │   │   return fd.download(name, new_info, subtitle)              │
                    │   3156 │                                                                 │
                    │   3157 │   def existing_file(self, filepaths, *, default_overwrite=True) │
                    │   3158 │   │   existing_files = list(filter(os.path.exists, orderedSet(f │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\downloader\common.py:455 in download                             │
                    │                                                                          │
                    │   452 │   │   │   self.to_screen(f'[download] Sleeping {sleep_interval:. │
                    │   453 │   │   │   time.sleep(sleep_interval)                             │
                    │   454 │   │                                                              │
                    │ ❱ 455 │   │   ret = self.real_download(filename, info_dict)              │
                    │   456 │   │   self._finish_multiline_status()                            │
                    │   457 │   │   return ret, True                                           │
                    │   458                                                                    │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\downloader\http.py:369 in real_download                          │
                    │                                                                          │
                    │   366 │   │                                                              │
                    │   367 │   │   for retry in RetryManager(self.params.get('retries'), self │
                    │   368 │   │   │   try:                                                   │
                    │ ❱ 369 │   │   │   │   establish_connection()                             │
                    │   370 │   │   │   │   return download()                                  │
                    │   371 │   │   │   except RetryDownload as err:                           │
                    │   372 │   │   │   │   retry.error = err.source_error                     │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\downloader\http.py:120 in establish_connection                   │
                    │                                                                          │
                    │   117 │   │   │   │   request.headers['Range'] =                         │
                    │       f'bytes={int(range_start)}-{int_or_none(range_end) or ""}'         │
                    │   118 │   │   │   # Establish connection                                 │
                    │   119 │   │   │   try:                                                   │
                    │ ❱ 120 │   │   │   │   ctx.data = self.ydl.urlopen(request)               │
                    │   121 │   │   │   │   # When trying to resume, Content-Range HTTP header │
                    │       checked                                                            │
                    │   122 │   │   │   │   # to match the value of requested Range HTTP heade │
                    │       webservers                                                         │
                    │   123 │   │   │   │   # that don't support resuming and serve a whole fi │
                    │       Content-Range                                                      │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:4101 in urlopen                                     │
                    │                                                                          │
                    │   4098 │   │   clean_headers(req.headers)                                │
                    │   4099 │   │                                                             │
                    │   4100 │   │   try:                                                      │
                    │ ❱ 4101 │   │   │   return self._request_director.send(req)               │
                    │   4102 │   │   except NoSupportingHandlers as e:                         │
                    │   4103 │   │   │   for ue in e.unsupported_errors:                       │
                    │   4104 │   │   │   │   # FIXME: This depends on the order of errors.     │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\networking\common.py:115 in send                                 │
                    │                                                                          │
                    │   112 │   │   │                                                          │
                    │   113 │   │   │   self._print_verbose(f'Sending request via "{handler.RH │
                    │   114 │   │   │   try:                                                   │
                    │ ❱ 115 │   │   │   │   response = handler.send(request)                   │
                    │   116 │   │   │   except RequestError:                                   │
                    │   117 │   │   │   │   raise                                              │
                    │   118 │   │   │   except Exception as e:                                 │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\networking\_helper.py:204 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                                   │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\networking\common.py:326 in send                                 │
                    │                                                                          │
                    │   323 │   def send(self, request: Request) -> Response:                  │
                    │   324 │   │   if not isinstance(request, Request):                       │
                    │   325 │   │   │   raise TypeError('Expected an instance of Request')     │
                    │ ❱ 326 │   │   return self._send(request)                                 │
                    │   327 │                                                                  │
                    │   328 │   @abc.abstractmethod                                            │
                    │   329 │   def _send(self, request: Request):                             │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\networking\_requests.py:351 in _send                             │
                    │                                                                          │
                    │   348 │   │   res = RequestsResponseAdapter(requests_res)                │
                    │   349 │   │                                                              │
                    │   350 │   │   if not 200 <= res.status < 300:                            │
                    │ ❱ 351 │   │   │   raise HTTPError(res, redirect_loop=max_redirects_excee │
                    │   352 │   │                                                              │
                    │   353 │   │   return res                                                 │
                    │   354                                                                    │
                    ╰──────────────────────────────────────────────────────────────────────────╯
                    HTTPError: HTTP Error 403: Forbidden

                    During handling of the above exception, another exception occurred:

                    ╭─────────────────── Traceback (most recent call last) ────────────────────╮
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\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=d │
                    │   370 │   │   │                                                          │
                    │   371 │   │   │   if data:                                               │
                    │   372 │   │   │   │   return data                                        │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:1583 in extract_info                                │
                    │                                                                          │
                    │   1580 │   │   │   │   if self.params.get('break_on_existing', False):   │
                    │   1581 │   │   │   │   │   raise ExistingVideoReached()                  │
                    │   1582 │   │   │   │   break                                             │
                    │ ❱ 1583 │   │   │   return self.__extract_info(url, self.get_info_extract │
                    │        extra_info, process)                                              │
                    │   1584 │   │   else:                                                     │
                    │   1585 │   │   │   extractors_restricted = self.params.get('allowed_extr │
                    │        ['default'])                                                      │
                    │   1586 │   │   │   self.report_error(f'No suitable extractor{format_fiel │
                    │        (%s)")} found for URL {url}',                                     │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:1594 in wrapper                                     │
                    │                                                                          │
                    │   1591 │   │   def wrapper(self, *args, **kwargs):                       │
                    │   1592 │   │   │   while True:                                           │
                    │   1593 │   │   │   │   try:                                              │
                    │ ❱ 1594 │   │   │   │   │   return func(self, *args, **kwargs)            │
                    │   1595 │   │   │   │   except (DownloadCancelled, LazyList.IndexError, P │
                    │   1596 │   │   │   │   │   raise                                         │
                    │   1597 │   │   │   │   except ReExtractInfo as e:                        │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:1750 in __extract_info                              │
                    │                                                                          │
                    │   1747 │   │   self.add_default_extra_info(ie_result, ie, url)           │
                    │   1748 │   │   if process:                                               │
                    │   1749 │   │   │   self._wait_for_video(ie_result)                       │
                    │ ❱ 1750 │   │   │   return self.process_ie_result(ie_result, download, ex │
                    │   1751 │   │   else:                                                     │
                    │   1752 │   │   │   return ie_result                                      │
                    │   1753                                                                   │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:1809 in process_ie_result                           │
                    │                                                                          │
                    │   1806 │   │                                                             │
                    │   1807 │   │   if result_type == 'video':                                │
                    │   1808 │   │   │   self.add_extra_info(ie_result, extra_info)            │
                    │ ❱ 1809 │   │   │   ie_result = self.process_video_result(ie_result, down │
                    │   1810 │   │   │   self._raise_pending_errors(ie_result)                 │
                    │   1811 │   │   │   additional_urls = (ie_result or {}).get('additional_u │
                    │   1812 │   │   │   if additional_urls:                                   │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:2968 in process_video_result                        │
                    │                                                                          │
                    │   2965 │   │   │   │   │   })                                            │
                    │   2966 │   │   │   │   downloaded_formats.append(new_info)               │
                    │   2967 │   │   │   │   try:                                              │
                    │ ❱ 2968 │   │   │   │   │   self.process_info(new_info)                   │
                    │   2969 │   │   │   │   except MaxDownloadsReached:                       │
                    │   2970 │   │   │   │   │   max_downloads_reached = True                  │
                    │   2971 │   │   │   │   self._raise_pending_errors(new_info)              │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:3443 in process_info                                │
                    │                                                                          │
                    │   3440 │   │   │   │   info_dict['__finaldir'] =                         │
                    │        os.path.dirname(os.path.abspath(encodeFilename(full_filename)))   │
                    │   3441 │   │   │                                                         │
                    │   3442 │   │   │   except network_exceptions as err:                     │
                    │ ❱ 3443 │   │   │   │   self.report_error('unable to download video data: │
                    │        error_to_compat_str(err))                                         │
                    │   3444 │   │   │   │   return                                            │
                    │   3445 │   │   │   except OSError as err:                                │
                    │   3446 │   │   │   │   raise UnavailableVideoError(err)                  │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:1061 in report_error                                │
                    │                                                                          │
                    │   1058 │   │   Do the same as trouble, but prefixes the message with 'ER │
                    │   1059 │   │   in red if stderr is a tty file.                           │
                    │   1060 │   │   '''                                                       │
                    │ ❱ 1061 │   │   self.trouble(f'{self._format_err("ERROR:", self.Styles.ER │
                    │        *args, **kwargs)                                                  │
                    │   1062 │                                                                 │
                    │   1063 │   def write_debug(self, message, only_once=False):              │
                    │   1064 │   │   '''Log debug message or Print message to stderr'''        │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:980 in trouble                                      │
                    │                                                                          │
                    │    977 │   │   @param is_error    Whether to raise error according to ig │
                    │    978 │   │   """                                                       │
                    │    979 │   │   if message is not None:                                   │
                    │ ❱  980 │   │   │   self.to_stderr(message)                               │
                    │    981 │   │   if self.params.get('verbose'):                            │
                    │    982 │   │   │   if tb is None:                                        │
                    │    983 │   │   │   │   if sys.exc_info()[0]:  # if .trouble has been cal │
                    │        block                                                             │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \yt_dlp\YoutubeDL.py:920 in to_stderr                                    │
                    │                                                                          │
                    │    917 │   │   """Print message to stderr"""                             │
                    │    918 │   │   assert isinstance(message, str)                           │
                    │    919 │   │   if self.params.get('logger'):                             │
                    │ ❱  920 │   │   │   self.params['logger'].error(message)                  │
                    │    921 │   │   else:                                                     │
                    │    922 │   │   │   self._write_string(f'{self._bidi_workaround(message)} │
                    │        self._out_files.error, only_once=only_once)                       │
                    │    923                                                                   │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\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: ERROR: unable to download video data: HTTP Error 403:
                    Forbidden

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

                    ╭─────────────────── Traceback (most recent call last) ────────────────────╮
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\site-packages │
                    │ \spotdl\download\downloader.py:661 in search_and_download                │
                    │                                                                          │
                    │   658 │   │   │   │   display_progress_tracker.yt_dlp_progress_hook      │
                    │   659 │   │   │   )                                                      │
                    │   660 │   │   │                                                          │
                    │ ❱ 661 │   │   │   download_info = audio_downloader.get_download_metadata │
                    │   662 │   │   │   │   download_url, download=True                        │
                    │   663 │   │   │   )                                                      │
                    │   664                                                                    │
                    │                                                                          │
                    │ C:\Users\userb\AppData\Local\Programs\Python\Python310\lib\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 - {ur │
                    │   376 │   │                                                              │
                    │   377 │   │   raise AudioProviderError(f"No metadata found for the provi │
                    │   378                                                                    │
                    ╰──────────────────────────────────────────────────────────────────────────╯
                    AudioProviderError: YT-DLP download error -
                    https://music.youtube.com/watch?v=BFYS4AxL70Q
[20:41:29] DEBUG    MainThread - Took 89 seconds                                                      entry_point.py:164
xnetcat commented 2 months ago

If updating yt-dlp doesn't work, that means you are IP blocked. To fix this you have to wait some time/use other audio provider/use VPN.

xnetcat commented 2 months ago

Closing since I can't realistically do much in this case