ytdl-org/youtube-dl · error · ExtractorError

Content is no longer available

Error message

Content is no longer available

What it means

Raised by the ORF TVthek extractor when the video webpage contains the German 'Nicht mehr verfügbar' (no longer available) marker div. ORF deliberately avoids HTTP 410/404 for removed TV content, so the extractor must sniff the HTML. Marked expected=True, so it is a site-side content-removal condition, not a downloader bug.

Source

Thrown at youtube_dl/extractor/orf.py:610

                '_embedded', 'subtitle',
                ('xml_url', 'sami_url', 'stl_url', 'ttml_url', 'srt_url', 'vtt_url'),
                T(url_or_none))):
            self._merge_subtitles({'de': [{'url': sub_url}]}, target=subtitles)

        return merge_dicts({
            'id': video_id,
            'formats': formats,
            'subtitles': subtitles,
            # '_old_archive_ids': [self._downloader._make_archive_id({'ie_key': 'ORFTVthek', 'id': video_id})],
        }, self._parse_metadata(api_json), rev=True)

    def _real_extract(self, url):
        video_id, segment_id = self._match_valid_url(url).group('id', 'segment')
        webpage = self._download_webpage(url, video_id)

        # ORF doesn't like 410 or 404
        if self._search_regex(r'<div\b[^>]*>\s*(Nicht mehr verfügbar)\s*</div>', webpage, 'Availability', default=False):
            raise ExtractorError('Content is no longer available', expected=True, video_id=video_id)

        return merge_dicts({
            'id': video_id,
            'title': self._html_search_meta(['og:title', 'twitter:title'], webpage, default=None),
            'description': self._html_search_meta(
                ['description', 'og:description', 'twitter:description'], webpage, default=None),
        }, self._search_json_ld(webpage, video_id, default={}),
            self._extract_video(video_id, segment_id),
            rev=True)


class ORFONIE(ORFONBase):
    IE_NAME = 'orf:on'
    _VALID_URL = r'https?://on\.orf\.at/video/(?P<id>\d+)(?:/(?P<segment>\d+))?'
    _TESTS = [{
        'url': 'https://on.orf.at/video/14210000/school-of-champions-48',
        'info_dict': {
            'id': '14210000',

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Accept that ORF has expired the content and find a re-broadcast or alternative source
  2. Extract promptly after broadcast while content is still in ORF's on-demand window
  3. Check the URL in a browser to confirm the 'Nicht mehr verfügbar' page before debugging the extractor
Defensive patterns

Strategy: try-catch

Try / catch

try:
    ydl.download([url])
except ExtractorError as e:
    if e.expected and 'no longer available' in str(e):
        log.info('ORF expired this item; skipping')
    else:
        raise

Prevention

When it happens

Trigger: Extracting any ORF TVthek URL (video or segment) whose webpage renders '<div ...>Nicht mehr verfügbar</div>'. The regex looks for that exact German text inside a div, so only German-locale removal pages (the default served to the extractor) trigger it.

Common situations: ORF removed the broadcast after its retention window (typically 7 days); user saved a link weeks later; ORF changed the removal page wording, in which case extraction instead fails later with missing metadata rather than this error.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/9ac66eb800cab0dc. Report an issue: GitHub.