ytdl-org/youtube-dl · error · ExtractorError

The video is not found.

Error message

The video is not found.

What it means

Raised by NiconicoIE when the video info XML error code is 'NOT_FOUND' — the sm/nm/so ID does not correspond to any video (deleted-and-purged IDs also surface this way rather than DELETED). Marked expected=True.

Source

Thrown at youtube_dl/extractor/niconico.py:417

            'http://ext.nicovideo.jp/api/getthumbinfo/' + video_id,
            video_id, note='Downloading video info page')

        def get_video_info_xml(items):
            if not isinstance(items, list):
                items = [items]
            for item in items:
                ret = xpath_text(video_info_xml, './/' + item)
                if ret:
                    return ret

        if get_video_info_xml('error'):
            error_code = get_video_info_xml('code')

            if error_code == 'DELETED':
                raise ExtractorError('The video has been deleted.',
                                     expected=True)
            elif error_code == 'NOT_FOUND':
                raise ExtractorError('The video is not found.',
                                     expected=True)
            elif error_code == 'COMMUNITY':
                self.to_screen('%s: The video is community members only.' % video_id)
            else:
                raise ExtractorError('%s reports error: %s' % (self.IE_NAME, error_code))

        # Start extracting video formats
        formats = []

        # Get HTML5 videos info
        quality_info = try_get(api_data, lambda x: x['media']['delivery']['movie'])
        if not quality_info:
            raise ExtractorError('The video can\'t be downloaded', expected=True)

        for audio_quality in quality_info.get('audios') or {}:
            for video_quality in quality_info.get('videos') or {}:
                if not audio_quality.get('isAvailable') or not video_quality.get('isAvailable'):
                    continue

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Double-check the video ID/URL for typos.
  2. Treat the ID as gone — Niconico reports no such video exists.
  3. Handle as a permanent failure in automation (do not retry).
Defensive patterns

Strategy: validation

Validate before calling

import requests
xml = requests.get(f'https://ext.nicovideo.jp/api/getthumbinfo/{video_id}').text
if '<code>NOT_FOUND</code>' in xml:
    print('no such video — check the ID for typos')

Try / catch

except ExtractorError as e:
    if e.expected and 'not found' in str(e).lower():
        drop_url(url)  # ID invalid or purged
    else:
        raise

Prevention

When it happens

Trigger: Extracting a nicovideo.jp/watch/<id> URL whose getthumbinfo response has error/code = 'NOT_FOUND'.

Common situations: Typos in IDs; links to long-purged videos; IDs that only exist as mylist ghosts. Nothing to fix client-side.

Related errors


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