ytdl-org/youtube-dl · error · ExtractorError
error_element.attrib['abstract']
Error message
error_element.attrib['abstract']
What it means
Raised by thePlatform base extractor when the SMIL manifest contains an error <smil:ref> whose src points at link.theplatform.<tld>/s/errorFiles/Unavailable.*. The human-readable reason is taken from the element's 'abstract' attribute (e.g. 'This video has been removed...'). It is expected=True, so it is treated as a normal content-unavailable condition, not a bug.
Source
Thrown at youtube_dl/extractor/theplatform.py:51
class ThePlatformBaseIE(OnceIE):
_TP_TLD = 'com'
def _extract_theplatform_smil(self, smil_url, video_id, note='Downloading SMIL data'):
meta = self._download_xml(
smil_url, video_id, note=note, query={'format': 'SMIL'},
headers=self.geo_verification_headers())
error_element = find_xpath_attr(meta, _x('.//smil:ref'), 'src')
if error_element is not None:
exception = find_xpath_attr(
error_element, _x('.//smil:param'), 'name', 'exception')
if exception is not None:
if exception.get('value') == 'GeoLocationBlocked':
self.raise_geo_restricted(error_element.attrib['abstract'])
elif error_element.attrib['src'].startswith(
'http://link.theplatform.%s/s/errorFiles/Unavailable.'
% self._TP_TLD):
raise ExtractorError(
error_element.attrib['abstract'], expected=True)
smil_formats = self._parse_smil_formats(
meta, smil_url, video_id, namespace=default_ns,
# the parameters are from syfy.com, other sites may use others,
# they also work for nbc.com
f4m_params={'g': 'UXWGVKRWHFSP', 'hdcore': '3.0.3'},
transform_rtmp_url=lambda streamer, src: (streamer, 'mp4:' + src))
formats = []
for _format in smil_formats:
if OnceIE.suitable(_format['url']):
formats.extend(self._extract_once_formats(_format['url']))
else:
media_url = _format['url']
if determine_ext(media_url) == 'm3u8':
hdnea2 = self._get_cookies(media_url).get('hdnea2')
if hdnea2:View on GitHub (pinned to 956b8c5855)
Solutions
- Confirm the video still plays on the originating site in a browser; if the site also shows an error, the asset is gone
- Update to the latest youtube-dl/yt-dlp; thePlatform handling has been improved in newer forks
- If you control the request, ensure any required auth/Referer cookies are available so the SMIL is not degraded to an error file
- Handle ExtractorError with expected=True in batch jobs and skip the URL
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(theplatform_url)
except ExtractorError as e:
if e.expected and 'Unavailable' in str(e):
mark_unavailable(url) # asset removed upstream; skip permanently Prevention
- Check embed pages still play video before queueing thePlatform links
- Report persistent cases to yt-dlp with --verbose output
- Keep auth/Referer cookies for the embedding site when extracting
When it happens
Trigger: A theplatform-fed site (syfy, nbc, etc.) returns a SMIL whose error ref starts with 'http://link.theplatform.<tld>/s/errorFiles/Unavailable.'; happens when the media was taken down, expired, or is otherwise unavailable while the metadata page still loads.
Common situations: Clips removed after broadcast windows close; season passes expiring; CDN/token mismatch producing Unavailable.smil; embedding sites keeping article pages alive long after the video asset was deleted upstream at thePlatform.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/7017bc583a861a01.
Report an issue: GitHub.