ytdl-org/youtube-dl · error · ExtractorError

no video in the article

Error message

no video in the article

What it means

Raised by BleacherReportIE._real_extract when the article's embedded video JSON contains no video object it can map to a URL — the if/elif chain over video_type never produced info, so the else branch raises 'no video in the article' with expected=True. It means the article matched the extractor but its media widget is absent or of an unrecognized provider.

Source

Thrown at youtube_dl/extractor/bleacherreport.py:86

            'view_count': int_or_none(article_data.get('hitCount')),
        }

        video = article_data.get('video')
        if video:
            video_type = video['type']
            if video_type in ('cms.bleacherreport.com', 'vid.bleacherreport.com'):
                info['url'] = 'http://bleacherreport.com/video_embed?id=%s' % video['id']
            elif video_type == 'ooyala.com':
                info['url'] = 'ooyala:%s' % video['id']
            elif video_type == 'youtube.com':
                info['url'] = video['id']
            elif video_type == 'vine.co':
                info['url'] = 'https://vine.co/v/%s' % video['id']
            else:
                info['url'] = video_type + video['id']
            return info
        else:
            raise ExtractorError('no video in the article', expected=True)


class BleacherReportCMSIE(AMPIE):
    _VALID_URL = r'https?://(?:www\.)?bleacherreport\.com/video_embed\?id=(?P<id>[0-9a-f-]{36}|\d{5})'
    _TESTS = [{
        'url': 'http://bleacherreport.com/video_embed?id=8fd44c2f-3dc5-4821-9118-2c825a98c0e1&library=video-cms',
        'md5': '670b2d73f48549da032861130488c681',
        'info_dict': {
            'id': '8fd44c2f-3dc5-4821-9118-2c825a98c0e1',
            'ext': 'mp4',
            'title': 'Cena vs. Rollins Would Expose the Heavyweight Division',
            'description': 'md5:984afb4ade2f9c0db35f3267ed88b36e',
            'upload_date': '20150723',
            'timestamp': 1437679032,

        },
        'expected_warnings': [
            'Unable to download f4m manifest'

View on GitHub (pinned to 956b8c5855)

Solutions

  1. Confirm in a browser that the article actually plays a video; photo/text articles legitimately raise this.
  2. If a video exists, inspect the page's embedded JSON and note the video_type value; add a branch mapping it to the right URL scheme at bleacherreport.py:86.
  3. For ooyala/cms types the info['url'] is delegated — if the provider id format changed, the earlier branches mis-route and fall through; verify the video id shape.
  4. Report new provider types upstream so the mapping chain is extended.

Example fix

// before
elif video_type == 'vine.co':
    info['url'] = 'https://vine.co/v/%s' % video['id']
else:
    info['url'] = video_type + video['id']
return info
// (else-branch of the outer 'if video')
raise ExtractorError('no video in the article', expected=True)

// after: include what was actually found to aid triage
raise ExtractorError('no video in the article (video_type=%r, providers known: cms/vid.bleacherreport.com, ooyala.com, youtube.com, vine.co)' % video_type, expected=True)
Defensive patterns

Strategy: try-catch

Type guard

def is_known_bleacherreport_provider(video):
    return isinstance(video, dict) and str(video.get('type', '')).startswith((
        'cms.bleacherreport.com', 'vid.bleacherreport.com', 'ooyala.com', 'youtube.com', 'vine.co'))

Try / catch

try:
    ydl.extract_info(article_url)
except ExtractorError as e:
    if str(e) == 'no video in the article':
        skip_article(article_url)  # expected; article has no recognizable video
    else:
        raise

Prevention

When it happens

Trigger: Extracting a bleacherreport.com article whose embedded widget has no recognizable video_type (not cms/vid.bleacherreport.com, ooyala, youtube, or vine), or whose video array is empty — e.g. photo/slide articles, or a new video provider added by Bleacher Report that the mapping chain does not cover.

Common situations: Article links where the media is a tweet/photo loop; Bleacher Report migrating to a new player CDN so video_type strings no longer match the four known prefixes; JSON widget moved/renamed in a site redesign so an empty structure reaches the else.

Related errors


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