mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-10-31 14:45:14 +00:00 
			
		
		
		
	Merge branch 'gfycat' of https://github.com/julianrichen/youtube-dl into julianrichen-gfycat
This commit is contained in:
		| @@ -185,6 +185,7 @@ from .gametrailers import GametrailersIE | |||||||
| from .gazeta import GazetaIE | from .gazeta import GazetaIE | ||||||
| from .gdcvault import GDCVaultIE | from .gdcvault import GDCVaultIE | ||||||
| from .generic import GenericIE | from .generic import GenericIE | ||||||
|  | from .gfycat import GfycatIE | ||||||
| from .giantbomb import GiantBombIE | from .giantbomb import GiantBombIE | ||||||
| from .giga import GigaIE | from .giga import GigaIE | ||||||
| from .glide import GlideIE | from .glide import GlideIE | ||||||
|   | |||||||
							
								
								
									
										115
									
								
								youtube_dl/extractor/gfycat.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										115
									
								
								youtube_dl/extractor/gfycat.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,115 @@ | |||||||
|  | # coding: utf-8 | ||||||
|  |  | ||||||
|  | from __future__ import unicode_literals | ||||||
|  |  | ||||||
|  | import datetime | ||||||
|  |  | ||||||
|  | from .common import InfoExtractor | ||||||
|  |  | ||||||
|  | class GfycatIE(InfoExtractor): | ||||||
|  |     _VALID_URL = r'https?://(?:www\.)?gfycat\.com/(?P<id>[^/?#]+)' | ||||||
|  |     _TESTS = [ | ||||||
|  |         { | ||||||
|  |             'url': 'http://gfycat.com/DeadlyDecisiveGermanpinscher', | ||||||
|  |             'info_dict': { | ||||||
|  |                 'id':          'DeadlyDecisiveGermanpinscher', | ||||||
|  |                 'title':       'Ghost in the Shell', | ||||||
|  |                 'ext':         'mp4', | ||||||
|  |                 'upload_date': '20140913' | ||||||
|  |             } | ||||||
|  |         },{ | ||||||
|  |             'url': 'http://gfycat.com/pleasinghilariouskusimanse', | ||||||
|  |             'info_dict': { | ||||||
|  |                 'id':          'pleasinghilariouskusimanse', | ||||||
|  |                 'title':       'PleasingHilariousKusimanse', | ||||||
|  |                 'ext':         'webm', | ||||||
|  |                 'upload_date': '20150412' | ||||||
|  |             }, | ||||||
|  |             'params': { | ||||||
|  |                 'format': 'webm', | ||||||
|  |             }, | ||||||
|  |         },{ | ||||||
|  |             'url': 'http://gfycat.com/requiredunkemptbuzzard', | ||||||
|  |             'info_dict': { | ||||||
|  |                 'id':          'requiredunkemptbuzzard', | ||||||
|  |                 'title':       'Headshot!', | ||||||
|  |                 'ext':         'gif', | ||||||
|  |                 'upload_date': '20150129' | ||||||
|  |             }, | ||||||
|  |             'params': { | ||||||
|  |                 'format': 'gif', | ||||||
|  |             }, | ||||||
|  |         }, | ||||||
|  |     ] | ||||||
|  |  | ||||||
|  |     def _real_extract(self, url): | ||||||
|  |         video_id = self._match_id(url) | ||||||
|  |         json     = self._download_json("http://gfycat.com/cajax/get/" + video_id, video_id, 'Downloading video info')['gfyItem'] | ||||||
|  |          | ||||||
|  |         # Title | ||||||
|  |         # Use user title first, else fallback to url formated name | ||||||
|  |         if json['title']: | ||||||
|  |             video_title = json['title'] | ||||||
|  |         else: | ||||||
|  |             video_title = json['gfyName'] | ||||||
|  |          | ||||||
|  |         # Formats | ||||||
|  |         # Pref: mp4, webm, gif | ||||||
|  |         formats = [{ | ||||||
|  |             'format_id':  'mp4', | ||||||
|  |             'ext':        'mp4', | ||||||
|  |             'url':        json['mp4Url'], | ||||||
|  |             'width':      json['width'], | ||||||
|  |             'height':     json['height'], | ||||||
|  |             'fps':        json['frameRate'], | ||||||
|  |             'filesize':   json['mp4Size'], | ||||||
|  |             'preference': 2 | ||||||
|  |         }, { | ||||||
|  |             'format_id': 'webm', | ||||||
|  |             'ext':       'webm', | ||||||
|  |             'url':        json['webmUrl'], | ||||||
|  |             'width':      json['width'], | ||||||
|  |             'height':     json['height'], | ||||||
|  |             'fps':        json['frameRate'], | ||||||
|  |             'filesize':   json['webmSize'], | ||||||
|  |             'preference': 1 | ||||||
|  |         }, { | ||||||
|  |             'format_id':  'gif', | ||||||
|  |             'ext':        'gif', | ||||||
|  |             'url':        json['gifUrl'], | ||||||
|  |             'width':      json['width'], | ||||||
|  |             'height':     json['height'], | ||||||
|  |             'fps':        json['frameRate'], | ||||||
|  |             'filesize':   json['gifSize'], | ||||||
|  |             'preference': 0 | ||||||
|  |         }] | ||||||
|  |          | ||||||
|  |         self._sort_formats(formats) | ||||||
|  |          | ||||||
|  |         # Date | ||||||
|  |         date = datetime.datetime.fromtimestamp( | ||||||
|  |             int(json['createDate']) | ||||||
|  |         ).strftime('%Y%m%d') | ||||||
|  |          | ||||||
|  |         # Length | ||||||
|  |         duration = json['numFrames'] / json['frameRate'] | ||||||
|  |          | ||||||
|  |         # Age limit | ||||||
|  |         # 1 = nsfw / 0 = sfw | ||||||
|  |         if json['nsfw'] == 1: | ||||||
|  |             age_limit = 18 | ||||||
|  |         else: | ||||||
|  |             age_limit = 0 | ||||||
|  |          | ||||||
|  |         return { | ||||||
|  |             'id':          video_id, | ||||||
|  |             'title':       video_title, | ||||||
|  |             'formats':     formats, | ||||||
|  |             'creator':     json['userName'], | ||||||
|  |             'description': json['description'], | ||||||
|  |             'upload_date': date, | ||||||
|  |             'categories':  json['tags'], | ||||||
|  |             'age_limit':   age_limit, | ||||||
|  |             'duration':    duration, | ||||||
|  |             'view_count':  json['views'] | ||||||
|  |         } | ||||||
		Reference in New Issue
	
	Block a user
	 Sergey M․
					Sergey M․