Closed KwokBy closed 2 months ago
Works on my end, maybe your IP is banned? Also could you upload more logs with --log-level DEBUG
please?
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
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
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?
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
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.
Closing since I can't realistically do much in this case
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
Other details
No response