ytdl-org/youtube-dl · error · ExtractorError

%s said: %s

Error message

%s said: %s

What it means

Raised by the SBS (Australian broadcaster) extractor when the player JSON's 'error' object is set. The code maps errorCode to a human message: 'ComingSoon' -> '<title> is not yet available.', 'Forbidden'/'intranetAccessOnly' -> cannot be accessed via this website, 'Expired' -> '<title> is no longer available.', default -> video does not exist. Final message: 'SBS said: <mapped message>'. Expected=True.

Source

Thrown at youtube_dl/extractor/sbs.py:67

    }]

    def _real_extract(self, url):
        video_id = self._match_id(url)
        player_params = self._download_json(
            'http://www.sbs.com.au/api/video_pdkvars/id/%s?form=json' % video_id, video_id)

        error = player_params.get('error')
        if error:
            error_message = 'Sorry, The video you are looking for does not exist.'
            video_data = error.get('results') or {}
            error_code = error.get('errorCode')
            if error_code == 'ComingSoon':
                error_message = '%s is not yet available.' % video_data.get('title', '')
            elif error_code in ('Forbidden', 'intranetAccessOnly'):
                error_message = 'Sorry, This video cannot be accessed via this website'
            elif error_code == 'Expired':
                error_message = 'Sorry, %s is no longer available.' % video_data.get('title', '')
            raise ExtractorError('%s said: %s' % (self.IE_NAME, error_message), expected=True)

        urls = player_params['releaseUrls']
        theplatform_url = (urls.get('progressive') or urls.get('html')
                           or urls.get('standard') or player_params['relatedItemsURL'])

        return {
            '_type': 'url_transparent',
            'ie_key': 'ThePlatform',
            'id': video_id,
            'url': smuggle_url(self._proto_relative_url(theplatform_url), {'force_smil_url': True}),
        }

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Act on the mapped message: for ComingSoon wait until after broadcast; for Expired the asset is gone; for Forbidden you need access from the permitted region/network.
  2. Confirm availability on the SBS On Demand website.
  3. Schedule extraction only within the published availability window.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if str(e).startswith('SBS said:'):
        m = str(e)
        if 'not yet available' in m: schedule_later(url)
        elif 'no longer available' in m: drop(url)
        else: log_geo_or_forbidden(url)
    else:
        raise

Prevention

When it happens

Trigger: Extracting an sbs.com.au video id whose player endpoint returns an error object: premieres in the future (ComingSoon), geo- or platform-blocked (Forbidden/intranetAccessOnly), expired after its availability window (Expired).

Common situations: Trying to download an upcoming show before it airs; content only viewable inside Australia; news/episodes past their licensing window.

Related errors


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