Browse Source

[gfycat] Add new extractor

totalwebcasting
FireDart 10 years ago
parent
commit
afe4a8c769
2 changed files with 108 additions and 0 deletions
  1. +1
    -0
      youtube_dl/extractor/__init__.py
  2. +107
    -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


+ 107
- 0
youtube_dl/extractor/gfycat.py View 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…
Cancel
Save