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
- Confirm in a browser that the article actually plays a video; photo/text articles legitimately raise this.
- 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.
- 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.
- 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
- Filter article lists to those whose embedded JSON contains a video object with a known provider type.
- Treat 'no video in the article' as expected for photo/text articles.
- Report unseen provider types upstream so the mapping chain stays current.
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
- Invalid path
- Unauthorized user "%s"
- Missing "id" field in extractor result
- Missing "title" field in extractor result
- No video formats found!
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/89873b8e0921445b.
Report an issue: GitHub.