{"record":{"id":"bac0a755f91f2fd3","repo":"ytdl-org/youtube-dl","slug":"video-s-s","errorCode":null,"errorMessage":"Video %s %s","messagePattern":"Video %s %s","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/redtube.py","lineNumber":57,"sourceCode":"    @staticmethod\n    def _extract_urls(webpage):\n        return re.findall(\n            r'<iframe[^>]+?src=[\"\\'](?P<url>(?:https?:)?//embed\\.redtube\\.com/\\?.*?\\bid=\\d+)',\n            webpage)\n\n    def _real_extract(self, url):\n        video_id = self._match_id(url)\n        webpage = self._download_webpage(\n            'http://www.redtube.com/%s' % video_id, video_id)\n\n        ERRORS = (\n            (('video-deleted-info', '>This video has been removed'), 'has been removed'),\n            (('private_video_text', '>This video is private', '>Send a friend request to its owner to be able to view it'), 'is private'),\n        )\n\n        for patterns, message in ERRORS:\n            if any(p in webpage for p in patterns):\n                raise ExtractorError(\n                    'Video %s %s' % (video_id, message), expected=True)\n\n        info = self._search_json_ld(webpage, video_id, default={})\n\n        if not info.get('title'):\n            info['title'] = self._html_search_regex(\n                (r'<h(\\d)[^>]+class=\"(?:video_title_text|videoTitle|video_title)[^\"]*\">(?P<title>(?:(?!\\1).)+)</h\\1>',\n                 r'(?:videoTitle|title)\\s*:\\s*([\"\\'])(?P<title>(?:(?!\\1).)+)\\1',),\n                webpage, 'title', group='title',\n                default=None) or self._og_search_title(webpage)\n\n        formats = []\n        sources = self._parse_json(\n            self._search_regex(\n                r'sources\\s*:\\s*({.+?})', webpage, 'source', default='{}'),\n            video_id, fatal=False)\n        if sources and isinstance(sources, dict):\n            for format_id, format_url in sources.items():","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/redtube.py#L39-L75","documentation":"Raised by the RedTube extractor after downloading the video webpage when the HTML contains markers that the video was removed ('video-deleted-info' / '>This video has been removed') or is private ('private_video_text' / '>This video is private' / '>Send a friend request to its owner to be able to view it'). The message interpolates the video id and the reason ('has been removed' or 'is private'). Expected=True, so it is a clean, site-reported failure.","triggerScenarios":"Downloading any redtube.com/<id> URL where the served page embeds one of the six marker strings, i.e. the video was taken down or its owner set it to private.","commonSituations":"Stale URLs from old playlists/bookmarks whose videos were removed; private videos shared without friendship with the owner; region-served variant pages that include the private marker.","solutions":["Confirm the video still exists by opening the URL in a browser.","If private, the video is only reachable by a logged-in friend of the owner - obtain a public mirror or drop the URL.","Remove dead IDs from your batch/playlist and mark them as unavailable in your pipeline.","If the page loads fine in a browser, the marker strings likely changed - update youtube-dl or adjust the ERRORS patterns."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    ydl.extract_info(url)\nexcept ExtractorError as e:\n    if 'has been removed' in str(e) or 'is private' in str(e):\n        mark_unavailable(video_id)  # permanent: stop retrying\n    else:\n        raise","preventionTips":["Treat the removed/private messages as permanent failures - do not retry them.","Scrub redtube ids from stored playlists when this error is seen.","Remember private videos are unreachable regardless of credentials."],"tags":["redtube","removed-video","private-video","expected-error"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}