summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/imgur.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@ubuntu.com>2019-08-26 19:34:45 -0400
committerLibravatarUnit 193 <unit193@ubuntu.com>2019-08-26 19:34:45 -0400
commitb75d158d014d6c43d7d785c46c9372a9cf84d144 (patch)
tree7dca4a7e61fe8b6e2bff2142fc19891e783a7d6d /gallery_dl/extractor/imgur.py
parent64ad8e7bd15df71ab1116eede414558631bcad32 (diff)
New upstream version 1.10.2upstream/1.10.2
Diffstat (limited to 'gallery_dl/extractor/imgur.py')
-rw-r--r--gallery_dl/extractor/imgur.py67
1 files changed, 46 insertions, 21 deletions
diff --git a/gallery_dl/extractor/imgur.py b/gallery_dl/extractor/imgur.py
index c5e3d17..8523523 100644
--- a/gallery_dl/extractor/imgur.py
+++ b/gallery_dl/extractor/imgur.py
@@ -20,13 +20,19 @@ class ImgurExtractor(Extractor):
def __init__(self, match):
Extractor.__init__(self, match)
- self.item_id = match.group(1)
+ self.key = match.group(1)
self.mp4 = self.config("mp4", True)
- def _get_data(self, path):
+ def _extract_data(self, path):
response = self.request(self.root + path, notfound=self.subcategory)
- data = text.extract(response.text, "image : ", ",\n")[0]
- return self._clean(json.loads(data))
+ data = json.loads(text.extract(
+ response.text, "image : ", ",\n")[0])
+ try:
+ del data["adConfig"]
+ del data["isAd"]
+ except KeyError:
+ pass
+ return data
def _prepare(self, image):
image["ext"] = image["ext"].partition("?")[0]
@@ -37,18 +43,9 @@ class ImgurExtractor(Extractor):
image["extension"] = image["ext"][1:]
return url
- @staticmethod
- def _clean(data):
- try:
- del data["adConfig"]
- del data["isAd"]
- except KeyError:
- pass
- return data
-
class ImgurImageExtractor(ImgurExtractor):
- """Extractor for individual images from imgur.com"""
+ """Extractor for individual images on imgur.com"""
subcategory = "image"
filename_fmt = "{category}_{hash}{title:?_//}.{extension}"
archive_fmt = "{hash}"
@@ -101,22 +98,21 @@ class ImgurImageExtractor(ImgurExtractor):
)
def items(self):
- image = self._get_data("/" + self.item_id)
+ image = self._extract_data("/" + self.key)
url = self._prepare(image)
-
yield Message.Version, 1
yield Message.Directory, image
yield Message.Url, url, image
class ImgurAlbumExtractor(ImgurExtractor):
- """Extractor for image albums from imgur.com"""
+ """Extractor for imgur albums"""
subcategory = "album"
directory_fmt = ("{category}", "{album[hash]}{album[title]:? - //}")
filename_fmt = "{category}_{album[hash]}_{num:>03}_{hash}.{extension}"
archive_fmt = "{album[hash]}_{hash}"
pattern = (r"(?:https?://)?(?:www\.|m\.)?imgur\.com"
- r"/(?:a|gallery|t/unmuted)/(\w{7}|\w{5})")
+ r"/(?:a|t/unmuted)/(\w{7}|\w{5})")
test = (
("https://imgur.com/a/TcBmP", {
"url": "ce3552f550a5b5316bd9c7ae02e21e39f30c0563",
@@ -147,7 +143,7 @@ class ImgurAlbumExtractor(ImgurExtractor):
"width": int,
},
}),
- ("https://imgur.com/gallery/eD9CT", { # large album
+ ("https://imgur.com/a/eD9CT", { # large album
"url": "4ee94de31ff26be416271bc0b1ea27b9349c9937",
}),
("https://imgur.com/a/RhJXhVT/all", { # 7 character album hash
@@ -164,13 +160,13 @@ class ImgurAlbumExtractor(ImgurExtractor):
)
def items(self):
- album = self._get_data("/a/" + self.item_id + "/all")
+ album = self._extract_data("/a/" + self.key + "/all")
images = album["album_images"]["images"]
del album["album_images"]
if int(album["num_images"]) > len(images):
url = "{}/ajaxalbums/getimages/{}/hit.json".format(
- self.root, self.item_id)
+ self.root, self.key)
images = self.request(url).json()["data"]["images"]
yield Message.Version, 1
@@ -180,3 +176,32 @@ class ImgurAlbumExtractor(ImgurExtractor):
image["num"] = num
image["album"] = album
yield Message.Url, url, image
+
+
+class ImgurGalleryExtractor(ImgurExtractor):
+ """Extractor for imgur galleries"""
+ subcategory = "gallery"
+ pattern = (r"(?:https?://)?(?:www\.|m\.)?imgur\.com"
+ r"/gallery/(\w{7}|\w{5})")
+ test = (
+ ("https://imgur.com/gallery/zf2fIms", { # non-album gallery (#380)
+ "pattern": "https://imgur.com/zf2fIms",
+ }),
+ ("https://imgur.com/gallery/eD9CT", {
+ "pattern": "https://imgur.com/a/eD9CT",
+ }),
+ )
+
+ def items(self):
+ url = self.root + "/a/" + self.key
+ with self.request(url, method="HEAD", fatal=False) as response:
+ code = response.status_code
+
+ if code < 400:
+ extr = ImgurAlbumExtractor
+ else:
+ extr = ImgurImageExtractor
+ url = self.root + "/" + self.key
+
+ yield Message.Version, 1
+ yield Message.Queue, url, {"_extractor": extr}