{"record":{"id":"9ac66eb800cab0dc","repo":"ytdl-org/youtube-dl","slug":"content-is-no-longer-available","errorCode":null,"errorMessage":"Content is no longer available","messagePattern":"Content is no longer available","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/orf.py","lineNumber":610,"sourceCode":"                '_embedded', 'subtitle',\n                ('xml_url', 'sami_url', 'stl_url', 'ttml_url', 'srt_url', 'vtt_url'),\n                T(url_or_none))):\n            self._merge_subtitles({'de': [{'url': sub_url}]}, target=subtitles)\n\n        return merge_dicts({\n            'id': video_id,\n            'formats': formats,\n            'subtitles': subtitles,\n            # '_old_archive_ids': [self._downloader._make_archive_id({'ie_key': 'ORFTVthek', 'id': video_id})],\n        }, self._parse_metadata(api_json), rev=True)\n\n    def _real_extract(self, url):\n        video_id, segment_id = self._match_valid_url(url).group('id', 'segment')\n        webpage = self._download_webpage(url, video_id)\n\n        # ORF doesn't like 410 or 404\n        if self._search_regex(r'<div\\b[^>]*>\\s*(Nicht mehr verfügbar)\\s*</div>', webpage, 'Availability', default=False):\n            raise ExtractorError('Content is no longer available', expected=True, video_id=video_id)\n\n        return merge_dicts({\n            'id': video_id,\n            'title': self._html_search_meta(['og:title', 'twitter:title'], webpage, default=None),\n            'description': self._html_search_meta(\n                ['description', 'og:description', 'twitter:description'], webpage, default=None),\n        }, self._search_json_ld(webpage, video_id, default={}),\n            self._extract_video(video_id, segment_id),\n            rev=True)\n\n\nclass ORFONIE(ORFONBase):\n    IE_NAME = 'orf:on'\n    _VALID_URL = r'https?://on\\.orf\\.at/video/(?P<id>\\d+)(?:/(?P<segment>\\d+))?'\n    _TESTS = [{\n        'url': 'https://on.orf.at/video/14210000/school-of-champions-48',\n        'info_dict': {\n            'id': '14210000',","sourceCodeStart":592,"sourceCodeEnd":628,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/orf.py#L592-L628","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","solutions":["Accept that ORF has expired the content and find a re-broadcast or alternative source","Extract promptly after broadcast while content is still in ORF's on-demand window","Check the URL in a browser to confirm the 'Nicht mehr verfügbar' page before debugging the extractor"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.download([url])\nexcept ExtractorError as e:\n    if e.expected and 'no longer available' in str(e):\n        log.info('ORF expired this item; skipping')\n    else:\n        raise","preventionTips":["Download ORF TVthek items within the on-demand retention window","Check e.expected before surfacing errors to users","Schedule recordings soon after broadcast ends"],"tags":["orf","tvthek","content-gone","geo","extractor-error","expected"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}