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'(?P[^<]+)',
r'videoTitle\s*:\s*(["\'])(?P(?:(?!\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[^\s=]+)\s*=\s*(["\'])(?P(?:(?!\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')