ytdl-org/youtube-dl · error · ExtractorError
Playlist item was not found
Error message
Playlist item was not found
What it means
Raised by TurboIE (French M6 group clip site) when the playlist XML returned by the API has no ./channel/item element: the video id exists in the URL but the API has no corresponding media item. Expected=True.
Source
Thrown at youtube_dl/extractor/turbo.py:41
'id': '454443',
'ext': 'mp4',
'duration': 3715,
'title': 'Turbo du 07/09/2014 : Renault Twingo 3, Bentley Continental GT Speed, CES, Guide Achat Dacia... ',
'description': 'Turbo du 07/09/2014 : Renault Twingo 3, Bentley Continental GT Speed, CES, Guide Achat Dacia...',
'thumbnail': r're:^https?://.*\.jpg$',
}
}
def _real_extract(self, url):
mobj = re.match(self._VALID_URL, url)
video_id = mobj.group('id')
webpage = self._download_webpage(url, video_id)
playlist = self._download_xml(self._API_URL.format(video_id), video_id)
item = playlist.find('./channel/item')
if item is None:
raise ExtractorError('Playlist item was not found', expected=True)
title = xpath_text(item, './title', 'title')
duration = int_or_none(xpath_text(item, './durate', 'duration'))
thumbnail = xpath_text(item, './visuel_clip', 'thumbnail')
description = self._html_search_meta('description', webpage)
formats = []
get_quality = qualities(['3g', 'sd', 'hq'])
for child in item:
m = re.search(r'url_video_(?P<quality>.+)', child.tag)
if m:
quality = compat_str(m.group('quality'))
formats.append({
'format_id': quality,
'url': child.text,
'quality': get_quality(quality),
})
self._sort_formats(formats)View on GitHub (pinned to 956b8c5855)
Solutions
- Check turbo.fr in a browser; if the clip page is gone, the media is unavailable
- Search the M6 group's current platform (6play/m6replay successor) for the same clip
- Filter turbo.fr URLs out of archival download lists
- Catch expected ExtractorError and skip in bulk jobs
Defensive patterns
Strategy: validation
Validate before calling
from urllib.parse import urlparse
if urlparse(url).netloc.endswith('turbo.fr'):
check_page_alive(url) # site's video service retired; most ids return empty XML Try / catch
try:
ydl.extract_info(url)
except ExtractorError as e:
if e.expected and 'Playlist item was not found' in str(e):
mark_unavailable(url) Prevention
- Pre-filter turbo.fr links from archival queues
- Look for the same clips on the M6 group's current platform
When it happens
Trigger: Downloading a turbo.fr clip URL (e.g. from a M6 programme page) where api.turbo.fr returns an XML without a channel/item node — clip removed, or the whole service (turbo.fr video section) discontinued.
Common situations: Old French TV clip links after the site was retired; expired broadcast-window clips. The site's video offering was shut down, so most historical URLs now hit this branch.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/2474bd4344b88810.
Report an issue: GitHub.