{"record":{"id":"36bac917c0efc706","repo":"ytdl-org/youtube-dl","slug":"video-s-is-no-longer-available-36bac9","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/keezmovies.py","lineNumber":104,"sourceCode":"            duration = int_or_none(flashvars.get('video_duration'))\n            encrypted = flashvars.get('encrypted') is True\n            for key, value in flashvars.items():\n                mobj = re.search(r'quality_(\\d+)[pP]', key)\n                if mobj:\n                    extract_format(value, int(mobj.group(1)))\n            video_url = flashvars.get('video_url')\n            if video_url and determine_ext(video_url, None):\n                extract_format(video_url)\n\n        video_url = self._html_search_regex(\n            r'flashvars\\.video_url\\s*=\\s*([\"\\'])(?P<url>http.+?)\\1',\n            webpage, 'video url', default=None, group='url')\n        if video_url:\n            extract_format(compat_urllib_parse_unquote(video_url))\n\n        if not formats:\n            if 'title=\"This video is no longer available\"' in webpage:\n                raise ExtractorError(\n                    'Video %s is no longer available' % video_id, expected=True)\n\n        try:\n            self._sort_formats(formats)\n        except ExtractorError:\n            if fatal:\n                raise\n\n        if not title:\n            title = self._html_search_regex(\n                r'<h1[^>]*>([^<]+)', webpage, 'title')\n\n        return webpage, {\n            'id': video_id,\n            'display_id': display_id,\n            'title': strip_or_none(title),\n            'thumbnail': thumbnail,\n            'duration': duration,","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/keezmovies.py#L86-L122","documentation":"Raised by the KeezMovies extractor when no playable formats were found and the downloaded page contains the marker title=\"This video is no longer available\". It is expected=True, so it surfaces as a clean 'video unavailable' message rather than a stack trace. The site returns this page for taken-down or removed videos.","triggerScenarios":"Downloading any keezmovies URL whose webpage includes the literal string 'title=\"This video is no longer available\"' while flashvars.video_url extraction produced no usable formats (video_url missing or determine_ext could not infer an extension).","commonSituations":"DMCA takedowns or uploader deletions; following links from old aggregator pages whose videos were removed; regional removals where the stub page still serves the marker; saved bookmarks to deleted content.","solutions":["Accept that the video is removed at the source; there is nothing to download","Search the site for a re-upload or mirror and use that URL instead","If you archived the page earlier, try the Wayback Machine for the original flashvars","Verify you are on the correct video page (correct video_id) and not redirected to a stub"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"def keez_video_available(page_html):\n    return 'title=\"This video is no longer available\"' not in page_html","typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'no longer available' in str(e):\n        mark_removed(url)  # record and skip permanently\n    else:\n        raise","preventionTips":["Treat this error as permanent in bulk jobs: blacklist the URL instead of retrying","Validate links against a recent crawl of the site before batch downloading"],"tags":["keezmovies","video-unavailable","extractor","takedown"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}