1
0
mirror of https://github.com/yt-dlp/yt-dlp.git synced 2025-07-20 12:18:29 +00:00

smuggle track_info in case it's not included on the track page

This commit is contained in:
garret1317 2025-07-14 10:04:09 +01:00
parent d57a0b5aa7
commit 349b87f563

View File

@ -11,10 +11,12 @@
float_or_none, float_or_none,
int_or_none, int_or_none,
parse_filesize, parse_filesize,
smuggle_url,
str_or_none, str_or_none,
try_get, try_get,
unified_strdate, unified_strdate,
unified_timestamp, unified_timestamp,
unsmuggle_url,
update_url_query, update_url_query,
url_or_none, url_or_none,
urljoin, urljoin,
@ -127,6 +129,8 @@ def _extract_data_attr(self, webpage, video_id, attr='tralbum', fatal=True):
attr + ' data', group=2), video_id, fatal=fatal) attr + ' data', group=2), video_id, fatal=fatal)
def _real_extract(self, url): def _real_extract(self, url):
url, smuggled_track_info = unsmuggle_url(url, None)
title, uploader = self._match_valid_url(url).group('id', 'uploader') title, uploader = self._match_valid_url(url).group('id', 'uploader')
webpage = self._download_webpage(url, title) webpage = self._download_webpage(url, title)
tralbum = self._extract_data_attr(webpage, title) tralbum = self._extract_data_attr(webpage, title)
@ -138,7 +142,7 @@ def _real_extract(self, url):
duration = None duration = None
formats = [] formats = []
track_info = try_get(tralbum, lambda x: x['trackinfo'][0], dict) track_info = try_get(tralbum, lambda x: x['trackinfo'][0], dict) or smuggled_track_info
if track_info: if track_info:
file_ = track_info.get('file') file_ = track_info.get('file')
if isinstance(file_, dict): if isinstance(file_, dict):
@ -366,7 +370,7 @@ def _real_extract(self, url):
# Only tracks with duration info have songs # Only tracks with duration info have songs
entries = [ entries = [
self.url_result( self.url_result(
urljoin(url, t['title_link']), BandcampIE.ie_key(), smuggle_url(urljoin(url, t['title_link']), t), BandcampIE.ie_key(),
str_or_none(t.get('track_id') or t.get('id')), t.get('title')) str_or_none(t.get('track_id') or t.get('id')), t.get('title'))
for t in track_info for t in track_info
if t.get('duration')] if t.get('duration')]