ytdl-org/youtube-dl · error · ExtractorError
%s returned error: %s
Error message
%s returned error: %s
What it means
Raised by PladformIE via its local fail() helper when the XML returned by out.pladform.ru/getVideo has root tag 'error'. The final message is '<IE_NAME> returned error: <video.text>' — the text of the XML error element, e.g. 'video not found'. Expected=True, so it reflects a Pladform-side rejection, not a downloader fault.
Source
Thrown at youtube_dl/extractor/pladform.py:69
mobj = re.search(
r'<iframe[^>]+src=(["\'])(?P<url>(?:https?:)?//out\.pladform\.ru/player\?.+?)\1', webpage)
if mobj:
return mobj.group('url')
def _real_extract(self, url):
video_id = self._match_id(url)
qs = compat_urlparse.parse_qs(compat_urlparse.urlparse(url).query)
pl = qs.get('pl', ['1'])[0]
video = self._download_xml(
'http://out.pladform.ru/getVideo', video_id, query={
'pl': pl,
'videoid': video_id,
})
def fail(text):
raise ExtractorError(
'%s returned error: %s' % (self.IE_NAME, text),
expected=True)
if video.tag == 'error':
fail(video.text)
quality = qualities(('ld', 'sd', 'hd'))
formats = []
for src in video.findall('./src'):
if src is None:
continue
format_url = src.text
if not format_url:
continue
if src.get('type') == 'hls' or determine_ext(format_url) == 'm3u8':
formats.extend(self._extract_m3u8_formats(
format_url, video_id, 'mp4', entry_protocol='m3u8_native',View on GitHub (pinned to 956b8c5855)
Solutions
- Confirm the video still plays on the original hosting page in a browser
- Extract from the embedding article URL rather than the bare pladform player URL so the correct 'pl' param is used
- Update youtube-dl/yt-dlp for extractor fixes against API changes
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if e.expected and 'returned error' in str(e):
# Pladform's own <error> text; usually 'video not found'
log.info('Removed upstream: %s', e) Prevention
- Extract from the embedding article URL, not the bare player URL, to inherit the right 'pl' id
- Preserve the full query string when copying pladform links
- Archive promptly — Russian portal videos expire with rights
When it happens
Trigger: Calling getVideo with pl/videoid query params the backend rejects: deleted video, wrong 'pl' player id from the query string, or the videoid only valid on a different player. The XML root being <error> is the trigger.
Common situations: Videos on Russian portals (vesti, etc.) removed after rights expiry; copy-pasted embed URLs whose 'pl' parameter belongs to another publisher; Pladform changing error payload from XML to JSON so the tag check misses and extraction fails differently.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/ff563b12c41d4be4.
Report an issue: GitHub.