you-get/src/you_get/extractors/imgur.py

79 lines
2.6 KiB
Python
Raw Normal View History

2015-12-31 13:20:37 +03:00
#!/usr/bin/env python
from ..common import *
from ..extractor import VideoExtractor
from .universal import *
class Imgur(VideoExtractor):
name = "Imgur"
stream_types = [
{'id': 'original'},
{'id': 'thumbnail'},
]
def prepare(self, **kwargs):
if re.search(r'imgur\.com/a/', self.url):
# album
content = get_content(self.url)
album = match1(content, r'album\s*:\s*({.*}),') or \
match1(content, r'image\s*:\s*({.*}),')
album = json.loads(album)
2015-12-31 13:20:37 +03:00
count = album['album_images']['count']
images = album['album_images']['images']
ext = images[0]['ext']
self.streams = {
'original': {
'src': ['http://i.imgur.com/%s%s' % (i['hash'], ext)
for i in images],
'size': sum([i['size'] for i in images]),
'container': ext[1:]
},
'thumbnail': {
'src': ['http://i.imgur.com/%ss%s' % (i['hash'], '.jpg')
for i in images],
'container': 'jpg'
}
}
self.title = album['title']
elif re.search(r'i\.imgur\.com/', self.url):
# direct image
2016-03-16 22:36:02 +03:00
_, container, size = url_info(self.url)
self.streams = {
'original': {
'src': [self.url],
'size': size,
'container': container
}
}
self.title = r1(r'i\.imgur\.com/([^./]*)', self.url)
2015-12-31 13:20:37 +03:00
else:
# gallery image
content = get_content(self.url)
image = json.loads(match1(content, r'image\s*:\s*({.*}),'))
ext = image['ext']
self.streams = {
'original': {
'src': ['http://i.imgur.com/%s%s' % (image['hash'], ext)],
'size': image['size'],
'container': ext[1:]
},
'thumbnail': {
'src': ['http://i.imgur.com/%ss%s' % (image['hash'], '.jpg')],
'container': 'jpg'
}
}
self.title = image['title'] or image['hash']
2015-12-31 13:20:37 +03:00
def extract(self, **kwargs):
if 'stream_id' in kwargs and kwargs['stream_id']:
i = kwargs['stream_id']
if 'size' not in self.streams[i]:
self.streams[i]['size'] = urls_size(self.streams[i]['src'])
site = Imgur()
download = site.download_by_url
download_playlist = site.download_by_url