ytdl-org/youtube-dl · error · ExtractorError
error_desc
Error message
error_desc
What it means
Raised by the Wat (wat.tv / TF1) extractor when the mediainfo.tf1.fr JSON contains a non-empty error_desc in video_info. If error_code is 'GEOBLOCKED' it first calls raise_geo_restricted with the allowed geoList; otherwise it raises with the service's own error text.
Source
Thrown at youtube_dl/extractor/wat.py:67
def _real_extract(self, url):
video_id = self._match_id(url)
video_id = video_id if video_id.isdigit() and len(video_id) > 6 else compat_str(int(video_id, 36))
# 'contentv4' is used in the website, but it also returns the related
# videos, we don't need them
# video_data = self._download_json(
# 'http://www.wat.tv/interface/contentv4s/' + video_id, video_id)
video_data = self._download_json(
'https://mediainfo.tf1.fr/mediainfocombo/' + video_id,
video_id, query={'context': 'MYTF1', 'pver': '4001000'})
video_info = video_data['media']
error_desc = video_info.get('error_desc')
if error_desc:
if video_info.get('error_code') == 'GEOBLOCKED':
self.raise_geo_restricted(error_desc, video_info.get('geoList'))
raise ExtractorError(error_desc, expected=True)
title = video_info['title']
formats = []
def extract_formats(manifest_urls):
for f, f_url in manifest_urls.items():
if not f_url:
continue
if f in ('dash', 'mpd'):
formats.extend(self._extract_mpd_formats(
f_url.replace('://das-q1.tf1.fr/', '://das-q1-ssl.tf1.fr/'),
video_id, mpd_id='dash', fatal=False))
elif f == 'hls':
formats.extend(self._extract_m3u8_formats(
f_url, video_id, 'mp4',
'm3u8_native', m3u8_id='hls', fatal=False))
View on GitHub (pinned to 956b8c5855)
Solutions
- Read error_desc — it is TF1's own message and states the exact reason.
- For GEOBLOCKED, use a French IP or the geoList countries the response permits.
- If the video was removed, find the content on another service.
- Verify the video ID is current by opening the page on the MYTF1 site.
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except GeoRestrictedError:
mark_geo_blocked(url, countries=['FR'])
except ExtractorError as e:
log_skip(url, str(e)) Prevention
- Route TF1/wat.tv requests through a French IP.
- Catch GeoRestrictedError separately from ExtractorError — it carries the geoList metadata.
- Validate video IDs against the MYTF1 site before bulk extraction.
When it happens
Trigger: Requesting https://mediainfo.tf1.fr/mediainfocombo/<video_id> with context=MYTF1 and pver=4001000 where the returned media object has error_desc set (geoblocking, removed video, unpublished content).
Common situations: Watching TF1/wat.tv content from outside France; videos delisted after broadcast rights expired; IDs from old URLs that no longer resolve in the MYTF1 catalog.
Related errors
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/6d346f23051de210.
Report an issue: GitHub.