ytdl-org/youtube-dl · error · ExtractorError
%s said: %s
Error message
%s said: %s
What it means
Raised by the RUTV (Russian TV) extractor when the player JSON from player.rutv.ru/iframe/data.../id/<id> has a non-empty top-level 'errors' list. Message: 'RUTV said: <errors payload>'. Expected=True. This is the first of two error checks - the outer API call itself failed before any playlist data is read.
Source
Thrown at youtube_dl/extractor/rutv.py:147
video_path = mobj.group('path')
if re.match(r'flash\d+v', video_path):
video_type = 'video'
elif video_path.startswith('iframe'):
video_type = mobj.group('type')
if video_type == 'swf':
video_type = 'video'
elif video_path.startswith('index/iframe/cast_id'):
video_type = 'live'
is_live = video_type == 'live'
json_data = self._download_json(
'http://player.rutv.ru/iframe/data%s/id/%s' % ('live' if is_live else 'video', video_id),
video_id, 'Downloading JSON')
if json_data['errors']:
raise ExtractorError('%s said: %s' % (self.IE_NAME, json_data['errors']), expected=True)
playlist = json_data['data']['playlist']
medialist = playlist['medialist']
media = medialist[0]
if media['errors']:
raise ExtractorError('%s said: %s' % (self.IE_NAME, media['errors']), expected=True)
view_count = playlist.get('count_views')
priority_transport = playlist['priority_transport']
thumbnail = media['picture']
width = int_or_none(media['width'])
height = int_or_none(media['height'])
description = media['anons']
title = media['title']
duration = int_or_none(media.get('duration'))
View on GitHub (pinned to 956b8c5855)
Solutions
- Read the interpolated errors payload - it names the exact server-side reason.
- Verify the id against the current site; RUTV content largely moved to vgtrk/smotrim players - find the new URL.
- Drop dead ids from playlists.
- If content plays in a browser, the endpoint/JSON shape changed - update youtube-dl.
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if str(e).startswith('RUTV said:'):
log(e) # outer API errors: invalid id / geo / ended stream
else:
raise Prevention
- Read the interpolated errors payload for the true cause.
- Note rutv.ru is a legacy service - prefer current vgtrk/smotrim URLs when they exist.
- Do not retry ids that return errors on the outer endpoint.
When it happens
Trigger: Extracting a rutv.ru (or rtr-vesti.ru) video/live id for which the iframe data endpoint returns errors: invalid id, expired live stream, geo-blocked content.
Common situations: Following old rutv.ru links after the service was reorganized into smotrim.ru; catching a live stream outside its broadcast window; regional restrictions.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/5c6fda46a1d8381e.
Report an issue: GitHub.