mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 06:35:12 +00:00 
			
		
		
		
	| @@ -1216,6 +1216,7 @@ from .redbulltv import ( | |||||||
|     RedBullIE, |     RedBullIE, | ||||||
| ) | ) | ||||||
| from .reddit import RedditIE | from .reddit import RedditIE | ||||||
|  | from .redgifs import RedGifsIE | ||||||
| from .redtube import RedTubeIE | from .redtube import RedTubeIE | ||||||
| from .regiotv import RegioTVIE | from .regiotv import RegioTVIE | ||||||
| from .rentv import ( | from .rentv import ( | ||||||
|   | |||||||
							
								
								
									
										94
									
								
								yt_dlp/extractor/redgifs.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								yt_dlp/extractor/redgifs.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | |||||||
|  | # coding: utf-8 | ||||||
|  |  | ||||||
|  | from .common import InfoExtractor | ||||||
|  | from ..utils import ( | ||||||
|  |     ExtractorError, | ||||||
|  |     int_or_none, | ||||||
|  |     qualities, | ||||||
|  |     try_get, | ||||||
|  | ) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class RedGifsIE(InfoExtractor): | ||||||
|  |     _VALID_URL = r'https?://(?:(?:www|thumbs2?)\.)?redgifs\.com/(?:watch/)?(?P<id>[^-/?#\.]+)' | ||||||
|  |     _FORMATS = { | ||||||
|  |         'gif': 250, | ||||||
|  |         'sd': 480, | ||||||
|  |         'hd': None, | ||||||
|  |     } | ||||||
|  |     _TESTS = [{ | ||||||
|  |         'url': 'https://www.redgifs.com/watch/squeakyhelplesswisent', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'squeakyhelplesswisent', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'Hotwife Legs Thick', | ||||||
|  |             'timestamp': 1636287915, | ||||||
|  |             'upload_date': '20211107', | ||||||
|  |             'uploader': 'ignored52', | ||||||
|  |             'duration': 16, | ||||||
|  |             'view_count': int, | ||||||
|  |             'like_count': int, | ||||||
|  |             'categories': list, | ||||||
|  |             'age_limit': 18, | ||||||
|  |         } | ||||||
|  |     }, { | ||||||
|  |         'url': 'https://thumbs2.redgifs.com/SqueakyHelplessWisent-mobile.mp4#t=0', | ||||||
|  |         'info_dict': { | ||||||
|  |             'id': 'squeakyhelplesswisent', | ||||||
|  |             'ext': 'mp4', | ||||||
|  |             'title': 'Hotwife Legs Thick', | ||||||
|  |             'timestamp': 1636287915, | ||||||
|  |             'upload_date': '20211107', | ||||||
|  |             'uploader': 'ignored52', | ||||||
|  |             'duration': 16, | ||||||
|  |             'view_count': int, | ||||||
|  |             'like_count': int, | ||||||
|  |             'categories': list, | ||||||
|  |             'age_limit': 18, | ||||||
|  |         } | ||||||
|  |     }] | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         video_id = self._match_id(url).lower() | ||||||
|  |  | ||||||
|  |         video_info = self._download_json( | ||||||
|  |             'https://api.redgifs.com/v2/gifs/%s' % video_id, | ||||||
|  |             video_id, 'Downloading video info') | ||||||
|  |         if 'error' in video_info: | ||||||
|  |             raise ExtractorError(f'RedGifs said: {video_info["error"]}', expected=True) | ||||||
|  |  | ||||||
|  |         gif = video_info['gif'] | ||||||
|  |         urls = gif['urls'] | ||||||
|  |  | ||||||
|  |         quality = qualities(tuple(self._FORMATS.keys())) | ||||||
|  |  | ||||||
|  |         orig_height = int_or_none(gif.get('height')) | ||||||
|  |         aspect_ratio = try_get(gif, lambda x: orig_height / x['width']) | ||||||
|  |  | ||||||
|  |         formats = [] | ||||||
|  |         for format_id, height in self._FORMATS.items(): | ||||||
|  |             video_url = urls.get(format_id) | ||||||
|  |             if not video_url: | ||||||
|  |                 continue | ||||||
|  |             height = min(orig_height, height or orig_height) | ||||||
|  |             formats.append({ | ||||||
|  |                 'url': video_url, | ||||||
|  |                 'format_id': format_id, | ||||||
|  |                 'width': height * aspect_ratio if aspect_ratio else None, | ||||||
|  |                 'height': height, | ||||||
|  |                 'quality': quality(format_id), | ||||||
|  |             }) | ||||||
|  |         self._sort_formats(formats) | ||||||
|  |  | ||||||
|  |         return { | ||||||
|  |             'id': video_id, | ||||||
|  |             'title': ' '.join(gif.get('tags') or []) or 'RedGifs', | ||||||
|  |             'timestamp': int_or_none(gif.get('createDate')), | ||||||
|  |             'uploader': gif.get('userName'), | ||||||
|  |             'duration': int_or_none(gif.get('duration')), | ||||||
|  |             'view_count': int_or_none(gif.get('views')), | ||||||
|  |             'like_count': int_or_none(gif.get('likes')), | ||||||
|  |             'categories': gif.get('tags') or [], | ||||||
|  |             'age_limit': 18, | ||||||
|  |             'formats': formats, | ||||||
|  |         } | ||||||
		Reference in New Issue
	
	Block a user
	 chio0hai
					chio0hai