{"record":{"id":"29a3e45cb39f9917","repo":"ytdl-org/youtube-dl","slug":"video-s-does-not-exist-29a3e4","errorCode":null,"errorMessage":"Video %s does not exist","messagePattern":"Video (.+?) does not exist","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/xfileshare.py","lineNumber":211,"sourceCode":"\n        return list(yield_urls())\n\n    def _real_extract(self, url):\n        host, video_id = self._match_valid_url(url).group('host', 'id')\n\n        url = 'https://%s/%s' % (\n            host,\n            'embed-%s.html' % video_id if host in ('govid.me', 'vidlo.us') else video_id)\n        webpage = self._download_webpage(url, video_id)\n        container_div = get_element_by_id('container', webpage) or webpage\n        if self._search_regex(\n                r'>This server is in maintenance mode\\.', container_div,\n                'maint error', group=0, default=None):\n            raise ExtractorError(clean_html(container_div), expected=True)\n        if self._search_regex(\n                self._FILE_NOT_FOUND_REGEXES, container_div,\n                'missing video error', group=0, default=None):\n            raise ExtractorError('Video %s does not exist' % video_id, expected=True)\n\n        fields = self._hidden_inputs(webpage)\n\n        if fields.get('op') == 'download1':\n            countdown = int_or_none(self._search_regex(\n                r'<span id=\"countdown_str\">(?:[Ww]ait)?\\s*<span id=\"cxc\">(\\d+)</span>\\s*(?:seconds?)?</span>',\n                webpage, 'countdown', default=None))\n            if countdown:\n                self._sleep(countdown, video_id)\n\n            webpage = self._download_webpage(\n                url, video_id, 'Downloading video page',\n                data=urlencode_postdata(fields), headers={\n                    'Referer': url,\n                    'Content-type': 'application/x-www-form-urlencoded',\n                })\n\n        title = (","sourceCodeStart":193,"sourceCodeEnd":229,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/xfileshare.py#L193-L229","documentation":"Raised by the XFileShare-family extractor when the page container matches one of the _FILE_NOT_FOUND_REGEXES. These regexes cover the various 'file not found' / 'file deleted' wordings used across the mirrored hosts, so the error means the requested file no longer exists on that host.","triggerScenarios":"Requesting a video ID whose page shows a file-deleted notice matched by _FILE_NOT_FOUND_REGEXES (checked right after the maintenance-mode check and before form handling).","commonSituations":"Files removed for inactivity or ToS violations on file lockers; dead links in scraped or archived playlists; mistyped video IDs.","solutions":["Confirm the link is dead by opening it in a browser.","Find a re-upload or alternative host for the same content.","Remove the URL from your queue — the file will not come back under the same ID."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    info = ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'does not exist' in str(e):\n        drop_from_queue(url)\n    else:\n        raise","preventionTips":["Treat file-not-found on lockers as permanent — do not retry.","Periodically prune dead links from scraped collections.","Prefer multiple source URLs per item so one dead mirror does not lose the item."],"tags":["file-not-found","deleted","extractor","xfileshare"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}