diff options
| author | FireDart <firedartonline@gmail.com> | 2015-04-15 22:17:45 -0400 | 
|---|---|---|
| committer | FireDart <firedartonline@gmail.com> | 2015-04-15 22:17:45 -0400 | 
| commit | afe4a8c7699e70ecaa7f273b55a038b4d8a1050f (patch) | |
| tree | a83a9c08e21f6d46550abb1cd4860b3f202d26ec /youtube_dl/extractor/gfycat.py | |
| parent | 8f02ad4f12549865a2a4436328075f4b20b906ef (diff) | |
[gfycat] Add new extractor
Diffstat (limited to 'youtube_dl/extractor/gfycat.py')
| -rw-r--r-- | youtube_dl/extractor/gfycat.py | 107 | 
1 files changed, 107 insertions, 0 deletions
| diff --git a/youtube_dl/extractor/gfycat.py b/youtube_dl/extractor/gfycat.py new file mode 100644 index 000000000..d103693cd --- /dev/null +++ b/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'] +        } | 
