From b0472c3bce71eb08996a8d70c4c1b1df8cad4042 Mon Sep 17 00:00:00 2001 From: doe1080 <98906116+doe1080@users.noreply.github.com> Date: Tue, 30 Jun 2026 08:08:40 +0900 Subject: [PATCH] [cleanup] Fix minor mistakes (#17083) Authored by: doe1080 --- yt_dlp/YoutubeDL.py | 2 +- yt_dlp/extractor/allocine.py | 2 +- yt_dlp/extractor/amp.py | 2 +- yt_dlp/extractor/bbc.py | 5 ++++- yt_dlp/extractor/brainpop.py | 4 ++-- yt_dlp/extractor/byutv.py | 2 +- yt_dlp/extractor/common.py | 4 ++-- yt_dlp/extractor/hrti.py | 2 +- yt_dlp/extractor/iqiyi.py | 4 ++-- yt_dlp/extractor/libsyn.py | 2 +- yt_dlp/extractor/mirrativ.py | 2 +- yt_dlp/extractor/nova.py | 2 +- yt_dlp/extractor/pandatv.py | 2 +- yt_dlp/extractor/periscope.py | 7 +------ yt_dlp/extractor/radiocanada.py | 4 ++-- yt_dlp/extractor/rcti.py | 6 +++--- yt_dlp/extractor/saitosan.py | 6 +++--- yt_dlp/extractor/sonyliv.py | 4 ++-- yt_dlp/extractor/spankbang.py | 2 +- yt_dlp/extractor/tvp.py | 2 +- yt_dlp/extractor/wdr.py | 2 +- yt_dlp/extractor/yandexmusic.py | 2 +- 22 files changed, 34 insertions(+), 36 deletions(-) diff --git a/yt_dlp/YoutubeDL.py b/yt_dlp/YoutubeDL.py index 4f74164751..5040fc0e17 100644 --- a/yt_dlp/YoutubeDL.py +++ b/yt_dlp/YoutubeDL.py @@ -2001,7 +2001,7 @@ class YoutubeDL: if webpage_url and webpage_url in self._playlist_urls: self.to_screen( '[download] Skipping already downloaded playlist: {}'.format( - ie_result.get('title')) or ie_result.get('id')) + ie_result.get('title') or ie_result.get('id'))) return self._playlist_level += 1 diff --git a/yt_dlp/extractor/allocine.py b/yt_dlp/extractor/allocine.py index e0859d4514..478a37129d 100644 --- a/yt_dlp/extractor/allocine.py +++ b/yt_dlp/extractor/allocine.py @@ -99,7 +99,7 @@ class AllocineIE(InfoExtractor): video_id = display_id media_data = self._download_json( f'http://www.allocine.fr/ws/AcVisiondataV5.ashx?media={video_id}', display_id) - title = remove_end(strip_or_none(self._html_extract_title(webpage), ' - AlloCiné')) + title = remove_end(strip_or_none(self._html_extract_title(webpage)), ' - AlloCiné') for key, value in media_data['video'].items(): if not key.endswith('Path'): continue diff --git a/yt_dlp/extractor/amp.py b/yt_dlp/extractor/amp.py index adf4733749..c83610c092 100644 --- a/yt_dlp/extractor/amp.py +++ b/yt_dlp/extractor/amp.py @@ -87,7 +87,7 @@ class AMPIE(InfoExtractor): # XXX: Conventionally, base classes should end with 'ext': ext, }) - timestamp = unified_timestamp(item.get('pubDate'), ' ') or parse_iso8601(item.get('dc-date')) + timestamp = unified_timestamp(item.get('pubDate')) or parse_iso8601(item.get('dc-date')) return { 'id': video_id, diff --git a/yt_dlp/extractor/bbc.py b/yt_dlp/extractor/bbc.py index 89fcf4425d..c6ec9ff0f9 100644 --- a/yt_dlp/extractor/bbc.py +++ b/yt_dlp/extractor/bbc.py @@ -514,7 +514,10 @@ class BBCCoUkIE(InfoExtractor): value = item.get(p) if value and re.match(r'^[pb][\da-z]{7}$', value): return value - get_from_attributes(item) + + if programme_id := get_from_attributes(item): + return programme_id + mediator = item.find(f'./{{{self._EMP_PLAYLIST_NS}}}mediator') if mediator is not None: return get_from_attributes(mediator) diff --git a/yt_dlp/extractor/brainpop.py b/yt_dlp/extractor/brainpop.py index 1e4fb2c8f5..0bfbd0a4f9 100644 --- a/yt_dlp/extractor/brainpop.py +++ b/yt_dlp/extractor/brainpop.py @@ -76,9 +76,9 @@ class BrainPOPBaseIE(InfoExtractor): }, note='Logging in', errnote='Unable to log in', expected_status=400) status_code = int_or_none(login_res['status_code']) if status_code != 1505: + message = self._LOGIN_ERRORS.get(status_code) or login_res.get('message') self.report_warning( - f'Unable to login: {self._LOGIN_ERRORS.get(status_code) or login_res.get("message")}' - or f'Got status code {status_code}') + f'Unable to login: {message}' if message else f'Got status code {status_code}') class BrainPOPIE(BrainPOPBaseIE): diff --git a/yt_dlp/extractor/byutv.py b/yt_dlp/extractor/byutv.py index e9796f7dab..cb2a3cabac 100644 --- a/yt_dlp/extractor/byutv.py +++ b/yt_dlp/extractor/byutv.py @@ -88,7 +88,7 @@ class BYUtvIE(InfoExtractor): 'url': video_url, 'format_id': format_id, }) - merge_dicts(info, { + info = merge_dicts(info, { 'title': ep.get('title'), 'description': ep.get('description'), 'thumbnail': ep.get('imageThumbnail'), diff --git a/yt_dlp/extractor/common.py b/yt_dlp/extractor/common.py index b4f7250f7f..51c63dc546 100644 --- a/yt_dlp/extractor/common.py +++ b/yt_dlp/extractor/common.py @@ -3070,8 +3070,8 @@ class InfoExtractor: # %(...) counterparts to be used with % operator t = re.sub(r'\$({})\$'.format('|'.join(identifiers)), r'%(\1)d', t) t = re.sub(r'\$({})%([^$]+)\$'.format('|'.join(identifiers)), r'%(\1)\2', t) - t.replace('$$', '$') - return t + + return t.replace('$$', '$') # @initialization is a regular template like @media one # so it should be handled just the same way (see diff --git a/yt_dlp/extractor/hrti.py b/yt_dlp/extractor/hrti.py index 84e3867d34..1271828bf0 100644 --- a/yt_dlp/extractor/hrti.py +++ b/yt_dlp/extractor/hrti.py @@ -74,7 +74,7 @@ class HRTiBaseIE(InfoExtractor): data=json.dumps(auth_data).encode()) except ExtractorError as e: if isinstance(e.cause, HTTPError) and e.cause.status == 406: - auth_info = self._parse_json(e.cause.response.read().encode(), None) + auth_info = self._parse_json(e.cause.response.read().decode(), None) else: raise diff --git a/yt_dlp/extractor/iqiyi.py b/yt_dlp/extractor/iqiyi.py index f8b4afa9f9..2b949af80a 100644 --- a/yt_dlp/extractor/iqiyi.py +++ b/yt_dlp/extractor/iqiyi.py @@ -457,12 +457,12 @@ class IqIE(InfoExtractor): if video_format.get('m3u8Url'): extracted_formats.extend(self._extract_m3u8_formats( urljoin(format_data.get('dm3u8', 'https://cache-m.iq.com/dc/dt/'), video_format['m3u8Url']), - 'mp4', m3u8_id=bid, fatal=False)) + video_id, 'mp4', m3u8_id=bid, fatal=False)) if video_format.get('mpdUrl'): # TODO: Properly extract mpd hostname extracted_formats.extend(self._extract_mpd_formats( urljoin(format_data.get('dm3u8', 'https://cache-m.iq.com/dc/dt/'), video_format['mpdUrl']), - mpd_id=bid, fatal=False)) + video_id, mpd_id=bid, fatal=False)) if video_format.get('m3u8'): ff = video_format.get('ff', 'ts') if ff == 'ts': diff --git a/yt_dlp/extractor/libsyn.py b/yt_dlp/extractor/libsyn.py index 8772fb7632..c7f356e4a1 100644 --- a/yt_dlp/extractor/libsyn.py +++ b/yt_dlp/extractor/libsyn.py @@ -69,7 +69,7 @@ class LibsynIE(InfoExtractor): episode_title = data.get('item_title') or get_element_by_class('episode-title', webpage) if not episode_title: - self._search_regex( + episode_title = self._search_regex( [r'data-title="([^"]+)"', r'(.+?)'], webpage, 'episode title') episode_title = episode_title.strip() diff --git a/yt_dlp/extractor/mirrativ.py b/yt_dlp/extractor/mirrativ.py index 36a736a21d..d362fd91bc 100644 --- a/yt_dlp/extractor/mirrativ.py +++ b/yt_dlp/extractor/mirrativ.py @@ -59,7 +59,7 @@ class MirrativIE(MirrativBaseIE): return { 'id': video_id, 'title': self._og_search_title(webpage, default=None) or self._search_regex( - r'\s*(.+?) - Mirrativ\s*', webpage) or live_response.get('title'), + r'\s*(.+?) - Mirrativ\s*', webpage, 'title', default=None) or live_response.get('title'), 'is_live': is_live, 'description': live_response.get('description'), 'formats': formats, diff --git a/yt_dlp/extractor/nova.py b/yt_dlp/extractor/nova.py index e7b69e3706..d1a812d162 100644 --- a/yt_dlp/extractor/nova.py +++ b/yt_dlp/extractor/nova.py @@ -110,7 +110,7 @@ class NovaEmbedIE(InfoExtractor): title = self._og_search_title( webpage, default=None) or self._search_regex( - (r'(?P[^<]+)', + (r'<value>(?P<value>[^<]+)', r'videoTitle\s*:\s*(["\'])(?P<value>(?:(?!\1).)+)\1'), webpage, 'title', group='value') thumbnail = self._og_search_thumbnail( diff --git a/yt_dlp/extractor/pandatv.py b/yt_dlp/extractor/pandatv.py index 00ac49a3ce..396b13ef72 100644 --- a/yt_dlp/extractor/pandatv.py +++ b/yt_dlp/extractor/pandatv.py @@ -74,7 +74,7 @@ class PandaTvIE(InfoExtractor): 'http_headers': http_headers, **traverse_obj(video_meta, ('media', { 'title': ('title', {str}), - 'release_timestamp': ('startTime', {parse_iso8601(delim=' ')}), + 'release_timestamp': ('startTime', {parse_iso8601(delimiter=' ')}), 'thumbnail': ('ivsThumbnail', {url_or_none}), 'channel': ('userNick', {str}), 'concurrent_view_count': ('user', {int_or_none}), diff --git a/yt_dlp/extractor/periscope.py b/yt_dlp/extractor/periscope.py index d0cd2e20ec..97ed7ad8dd 100644 --- a/yt_dlp/extractor/periscope.py +++ b/yt_dlp/extractor/periscope.py @@ -107,11 +107,6 @@ class PeriscopeIE(PeriscopeBaseIE): width = int_or_none(broadcast.get('width')) height = int_or_none(broadcast.get('height')) - def add_width_and_height(f): - for key, val in (('width', width), ('height', height)): - if not f.get(key): - f[key] = val - video_urls = set() formats = [] for format_id in ('replay', 'rtmp', 'hls', 'https_hls', 'lhls', 'lhlsweb'): @@ -128,7 +123,7 @@ class PeriscopeIE(PeriscopeBaseIE): 'url': video_url, 'ext': 'flv' if format_id == 'rtmp' else 'mp4', } - self._add_width_and_height(rtmp_format) + self._add_width_and_height(rtmp_format, width, height) formats.append(rtmp_format) info['formats'] = formats diff --git a/yt_dlp/extractor/radiocanada.py b/yt_dlp/extractor/radiocanada.py index 950b9ec068..258f1bb3aa 100644 --- a/yt_dlp/extractor/radiocanada.py +++ b/yt_dlp/extractor/radiocanada.py @@ -129,8 +129,8 @@ class RadioCanadaIE(InfoExtractor): 'thumbnail': get_meta('imageHR') or get_meta('imageMR') or get_meta('imageBR'), 'duration': int_or_none(get_meta('length')), 'series': get_meta('Emission'), - 'season_number': int_or_none('SrcSaison'), - 'episode_number': int_or_none('SrcEpisode'), + 'season_number': int_or_none(get_meta('SrcSaison')), + 'episode_number': int_or_none(get_meta('SrcEpisode')), 'upload_date': unified_strdate(get_meta('Date')), 'subtitles': subtitles, 'formats': formats, diff --git a/yt_dlp/extractor/rcti.py b/yt_dlp/extractor/rcti.py index cc693fec13..a6b0a4fa8d 100644 --- a/yt_dlp/extractor/rcti.py +++ b/yt_dlp/extractor/rcti.py @@ -298,7 +298,7 @@ class RCTIPlusSeriesIE(RCTIPlusBaseIE): } def _series_entries(self, series_id, display_id=None, video_type=None, metadata={}): - if not video_type or video_type in 'episodes': + if not video_type or video_type == 'episodes': try: seasons_list = self._call_api( f'https://api.rctiplus.com/api/v1/program/{series_id}/season', @@ -311,11 +311,11 @@ class RCTIPlusSeriesIE(RCTIPlusBaseIE): yield from self._entries( f'https://api.rctiplus.com/api/v2/program/{series_id}/episode?season={season["season"]}', display_id, f'Downloading season {season["season"]} episode entries', metadata) - if not video_type or video_type in 'extras': + if not video_type or video_type == 'extras': yield from self._entries( f'https://api.rctiplus.com/api/v2/program/{series_id}/extra?content_id=0', display_id, 'Downloading extra entries', metadata) - if not video_type or video_type in 'clips': + if not video_type or video_type == 'clips': yield from self._entries( f'https://api.rctiplus.com/api/v2/program/{series_id}/clip?content_id=0', display_id, 'Downloading clip entries', metadata) diff --git a/yt_dlp/extractor/saitosan.py b/yt_dlp/extractor/saitosan.py index 4ed919572f..4e67b6db82 100644 --- a/yt_dlp/extractor/saitosan.py +++ b/yt_dlp/extractor/saitosan.py @@ -48,7 +48,7 @@ class SaitosanIE(InfoExtractor): self._download_webpage(base, b_id, note='Polling socket') payload = f'420["room_start_join",{{"room_id":"{b_id}"}}]' - payload = f'{len(payload)}:{payload}' + payload = f'{len(payload)}:{payload}'.encode() self._download_webpage(base, b_id, data=payload, note='Polling socket with payload') response = self._download_socket_json(base, b_id, note='Polling socket') @@ -59,11 +59,11 @@ class SaitosanIE(InfoExtractor): else 'The socket reported that the broadcast could not be joined. Maybe it\'s offline or the URL is incorrect', expected=True, video_id=b_id) - self._download_webpage(base, b_id, data='26:421["room_finish_join",{}]', note='Polling socket') + self._download_webpage(base, b_id, data=b'26:421["room_finish_join",{}]', note='Polling socket') b_data = self._download_socket_json(base, b_id, note='Getting broadcast metadata from socket') m3u8_url = b_data.get('url') - self._download_webpage(base, b_id, data='1:1', note='Closing socket', fatal=False) + self._download_webpage(base, b_id, data=b'1:1', note='Closing socket', fatal=False) return { 'id': b_id, diff --git a/yt_dlp/extractor/sonyliv.py b/yt_dlp/extractor/sonyliv.py index 0cd914cbba..3af5399c20 100644 --- a/yt_dlp/extractor/sonyliv.py +++ b/yt_dlp/extractor/sonyliv.py @@ -94,7 +94,7 @@ class SonyLIVIE(InfoExtractor): 'mobileNumber': username, 'channelPartnerID': 'MSMIND', 'country': 'IN', - 'timestamp': dt.datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%MZ'), + 'timestamp': dt.datetime.now(dt.timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%fZ'), 'otpSize': 6, 'loginType': 'REGISTERORSIGNIN', 'isMobileMandatory': True, @@ -111,7 +111,7 @@ class SonyLIVIE(InfoExtractor): 'otp': self._get_tfa_info('OTP'), 'dmaId': 'IN', 'ageConfirmation': True, - 'timestamp': dt.datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%MZ'), + 'timestamp': dt.datetime.now(dt.timezone.utc).strftime('%Y-%m-%dT%H:%M:%S.%fZ'), 'isMobileMandatory': True, }).encode()) if otp_verify_json['resultCode'] == 'KO': diff --git a/yt_dlp/extractor/spankbang.py b/yt_dlp/extractor/spankbang.py index 80f9c00f27..9df82853c7 100644 --- a/yt_dlp/extractor/spankbang.py +++ b/yt_dlp/extractor/spankbang.py @@ -109,7 +109,7 @@ class SpankBangIE(InfoExtractor): for mobj in re.finditer( rf'{STREAM_URL_PREFIX}(?P<id>[^\s=]+)\s*=\s*(["\'])(?P<url>(?:(?!\2).)+)\2', webpage): - extract_format(mobj.group('id', 'url')) + extract_format(*mobj.group('id', 'url')) if not formats: stream_key = self._search_regex( diff --git a/yt_dlp/extractor/tvp.py b/yt_dlp/extractor/tvp.py index 416cbab3c5..317c6a2ac0 100644 --- a/yt_dlp/extractor/tvp.py +++ b/yt_dlp/extractor/tvp.py @@ -290,7 +290,7 @@ class TVPStreamIE(InfoExtractor): def _real_extract(self, url): channel_id = self._match_id(url) - channel_url = self._proto_relative_url(f'//stream.tvp.pl/?channel_id={channel_id}' or 'default') + channel_url = self._proto_relative_url(f'//stream.tvp.pl/?channel_id={channel_id}') webpage = self._download_webpage(channel_url, channel_id or 'default', 'Downloading channel webpage') channels = self._search_json( r'window\.__channels\s*=', webpage, 'channel list', channel_id, diff --git a/yt_dlp/extractor/wdr.py b/yt_dlp/extractor/wdr.py index d906605d19..12b91808c8 100644 --- a/yt_dlp/extractor/wdr.py +++ b/yt_dlp/extractor/wdr.py @@ -88,7 +88,7 @@ class WDRIE(InfoExtractor): manifest_url, video_id, f4m_id='hds', fatal=False)) elif ext == 'smil': formats.extend(self._extract_smil_formats( - medium_url, 'stream', fatal=False)) + medium_url, video_id, fatal=False)) else: a_format = { 'url': medium_url, diff --git a/yt_dlp/extractor/yandexmusic.py b/yt_dlp/extractor/yandexmusic.py index 12cc5ca28e..1a39e7ad58 100644 --- a/yt_dlp/extractor/yandexmusic.py +++ b/yt_dlp/extractor/yandexmusic.py @@ -121,7 +121,7 @@ class YandexMusicTrackIE(YandexMusicBaseIE): 'Downloading track location JSON', query={'format': 'json'}) key = hashlib.md5(('XGRlBW9FXlekgbPrRHuSiA' + fd_data['path'][1:] + fd_data['s']).encode()).hexdigest() - f_url = 'http://{}/get-mp3/{}/{}?track-id={} '.format(fd_data['host'], key, fd_data['ts'] + fd_data['path'], track['id']) + f_url = 'http://{}/get-mp3/{}/{}?track-id={}'.format(fd_data['host'], key, fd_data['ts'] + fd_data['path'], track['id']) thumbnail = None cover_uri = track.get('albums', [{}])[0].get('coverUri')