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

  1. Read the relayed msgboxinfo text — it states Streamcloud's actual refusal reason (limit, maintenance, region).
  2. Slow down: add delays or rotate exit IP if you are rate-limited; the extractor already sleeps 6s per file.
  3. Retry later if the message indicates maintenance; use an alternative mirror of the file otherwise.
  4. 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

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


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/cb8add31e269b316. Report an issue: GitHub.