ytdl-org/youtube-dl · error · ExtractorError
%s said: %s
Error message
%s said: %s
What it means
Raised inside PBS's redirect-handling loop when a video redirect's JSON info returns status 'error'. The message interpolates the extractor name and either a mapped message for the http_code (from _ERRORS) or the server's own message. A 403 is diverted to raise_geo_restricted first, so this raise covers other HTTP codes.
Source
Thrown at youtube_dl/extractor/pbs.py:617
})
formats = []
http_url = None
for num, redirect in enumerate(redirects):
redirect_id = redirect.get('eeid')
redirect_info = self._download_json(
'%s?format=json' % redirect['url'], display_id,
'Downloading %s video url info' % (redirect_id or num),
headers=self.geo_verification_headers())
if redirect_info['status'] == 'error':
message = self._ERRORS.get(
redirect_info['http_code'], redirect_info['message'])
if redirect_info['http_code'] == 403:
self.raise_geo_restricted(
msg=message, countries=self._GEO_COUNTRIES)
raise ExtractorError(
'%s said: %s' % (self.IE_NAME, message), expected=True)
format_url = redirect_info.get('url')
if not format_url:
continue
if determine_ext(format_url) == 'm3u8':
formats.extend(self._extract_m3u8_formats(
format_url, display_id, 'mp4', m3u8_id='hls', fatal=False))
else:
formats.append({
'url': format_url,
'format_id': redirect_id,
})
if re.search(r'^https?://.*(?:\d+k|baseline)', format_url):
http_url = format_url
self._remove_duplicate_formats(formats)
m3u8_formats = list(filter(View on GitHub (pinned to 956b8c5855)
Solutions
- Try the video on pbs.org in a browser to confirm it still streams; if removed, use the station's own site
- For non-403 errors outside the US, still test with a US IP/VPN since PBS availability is US-centric
- If only one part fails, extract remaining parts individually by their segment URLs
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except GeoRestrictedError:
print('PBS blocked this video regionally')
except ExtractorError as e:
if e.expected and 'said:' in str(e):
print('PBS partner error:', str(e)) Prevention
- Catch GeoRestrictedError separately from generic ExtractorError
- Treat per-part failures as partial results; keep going with remaining segments
- Verify US availability for member-station content
When it happens
Trigger: Extracting a PBS video where one of its 'redirect' sources (PBS Media Manager partners) returns {'status': 'error', 'http_code': N}. Typical codes: 404 (partner removed the asset), 403 handled separately as geo-block, or partner-specific errors mapped in _ERRORS.
Common situations: PBS partner stations pulling content after broadcast rights expire; regional member-station content unavailable outside the US; a single broken redirect in a multi-part video where other parts still work.
Related errors
- Content is no longer available
- %s returned error: %s
- Item not found in collection
- failure
- %s returned error: %s
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/e2ba2e6d3073fb1f.
Report an issue: GitHub.