Closed usgitAz closed 4 months ago
I am having the same issue as well
Debian 12
3.11.2
pip
4.2.4
spotdl download "https://open.spotify.com/track/4VQ46sRJtb6osiD3xfYGHx"
Processing query: https://open.spotify.com/track/4VQ46sRJtb6osiD3xfYGHx
AudioProviderError: YT-DLP download error -
https://music.youtube.com/watch?v=ad30z1t_t30
can you guys upload more logs with --log-level DEBUG
flag enabled
@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
I have the same problem since today. Yesterday it worked fine, today i got the AudioProviderError as well
Same thing happened to me. I tried updating and that also did not work
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
@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
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 `
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
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.
Same issue for me. No notes from the devs?
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
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
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