Browse Source

[gfycat] Add new extractor

master
FireDart 9 years ago
parent
commit
afe4a8c769
2 changed files with 108 additions and 0 deletions
  1. 1
      youtube_dl/extractor/__init__.py
  2. 107
      youtube_dl/extractor/gfycat.py

1
youtube_dl/extractor/__init__.py

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

@ -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…
Cancel
Save