ytdl-org/youtube-dl · error · ExtractorError
%s said: %s
Error message
%s said: %s
What it means
Raised by StreamcloudIE when the post-wait page yields neither the <h1> title nor the 'file: "..."' video URL regex match, but DOES contain a div with class msgboxinfo. The site's own info message (e.g. 'maintenance', 'only registered users', country block) is relayed as '<IE> said: <message>' with expected=True. If no msgboxinfo exists, the original regex error is re-raised instead.
Source
Thrown at youtube_dl/extractor/streamcloud.py:65
self._sleep(6, video_id)
webpage = self._download_webpage(
url, video_id, data=urlencode_postdata(fields), headers={
b'Content-Type': b'application/x-www-form-urlencoded',
})
try:
title = self._html_search_regex(
r'<h1[^>]*>([^<]+)<', webpage, 'title')
video_url = self._search_regex(
r'file:\s*"([^"]+)"', webpage, 'video URL')
except ExtractorError:
message = self._html_search_regex(
r'(?s)<div[^>]+class=(["\']).*?msgboxinfo.*?\1[^>]*>(?P<message>.+?)</div>',
webpage, 'message', default=None, group='message')
if message:
raise ExtractorError('%s said: %s' % (self.IE_NAME, message), expected=True)
raise
thumbnail = self._search_regex(
r'image:\s*"([^"]+)"', webpage, 'thumbnail URL', fatal=False)
return {
'id': video_id,
'title': title,
'url': video_url,
'thumbnail': thumbnail,
'http_headers': {
'Referer': url,
},
}
View on GitHub (pinned to 956b8c5855)
Solutions
- Read the relayed msgboxinfo text — it states Streamcloud's actual refusal reason (limit, maintenance, region).
- Slow down: add delays or rotate exit IP if you are rate-limited; the extractor already sleeps 6s per file.
- Retry later if the message indicates maintenance; use an alternative mirror of the file otherwise.
- Upgrade youtube-dl/yt-dlp in case the player markup (file:/h1 regexes) changed and the msgbox path is masking a real parse failure.
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if e.expected and 'said:' in str(e):
log.warning('Streamcloud message: %s', str(e))
handle_rate_limit_or_maintenance(str(e))
else:
raise Prevention
- Throttle streamcloud requests; the host rate-limits aggressively (extractor already sleeps 6s).
- Read the relayed msgboxinfo text before assuming a bug.
- Keep extractor versions current in case player markup changes break the regex path.
When it happens
Trigger: Submitting the hidden-field form after the 6-second sleep and receiving a page whose player config is absent but an informational msgboxinfo div is present.
Common situations: Streamcloud maintenance windows; per-file download limits hit; aggressive IP/rate limiting after many downloads in one session.
Related errors
- 91 Porn says: Daily limit 10 videos exceeded
- %s said: %s
- %s said: %s
- Unable to login: %s
- lynda returned error: %s
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/cb8add31e269b316.
Report an issue: GitHub.