]>
Raphaƫl G. Git Repositories - youtubedl/blob - youtube_dl/extractor/imgur.py
   1 from __future__ 
import unicode_literals
 
   5 from .common 
import InfoExtractor
 
   6 from ..compat 
import compat_urlparse
 
  15 class ImgurIE(InfoExtractor
): 
  16     _VALID_URL 
= r
'https?://(?:i\.)?imgur\.com/(?:(?:gallery|topic/[^/]+)/)?(?P<id>[a-zA-Z0-9]{6,})(?:[/?#&]+|\.[a-z]+)?$' 
  19         'url': 'https://i.imgur.com/A61SaA1.gifv', 
  23             'title': 're:Imgur GIF$|MRW gifv is up and running without any bugs$', 
  24             'description': 'Imgur: The most awesome images on the Internet.', 
  27         'url': 'https://imgur.com/A61SaA1', 
  31             'title': 're:Imgur GIF$|MRW gifv is up and running without any bugs$', 
  32             'description': 'Imgur: The most awesome images on the Internet.', 
  35         'url': 'https://imgur.com/gallery/YcAQlkx', 
  39             'title': 'Classic Steve Carell gif...cracks me up everytime....damn the repost downvotes....', 
  40             'description': 'Imgur: The most awesome images on the Internet.' 
  44         'url': 'http://imgur.com/topic/Funny/N8rOudd', 
  45         'only_matching': True, 
  48     def _real_extract(self
, url
): 
  49         video_id 
= self
._match
_id
(url
) 
  50         webpage 
= self
._download
_webpage
( 
  51             compat_urlparse
.urljoin(url
, video_id
), video_id
) 
  53         width 
= int_or_none(self
._search
_regex
( 
  54             r
'<param name="width" value="([0-9]+)"', 
  55             webpage
, 'width', fatal
=False)) 
  56         height 
= int_or_none(self
._search
_regex
( 
  57             r
'<param name="height" value="([0-9]+)"', 
  58             webpage
, 'height', fatal
=False)) 
  60         video_elements 
= self
._search
_regex
( 
  61             r
'(?s)<div class="video-elements">(.*?)</div>', 
  62             webpage
, 'video elements', default
=None) 
  63         if not video_elements
: 
  65                 'No sources found for video %s. Maybe an image?' % video_id
, 
  69         for m 
in re
.finditer(r
'<source\s+src="(?P<src>[^"]+)"\s+type="(?P<type>[^"]+)"', video_elements
): 
  71                 'format_id': m
.group('type').partition('/')[2], 
  72                 'url': self
._proto
_relative
_url
(m
.group('src')), 
  73                 'ext': mimetype2ext(m
.group('type')), 
  78                     'User-Agent': 'youtube-dl (like wget)', 
  82         gif_json 
= self
._search
_regex
( 
  83             r
'(?s)var\s+videoItem\s*=\s*(\{.*?\})', 
  84             webpage
, 'GIF code', fatal
=False) 
  86             gifd 
= self
._parse
_json
( 
  87                 gif_json
, video_id
, transform_source
=js_to_json
) 
  97                 'url': self
._proto
_relative
_url
(gifd
['gifUrl']), 
  98                 'filesize': gifd
.get('size'), 
 100                     'User-Agent': 'youtube-dl (like wget)', 
 104         self
._sort
_formats
(formats
) 
 109             'description': self
._og
_search
_description
(webpage
), 
 110             'title': self
._og
_search
_title
(webpage
), 
 114 class ImgurAlbumIE(InfoExtractor
): 
 115     _VALID_URL 
= r
'https?://(?:i\.)?imgur\.com/(?:(?:a|gallery|topic/[^/]+)/)?(?P<id>[a-zA-Z0-9]{5})(?:[/?#&]+)?$' 
 118         'url': 'http://imgur.com/gallery/Q95ko', 
 122         'playlist_count': 25, 
 124         'url': 'http://imgur.com/a/j6Orj', 
 125         'only_matching': True, 
 127         'url': 'http://imgur.com/topic/Aww/ll5Vk', 
 128         'only_matching': True, 
 131     def _real_extract(self
, url
): 
 132         album_id 
= self
._match
_id
(url
) 
 134         album_images 
= self
._download
_json
( 
 135             'http://imgur.com/gallery/%s/album_images/hit.json?all=true' % album_id
, 
 136             album_id
, fatal
=False) 
 139             data 
= album_images
.get('data') 
 140             if data 
and isinstance(data
, dict): 
 141                 images 
= data
.get('images') 
 142                 if images 
and isinstance(images
, list): 
 144                         self
.url_result('http://imgur.com/%s' % image
['hash']) 
 145                         for image 
in images 
if image
.get('hash')] 
 146                     return self
.playlist_result(entries
, album_id
) 
 148         # Fallback to single video 
 149         return self
.url_result('http://imgur.com/%s' % album_id
, ImgurIE
.ie_key())