Browse Source

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

totalwebcasting
Sergey M․ 10 years ago
parent
commit
ca75235d3d
2 changed files with 116 additions and 0 deletions
  1. +1
    -0
      youtube_dl/extractor/__init__.py
  2. +115
    -0
      youtube_dl/extractor/gfycat.py

+ 1
- 0
youtube_dl/extractor/__init__.py View File

@ -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


+ 115
- 0
youtube_dl/extractor/gfycat.py 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']
}

Loading…
Cancel
Save