[gfycat] Add new extractor
This commit is contained in:
		
							parent
							
								
									8f02ad4f12
								
							
						
					
					
						commit
						afe4a8c769
					
				| @ -185,6 +185,7 @@ from .gametrailers import GametrailersIE | ||||
| from .gazeta import GazetaIE | ||||
| from .gdcvault import GDCVaultIE | ||||
| from .generic import GenericIE | ||||
| from .gfycat import GfycatIE | ||||
| from .giantbomb import GiantBombIE | ||||
| from .giga import GigaIE | ||||
| from .glide import GlideIE | ||||
|  | ||||
							
								
								
									
										107
									
								
								youtube_dl/extractor/gfycat.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								youtube_dl/extractor/gfycat.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,107 @@ | ||||
| # 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' | ||||
|         } | ||||
|     },{ | ||||
|         'url': 'http://gfycat.com/requiredunkemptbuzzard', | ||||
|         'info_dict': { | ||||
|             'id':          'requiredunkemptbuzzard', | ||||
|             'title':       'Headshot!', | ||||
|             'ext':         'gif', | ||||
|             'upload_date': '20150130' | ||||
|         } | ||||
|     }] | ||||
| 
 | ||||
|     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': '-1' | ||||
|         }, { | ||||
|             'format_id': 'webm', | ||||
|             'ext':       'webm', | ||||
|             'url':        json['webmUrl'], | ||||
|             'width':      json['width'], | ||||
|             'height':     json['height'], | ||||
|             'fps':        json['frameRate'], | ||||
|             'filesize':   json['webmSize'], | ||||
|             'preference': 0 | ||||
|         }, { | ||||
|             'format_id':  'gif', | ||||
|             'ext':        'gif', | ||||
|             'url':        json['gifUrl'], | ||||
|             'width':      json['width'], | ||||
|             'height':     json['height'], | ||||
|             'fps':        json['frameRate'], | ||||
|             'filesize':   json['gifSize'], | ||||
|             'preference': 1 | ||||
|         }] | ||||
|          | ||||
|         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'] | ||||
|         } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user