ytdl-org/youtube-dl · error · ExtractorError
%s said: %s
Error message
%s said: %s
What it means
Raised by the Laola1TvBaseIE when the config API (conf['configUrl'] queried with videoid/partnerid/language/portal) returns a JSON payload containing an 'error' key. The message embeds the extractor name and the API's error text. It is expected=True and typically indicates geo-blocking or expired/unavailable videos.
Source
Thrown at youtube_dl/extractor/laola1tv.py:146
if 'Dieser Livestream ist bereits beendet.' in webpage:
raise ExtractorError('This live stream has already finished.', expected=True)
conf = self._parse_json(self._search_regex(
r'(?s)conf\s*=\s*({.+?});', webpage, 'conf'),
display_id,
transform_source=lambda s: js_to_json(re.sub(r'shareurl:.+,', '', s)))
video_id = conf['videoid']
config = self._download_json(conf['configUrl'], video_id, query={
'videoid': video_id,
'partnerid': conf['partnerid'],
'language': conf.get('language', ''),
'portal': conf.get('portalid', ''),
})
error = config.get('error')
if error:
raise ExtractorError('%s said: %s' % (self.IE_NAME, error), expected=True)
video_data = config['video']
title = video_data['title']
is_live = video_data.get('isLivestream') and video_data.get('isLive')
meta = video_data.get('metaInformation')
sports = meta.get('sports')
categories = sports.split(',') if sports else []
token_url = self._extract_token_url(
video_data['streamAccess'], video_id,
video_data['abo']['required'])
formats = self._extract_formats(token_url, video_id)
return {
'id': video_id,
'display_id': display_id,
'title': self._live_title(title) if is_live else title,View on GitHub (pinned to 956b8c5855)
Solutions
- Read the embedded API message: if region-related, use a proxy in the licensed country
- If the video is expired, look for the VOD or highlight version on the same portal
- Pass cookies of an authenticated/entitled account if the error is subscription-related
- Update youtube-dl/yt-dlp in case the config API contract changed
Defensive patterns
Strategy: try-catch
Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if ' said: ' in str(e):
handle_by_api_message(str(e)) # geo -> proxy; expired -> find VOD
else:
raise Prevention
- Use region-appropriate proxies per sports-rights territory
- Pass authenticated cookies when content requires a subscription
When it happens
Trigger: Any laola1.tv page whose config endpoint response includes a non-empty 'error' field — commonly 'Video is not available in your country' style messages, or video ids removed/expired after the live window.
Common situations: Region-locked sports content accessed from the wrong country; expired broadcasts whose config entries error out; partner/portal id mismatches when the site updates its conf blob; stale video ids from old links.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/0f21c3661e5f40d8.
Report an issue: GitHub.