ytdl-org/youtube-dl · error · ExtractorError

Failed to get the video URL

Error message

Failed to get the video URL

What it means

Raised by the Jove extractor when the chapters XML document (fetched from jove.com's video-chapters endpoint) has no 'video' attribute on its root element. That attribute is the sole source of the actual media URL, so without it extraction cannot continue.

Source

Thrown at youtube_dl/extractor/jove.py:59

    ]

    def _real_extract(self, url):
        mobj = re.match(self._VALID_URL, url)
        video_id = mobj.group('id')

        webpage = self._download_webpage(url, video_id)

        chapters_id = self._html_search_regex(
            r'/video-chapters\?videoid=([0-9]+)', webpage, 'chapters id')

        chapters_xml = self._download_xml(
            self._CHAPTERS_URL.format(video_id=chapters_id),
            video_id, note='Downloading chapters XML',
            errnote='Failed to download chapters XML')

        video_url = chapters_xml.attrib.get('video')
        if not video_url:
            raise ExtractorError('Failed to get the video URL')

        title = self._html_search_meta('citation_title', webpage, 'title')
        thumbnail = self._og_search_thumbnail(webpage)
        description = self._html_search_regex(
            r'<div id="section_body_summary"><p class="jove_content">(.+?)</p>',
            webpage, 'description', fatal=False)
        publish_date = unified_strdate(self._html_search_meta(
            'citation_publication_date', webpage, 'publish date', fatal=False))
        comment_count = int(self._html_search_regex(
            r'<meta name="num_comments" content="(\d+) Comments?"',
            webpage, 'comment count', fatal=False))

        return {
            'id': video_id,
            'title': title,
            'url': video_url,
            'thumbnail': thumbnail,
            'description': description,

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Verify the Jove video page still exists and plays in a browser.
  2. Update youtube-dl/yt-dlp in case the XML attribute was renamed.
  3. Report the specific video ID upstream if it persists across versions.
Defensive patterns

Strategy: try-catch

Try / catch

try:
    ydl.extract_info(jove_url)
except ExtractorError as e:
    if 'Failed to get the video URL' in str(e):
        mark_broken(jove_url)  # chapters XML lacks media ref; not retryable

Prevention

When it happens

Trigger: The regex /video-chapters\?videoid=(\d+) finds a chapters ID, _download_xml succeeds, but chapters_xml.attrib.get('video') is empty - server-side the video was unlinked from its chapters, the ID is stale, or Jove changed the XML schema.

Common situations: Removed or re-published Jove science videos whose chapter records no longer reference a media file; rare schema changes on Jove's XML service.

Related errors


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