Merge branch 'gfycat' of https://github.com/julianrichen/youtube-dl into julianrichen-gfycat

This commit is contained in:
Sergey M․ 2015-04-18 03:49:32 +06:00
commit ca75235d3d
2 changed files with 116 additions and 0 deletions

View File

@ -185,6 +185,7 @@
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

View 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']
}