{"record":{"id":"bf58e6fbd8d2cb20","repo":"ytdl-org/youtube-dl","slug":"video-s-is-no-longer-available","errorCode":null,"errorMessage":"Video %s is no longer available","messagePattern":"Video (.+?) is no longer available","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/ard.py","lineNumber":183,"sourceCode":"        document_id = None\n\n        numid = re.search(r'documentId=([0-9]+)', url)\n        if numid:\n            document_id = video_id = numid.group(1)\n        else:\n            video_id = m.group('video_id')\n\n        webpage = self._download_webpage(url, video_id)\n\n        ERRORS = (\n            ('>Leider liegt eine Störung vor.', 'Video %s is unavailable'),\n            ('>Der gewünschte Beitrag ist nicht mehr verfügbar.<',\n             'Video %s is no longer available'),\n        )\n\n        for pattern, message in ERRORS:\n            if pattern in webpage:\n                raise ExtractorError(message % video_id, expected=True)\n\n        if re.search(r'[\\?&]rss($|[=&])', url):\n            doc = compat_etree_fromstring(webpage.encode('utf-8'))\n            if doc.tag == 'rss':\n                return GenericIE()._extract_rss(url, video_id, doc)\n\n        title = self._og_search_title(webpage, default=None) or self._html_search_regex(\n            [r'<h1(?:\\s+class=\"boxTopHeadline\")?>(.*?)</h1>',\n             r'<meta name=\"dcterms\\.title\" content=\"(.*?)\"/>',\n             r'<h4 class=\"headline\">(.*?)</h4>',\n             r'<title[^>]*>(.*?)</title>'],\n            webpage, 'title')\n        description = self._og_search_description(webpage, default=None) or self._html_search_meta(\n            'dcterms.abstract', webpage, 'description', default=None)\n        if description is None:\n            description = self._html_search_meta(\n                'description', webpage, 'meta description', default=None)\n        if description is None:","sourceCodeStart":165,"sourceCodeEnd":201,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/ard.py#L165-L201","documentation":"Raised by ARDMediathekIE when the webpage contains '>Der gewünschte Beitrag ist nicht mehr verfügbar.<' ('the requested contribution is no longer available'). ARD removed the item from the Mediathek, so extraction stops. Marked expected=True.","triggerScenarios":"GET of the ARD page returns the 'no longer available' banner; content past its Mediathek availability window; withdrawn episodes.","commonSituations":"Old links from articles/forums; ARD's typical 7-day-to-months availability windows; rights-expired sports and news content.","solutions":["Accept it: the item was removed server-side","Search ARD for a re-broadcast or the content on the responsible regional broadcaster (WDR, NDR, etc.)","Prune dead links from playlists"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"# Pre-check the page for the removal banner\nimport requests\nif 'Der gewünschte Beitrag ist nicht mehr verfügbar' in requests.get(url).text:\n    mark_url_dead(url)  # removed from the Mediathek; permanent","typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'is no longer available' in str(e):\n        mark_url_dead(url)  # do NOT retry; content was withdrawn","preventionTips":["Download ARD content within its availability window instead of relying on old links","Key automation on the German banner distinction: Störung = retry, nicht mehr verfügbar = drop"],"tags":["ard","content-missing","expired"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}