ytdl-org/youtube-dl · error · ExtractorError
Video %s is unavailable
Error message
Video %s is unavailable
What it means
Raised by ARDMediathekIE when the downloaded webpage contains the German string '>Leider liegt eine Störung vor.' ('unfortunately there is a disruption'). This is ARD's own error banner, translated by the extractor into 'Video %s is unavailable'. Marked expected=True.
Source
Thrown at youtube_dl/extractor/ard.py:183
document_id = None
numid = re.search(r'documentId=([0-9]+)', url)
if numid:
document_id = video_id = numid.group(1)
else:
video_id = m.group('video_id')
webpage = self._download_webpage(url, video_id)
ERRORS = (
('>Leider liegt eine Störung vor.', 'Video %s is unavailable'),
('>Der gewünschte Beitrag ist nicht mehr verfügbar.<',
'Video %s is no longer available'),
)
for pattern, message in ERRORS:
if pattern in webpage:
raise ExtractorError(message % video_id, expected=True)
if re.search(r'[\?&]rss($|[=&])', url):
doc = compat_etree_fromstring(webpage.encode('utf-8'))
if doc.tag == 'rss':
return GenericIE()._extract_rss(url, video_id, doc)
title = self._og_search_title(webpage, default=None) or self._html_search_regex(
[r'<h1(?:\s+class="boxTopHeadline")?>(.*?)</h1>',
r'<meta name="dcterms\.title" content="(.*?)"/>',
r'<h4 class="headline">(.*?)</h4>',
r'<title[^>]*>(.*?)</title>'],
webpage, 'title')
description = self._og_search_description(webpage, default=None) or self._html_search_meta(
'dcterms.abstract', webpage, 'description', default=None)
if description is None:
description = self._html_search_meta(
'description', webpage, 'meta description', default=None)
if description is None:View on GitHub (pinned to 956b8c5855)
Solutions
- Retry later — 'Störung' typically denotes a temporary disruption
- Test another ARD video to distinguish a sitewide outage from a broken item
- If only one item fails permanently, look for a re-published URL on the ARD site
Defensive patterns
Strategy: retry
Validate before calling
# Distinguish sitewide outage from a broken item before queueing retries
import requests
ok = requests.get('https://www.ardmediathek.de/ard/video/Y-3JHrH8r2mQ4K4M8Q226I6/').status_code == 200
probe = requests.get(url).text
item_disrupted = 'Leider liegt eine Störung vor' in probe Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if 'is unavailable' in str(e): # ARD's 'Störung' banner
retry_with_backoff(url, hours=1) # transient disruption Prevention
- Treat 'unavailable' (Störung) as retryable and 'no longer available' as permanent — they need opposite handling
- Probe a second ARD video to tell sitewide outages from single broken items
When it happens
Trigger: GET of the ARD page returns HTML embedding the Störung banner; server-side outages; specific item broken in the Mediathek backend while the page still resolves.
Common situations: Transient ARD backend outages; single broken items amid otherwise working content; scraping during Mediathek maintenance windows.
Related errors
- Show not found in A&E feed (too new?)
- Unable to download video info
- This video is only available after 20:00
- Video %s is no longer available
- A network error has occurred.
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/cad28f6fe4465d8d.
Report an issue: GitHub.