{"record":{"id":"e5f72b7cacce6f24","repo":"ytdl-org/youtube-dl","slug":"video-s-does-not-exist-e5f72b","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/shared.py","lineNumber":28,"sourceCode":"    ExtractorError,\n    int_or_none,\n    js_to_json,\n    KNOWN_EXTENSIONS,\n    parse_filesize,\n    rot47,\n    url_or_none,\n    urlencode_postdata,\n)\n\n\nclass SharedBaseIE(InfoExtractor):\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n\n        webpage, urlh = self._download_webpage_handle(url, video_id)\n\n        if self._FILE_NOT_FOUND in webpage:\n            raise ExtractorError(\n                'Video %s does not exist' % video_id, expected=True)\n\n        video_url = self._extract_video_url(webpage, video_id, url)\n\n        title = self._extract_title(webpage)\n        filesize = int_or_none(self._extract_filesize(webpage))\n\n        return {\n            'id': video_id,\n            'url': video_url,\n            'ext': 'mp4',\n            'filesize': filesize,\n            'title': title,\n        }\n\n    def _extract_title(self, webpage):\n        return compat_b64decode(self._html_search_meta(\n            'full:title', webpage, 'title')).decode('utf-8')","sourceCodeStart":10,"sourceCodeEnd":46,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/shared.py#L10-L46","documentation":"SharedBaseIE._real_extract downloads the target page and scans it for the subclass-defined _FILE_NOT_FOUND marker string. If the marker appears in the HTML, the file has been deleted and the extractor raises 'Video <id> does not exist' as an expected error. This is a cheap, generic existence check shared across the various shared-host sites (shared.sx, megacloud, etc.).","triggerScenarios":"Requesting a shared-host page whose HTML contains the site's file-not-found text (e.g. 'File not found' on shared.sx). Happens when the file was removed for abuse/age, expired from inactivity, or the id portion of the URL is wrong.","commonSituations":"Old links to files that expired under the host's retention policy; DMRA/abuse takedowns; mistyped video id after the slash; the host changing its not-found wording so the marker no longer matches (then extraction fails differently instead).","solutions":["Open the URL in a browser to confirm the host shows its not-found page.","Get a fresh link from the original uploader - nothing client-side can restore a deleted file.","Double-check the video id in the URL for typos or truncation.","If the page clearly exists but the error still fires, the host changed its marker text - update the extractor's _FILE_NOT_FOUND constant."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"resp = requests.get(url)\nif resp.status_code == 200 and 'File not found' in resp.text:\n    skip(video_id)  # do not invoke the extractor","typeGuard":"def file_exists(webpage: str, marker: str) -> bool:\n    return marker not in webpage","tryCatchPattern":"try:\n    extract(url)\nexcept ExtractorError as e:\n    if 'does not exist' in str(e):\n        drop_from_queue(video_id)\n    else:\n        raise","preventionTips":["Prune dead shared-host links from playlists before extraction.","Treat marker-based checks as site-version-dependent - update extractors.","Do not retry 'does not exist' errors."],"tags":["dead-link","file-deleted","shared-host","extractor"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}