{"record":{"id":"6038cdf82f086683","repo":"ytdl-org/youtube-dl","slug":"video-s-is-not-available-6038cd","errorCode":null,"errorMessage":"Video %s is not available","messagePattern":"Video (.+?) is not available","errorType":"exception","errorClass":"ExtractorError","httpStatus":null,"severity":"error","filePath":"youtube_dl/extractor/spankbang.py","lineNumber":80,"sourceCode":"        'url': 'https://m.spankbang.com/3vvn/play',\n        'only_matching': True,\n    }, {\n        'url': 'https://spankbang.com/2y3td/embed/',\n        'only_matching': True,\n    }, {\n        'url': 'https://spankbang.com/2v7ik-7ecbgu/playlist/latina+booty',\n        'only_matching': True,\n    }]\n\n    def _real_extract(self, url):\n        mobj = re.match(self._VALID_URL, url)\n        video_id = mobj.group('id') or mobj.group('id_2')\n        webpage = self._download_webpage(\n            url.replace('/%s/embed' % video_id, '/%s/video' % video_id),\n            video_id, headers={'Cookie': 'country=US'})\n\n        if re.search(r'<[^>]+\\b(?:id|class)=[\"\\']video_removed', webpage):\n            raise ExtractorError(\n                'Video %s is not available' % video_id, expected=True)\n\n        formats = []\n\n        def extract_format(format_id, format_url):\n            f_url = url_or_none(format_url)\n            if not f_url:\n                return\n            f = parse_resolution(format_id)\n            ext = determine_ext(f_url)\n            if format_id.startswith('m3u8') or ext == 'm3u8':\n                formats.extend(self._extract_m3u8_formats(\n                    f_url, video_id, 'mp4', entry_protocol='m3u8_native',\n                    m3u8_id='hls', fatal=False))\n            elif format_id.startswith('mpd') or ext == 'mpd':\n                formats.extend(self._extract_mpd_formats(\n                    f_url, video_id, mpd_id='dash', fatal=False))\n            elif ext == 'mp4' or f.get('width') or f.get('height'):","sourceCodeStart":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/ytdl-org/youtube-dl/blob/956b8c585591b401a543e409accb163eeaaa1193/youtube_dl/extractor/spankbang.py#L62-L98","documentation":"SpankBangIE downloads the /video page (rewritten from /embed, with a country=US cookie) and greps for an element whose id or class starts with 'video_removed'. A match means the clip was taken down, so it raises 'Video <id> is not available' as an expected error before format parsing.","triggerScenarios":"Extracting a spankbang.com URL whose page contains e.g. <div class=\"video_removed\"> - i.e. removed for DMCA/terms, deleted by the uploader, or region-swapped content that the US-cookie route cannot see. The state-specific variants (removed in your region, by uploader, etc.) all match this check.","commonSituations":"DMCA takedowns (very frequent on this site); uploader deletions; clips removed for US viewers specifically - the extractor forces country=US, so content legal only elsewhere always looks removed; mistyped slug.","solutions":["Open the URL in a browser (from the same region) to read the exact removal notice.","Search the site for re-uploads under a different id.","If the notice says region-restricted, a VPN to the allowed region may make it extractable.","Verify the URL slug - truncated ids land on removal-style pages."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"webpage = requests.get(rewritten_video_url, headers={'Cookie': 'country=US'}).text\nif re.search(r'<[^>]+\\b(?:id|class)=[\"\\']video_removed', webpage):\n    skip(video_id)","typeGuard":"def video_was_removed(webpage: str) -> bool:\n    return bool(re.search(r'<[^>]+\\b(?:id|class)=[\"\\']video_removed', webpage))","tryCatchPattern":"try:\n    extract(url)\nexcept ExtractorError as e:\n    if 'is not available' in str(e):\n        drop_from_queue(video_id)\n    else:\n        raise","preventionTips":["Note the extractor forces country=US; region-removed clips need matching egress.","Remove dead ids from playlists; takedowns are frequent and permanent.","Verify slugs are complete when copying URLs."],"tags":["spankbang","dead-link","takedown","extractor"],"backgroundTag":null,"analyzedSha":"956b8c585591b401a543e409accb163eeaaa1193","analyzedAt":"2026-08-14T18:59:47.863Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}