ytdl-org/youtube-dl · error · ExtractorError
%s returned error: %s
Error message
%s returned error: %s
What it means
Raised by the Xuite extractor when the /play/ page contains a <div id="error-message-content"> element. The site reports errors (video removed, region-restricted, login required) through that div and the extractor forwards the text with the IE name prefix.
Source
Thrown at youtube_dl/extractor/xuite.py:100
'uploader_id': '232279340',
},
}, {
'url': 'http://vlog.xuite.net/play/S1dDUjdyLTMyOTc3NjcuZmx2/%E5%AD%AB%E7%87%95%E5%A7%BF-%E7%9C%BC%E6%B7%9A%E6%88%90%E8%A9%A9',
'only_matching': True,
}]
def _real_extract(self, url):
# /play/ URLs provide embedded video URL and more metadata
url = url.replace('/embed/', '/play/')
video_id = self._match_id(url)
webpage = self._download_webpage(url, video_id)
error_msg = self._search_regex(
r'<div id="error-message-content">([^<]+)',
webpage, 'error message', default=None)
if error_msg:
raise ExtractorError(
'%s returned error: %s' % (self.IE_NAME, error_msg),
expected=True)
media_info = self._parse_json(self._search_regex(
r'var\s+mediaInfo\s*=\s*({.*});', webpage, 'media info'), video_id)
video_id = media_info['MEDIA_ID']
formats = []
for key in ('html5Url', 'html5HQUrl'):
video_url = media_info.get(key)
if not video_url:
continue
format_id = self._search_regex(
r'\bq=(.+?)\b', video_url, 'format id', default=None)
formats.append({
'url': video_url,
'ext': 'mp4' if format_id.isnumeric() else format_id,View on GitHub (pinned to 956b8c5855)
Solutions
- Read the forwarded 'Xuite said:' text for the specific reason.
- Verify the video still exists by opening the /play/ URL in a browser.
- If the page shows no error in a browser but the extractor fails, the markup changed — report upstream.
Defensive patterns
Strategy: try-catch
Try / catch
try:
info = ydl.extract_info(url)
except ExtractorError as e:
if str(e).startswith('Xuite said:'):
log_skip(url, str(e))
else:
raise Prevention
- Verify Xuite /play/ URLs in a browser before batch extraction.
- Forward the site message text into your job logs for later triage.
- Expect old embed links to break as the service evolves.
When it happens
Trigger: Downloading a xuite.net URL (rewritten from /embed/ to /play/) whose page matches r'<div id="error-message-content">([^<]+)' before mediaInfo parsing.
Common situations: Deleted videos on the Taiwanese hosting service; region or account restrictions; old embed links after the service changed its page structure.
Related errors
- %s said: %s
- %s returned error: %s - %s
- %s reports error: %s
- %s said: %s
- No entry in site's table of contents for this URL. Is the fr
AI-assisted analysis of ytdl-org/youtube-dl@956b8c5855 (2026-08-14).
Data as JSON: /api/errors/49c9fb46bd83e41c.
Report an issue: GitHub.