ytdl-org/youtube-dl · error · ExtractorError
No entry in site's table of contents for this URL. Is the fr
Error message
No entry in site's table of contents for this URL. Is the fragment part of the URL (after the #) correct?
What it means
Raised by the WDR Maus extractor when the display_id from the URL fragment is not a key in the tableOfContentsJS.php5 JSON. Die Maus pages address videos via the #fragment of the URL, so a missing or mistyped fragment means the site's table of contents has no entry for it.
Source
Thrown at youtube_dl/extractor/wdr.py:323
'info_dict': {
'title': 'Wippe',
'id': 'mdb-1198320',
'ext': 'mp4',
'age_limit': None,
'upload_date': '20071003'
},
}
def _real_extract(self, url):
display_id = self._match_id(url)
# Table of Contents seems to always be at this address, so fetch it directly.
# The website fetches configurationJS.php5, which links to tableOfContentsJS.php5.
table_of_contents = self._download_json(
'https://www.wdrmaus.de/elefantenseite/data/tableOfContentsJS.php5',
display_id)
if display_id not in table_of_contents:
raise ExtractorError(
'No entry in site\'s table of contents for this URL. '
'Is the fragment part of the URL (after the #) correct?',
expected=True)
xml_metadata_path = table_of_contents[display_id]['xmlPath']
xml_metadata = self._download_xml(
'https://www.wdrmaus.de/elefantenseite/' + xml_metadata_path,
display_id)
zmdb_url_element = xml_metadata.find('./movie/zmdb_url')
if zmdb_url_element is None:
raise ExtractorError(
'%s is not a video' % display_id, expected=True)
return self.url_result(zmdb_url_element.text, ie=WDRIE.ie_key())
class WDRMobileIE(InfoExtractor):
_VALID_URL = r'''(?x)
https?://mobile-ondemand\.wdr\.de/
.*?/fsk(?P<age_limit>[0-9]+)View on GitHub (pinned to 956b8c5855)
Solutions
- Re-copy the full URL including everything after the # from the site.
- Open the page in a browser and confirm the fragment matches the current entry.
- Browse the site to find the current URL for the same episode.
Defensive patterns
Strategy: validation
Validate before calling
toc = fetch_json('https://www.wdrmaus.de/elefantenseite/data/tableOfContentsJS.php5')
display_id = url.split('#', 1)[1] if '#' in url else None
if display_id not in toc:
print('fragment missing or wrong — copy full URL with #') Type guard
def has_toc_entry(display_id: str, toc: dict) -> bool:
return display_id in toc and 'xmlPath' in toc[display_id] Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if 'table of contents' in str(e):
flag_broken_fragment(url)
else:
raise Prevention
- Always copy Die Maus URLs together with the #fragment — it is the identifier.
- Strip nothing after # when sanitizing URLs in pipelines.
- Re-check old links after WDR site reorganizations.
When it happens
Trigger: Extracting a wdrmaus.de/elefantenseite URL whose fragment-derived display_id is absent from https://www.wdrmaus.de/elefantenseite/data/tableOfContentsJS.php5 — wrong, stale, or truncated fragment.
Common situations: Copying the URL without the #fragment part; renaming on the site that changed fragment identifiers; old links after WDR reorganized the Elefantenseite.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/35faaf40abd05acf.
Report an issue: GitHub.