ytdl-org/youtube-dl · error · ExtractorError

Video %s has been deleted

Error message

Video %s has been deleted

What it means

Raised in AfreecaTV's _real_extract when the downloaded video page HTML matches the pattern alert(['\"]This video has been deleted. The site itself declares the video deleted, so extraction stops immediately. Marked expected=True.

Source

Thrown at youtube_dl/extractor/afreecatv.py:229

            -7: 'You cannot use your Global AfreecaTV account to access Korean AfreecaTV.',
            -10: 'Sorry for the inconvenience. \nYour account has been blocked due to an unauthorized access. \nPlease contact our Help Center for assistance.',
            -32008: 'You have failed to log in. Please contact our Help Center.',
        }

        result = int_or_none(response.get('RESULT'))
        if result != 1:
            error = _ERRORS.get(result, 'You have failed to log in.')
            raise ExtractorError(
                'Unable to login: %s said: %s' % (self.IE_NAME, error),
                expected=True)

    def _real_extract(self, url):
        video_id = self._match_id(url)

        webpage = self._download_webpage(url, video_id)

        if re.search(r'alert\(["\']This video has been deleted', webpage):
            raise ExtractorError(
                'Video %s has been deleted' % video_id, expected=True)

        station_id = self._search_regex(
            r'nStationNo\s*=\s*(\d+)', webpage, 'station')
        bbs_id = self._search_regex(
            r'nBbsNo\s*=\s*(\d+)', webpage, 'bbs')
        video_id = self._search_regex(
            r'nTitleNo\s*=\s*(\d+)', webpage, 'title', default=video_id)

        partial_view = False
        for _ in range(2):
            query = {
                'nTitleNo': video_id,
                'nStationNo': station_id,
                'nBbsNo': bbs_id,
            }
            if partial_view:
                query['partialView'] = 'SKIP_ADULT'

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Accept it: the video is gone server-side and no client-side fix exists
  2. Check the broadcaster's channel page for a re-upload or a replacement video
  3. Remove the dead URL from batch/playlist files to stop repeated failures
Defensive patterns

Strategy: validation

Validate before calling

# Cheap pre-check: fetch the page and look for the deletion alert before full extraction
import requests
html = requests.get(url).text
if 'This video has been deleted' in html:
    mark_url_dead(url)  # skip extraction

Try / catch

try:
    ydl.extract_info(url)
except ExtractorError as e:
    if 'has been deleted' in str(e):
        remove_from_playlist(url)  # permanent, do not retry

Prevention

When it happens

Trigger: Downloading a VOD page whose inline JavaScript shows the deletion alert; broadcaster removed the replay; URL for an old broadcast whose retention period expired.

Common situations: Following links from stale playlists or bookmarks; replays past AfreecaTV's retention window; broadcaster-deleted content.

Related errors


AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14). Data as JSON: /api/errors/1a104e5e51321a96. Report an issue: GitHub.