[youtube] Extract precise error messages (closes #15284)
This commit is contained in:
		
							parent
							
								
									9d6458a206
								
							
						
					
					
						commit
						bbb7c3f7e9
					
				
					 2 changed files with 20 additions and 4 deletions
				
			
		| 
						 | 
					@ -1,3 +1,10 @@
 | 
				
			||||||
 | 
					version <unreleased>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Extractors
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					* [youtube] Extract precise error messages (#15284)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
version 2018.01.21
 | 
					version 2018.01.21
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Core
 | 
					Core
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1596,6 +1596,12 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
				
			||||||
                        if 'token' not in video_info:
 | 
					                        if 'token' not in video_info:
 | 
				
			||||||
                            video_info = get_video_info
 | 
					                            video_info = get_video_info
 | 
				
			||||||
                        break
 | 
					                        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 'token' not in video_info:
 | 
				
			||||||
            if 'reason' in video_info:
 | 
					            if 'reason' in video_info:
 | 
				
			||||||
                if 'The uploader has not made this video available in your country.' in video_info['reason']:
 | 
					                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
 | 
					                    countries = regions_allowed.split(',') if regions_allowed else None
 | 
				
			||||||
                    self.raise_geo_restricted(
 | 
					                    self.raise_geo_restricted(
 | 
				
			||||||
                        msg=video_info['reason'][0], countries=countries)
 | 
					                        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(
 | 
					                raise ExtractorError(
 | 
				
			||||||
                    'YouTube said: %s' % video_info['reason'][0],
 | 
					                    'YouTube said: %s' % reason,
 | 
				
			||||||
                    expected=True, video_id=video_id)
 | 
					                    expected=True, video_id=video_id)
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                raise ExtractorError(
 | 
					                raise ExtractorError(
 | 
				
			||||||
| 
						 | 
					@ -1953,9 +1964,7 @@ class YoutubeIE(YoutubeBaseInfoExtractor):
 | 
				
			||||||
                a_format.setdefault('http_headers', {})['Youtubedl-no-compression'] = 'True'
 | 
					                a_format.setdefault('http_headers', {})['Youtubedl-no-compression'] = 'True'
 | 
				
			||||||
                formats.append(a_format)
 | 
					                formats.append(a_format)
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            unavailable_message = self._html_search_regex(
 | 
					            unavailable_message = extract_unavailable_message()
 | 
				
			||||||
                r'(?s)<h1[^>]+id="unavailable-message"[^>]*>(.+?)</h1>',
 | 
					 | 
				
			||||||
                video_webpage, 'unavailable message', default=None)
 | 
					 | 
				
			||||||
            if unavailable_message:
 | 
					            if unavailable_message:
 | 
				
			||||||
                raise ExtractorError(unavailable_message, expected=True)
 | 
					                raise ExtractorError(unavailable_message, expected=True)
 | 
				
			||||||
            raise ExtractorError('no conn, hlsvp or url_encoded_fmt_stream_map information found in video info')
 | 
					            raise ExtractorError('no conn, hlsvp or url_encoded_fmt_stream_map information found in video info')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue