mirror of
				https://github.com/ytdl-org/youtube-dl.git
				synced 2025-11-01 09:26:45 -07:00 
			
		
		
		
	[youtube] Extract precise error messages (closes #15284)
This commit is contained in:
		@@ -1,3 +1,10 @@
 | 
			
		||||
version <unreleased>
 | 
			
		||||
 | 
			
		||||
Extractors
 | 
			
		||||
 | 
			
		||||
* [youtube] Extract precise error messages (#15284)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
version 2018.01.21
 | 
			
		||||
 | 
			
		||||
Core
 | 
			
		||||
 
 | 
			
		||||
@@ -1596,6 +1596,12 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
                        if 'token' not in video_info:
 | 
			
		||||
                            video_info = get_video_info
 | 
			
		||||
                        break
 | 
			
		||||
 | 
			
		||||
        def extract_unavailable_message():
 | 
			
		||||
            return self._html_search_regex(
 | 
			
		||||
                r'(?s)<h1[^>]+id="unavailable-message"[^>]*>(.+?)</h1>',
 | 
			
		||||
                video_webpage, 'unavailable message', default=None)
 | 
			
		||||
 | 
			
		||||
        if 'token' not in video_info:
 | 
			
		||||
            if 'reason' in video_info:
 | 
			
		||||
                if 'The uploader has not made this video available in your country.' in video_info['reason']:
 | 
			
		||||
@@ -1604,8 +1610,13 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
                    countries = regions_allowed.split(',') if regions_allowed else None
 | 
			
		||||
                    self.raise_geo_restricted(
 | 
			
		||||
                        msg=video_info['reason'][0], countries=countries)
 | 
			
		||||
                reason = video_info['reason'][0]
 | 
			
		||||
                if 'Invalid parameters' in reason:
 | 
			
		||||
                    unavailable_message = extract_unavailable_message()
 | 
			
		||||
                    if unavailable_message:
 | 
			
		||||
                        reason = unavailable_message
 | 
			
		||||
                raise ExtractorError(
 | 
			
		||||
                    'YouTube said: %s' % video_info['reason'][0],
 | 
			
		||||
                    'YouTube said: %s' % reason,
 | 
			
		||||
                    expected=True, video_id=video_id)
 | 
			
		||||
            else:
 | 
			
		||||
                raise ExtractorError(
 | 
			
		||||
@@ -1953,9 +1964,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
			
		||||
                a_format.setdefault('http_headers', {})['Youtubedl-no-compression'] = 'True'
 | 
			
		||||
                formats.append(a_format)
 | 
			
		||||
        else:
 | 
			
		||||
            unavailable_message = self._html_search_regex(
 | 
			
		||||
                r'(?s)<h1[^>]+id="unavailable-message"[^>]*>(.+?)</h1>',
 | 
			
		||||
                video_webpage, 'unavailable message', default=None)
 | 
			
		||||
            unavailable_message = extract_unavailable_message()
 | 
			
		||||
            if unavailable_message:
 | 
			
		||||
                raise ExtractorError(unavailable_message, expected=True)
 | 
			
		||||
            raise ExtractorError('no conn, hlsvp or url_encoded_fmt_stream_map information found in video info')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user