diff --git a/gallery_dl/extractor/imagechest.py b/gallery_dl/extractor/imagechest.py
index abd14900..159feba0 100644
--- a/gallery_dl/extractor/imagechest.py
+++ b/gallery_dl/extractor/imagechest.py
@@ -10,8 +10,7 @@
"""Extractors for https://imgchest.com/"""
from .common import GalleryExtractor, Extractor, Message
-from .. import text, exception
-import json
+from .. import text, util, exception
BASE_PATTERN = r"(?:https?://)?(?:www\.)?imgchest\.com"
@@ -34,65 +33,23 @@ class ImagechestGalleryExtractor(GalleryExtractor):
self.api = ImagechestAPI(self, access_token)
self.gallery_url = None
self.metadata = self._metadata_api
- self.images = self._images_api
def metadata(self, page):
- if "Not Found" in page:
- raise exception.NotFoundError("gallery")
-
- page_data = self._retrieve_page_data(page)
-
- metadata = {
- "gallery_id": self.gallery_id
- }
-
- for attribute in [
- "id",
- "slug",
- "status",
- "title",
- "nsfw",
- "score",
- "comments",
- "upvotes",
- "downvotes",
- "favorites",
- "views",
- "created"
- ]:
- try:
- metadata[attribute] = page_data["props"]["post"][attribute]
- except Exception:
- pass
-
try:
- metadata["tags"] = ",".join(page_data["props"]["post"]["tags"])
+ data = util.json_loads(text.unescape(text.extr(
+ page, 'data-page="', '"')))
+ post = data["props"]["post"]
except Exception:
- pass
+ if "
Not Found" in page:
+ raise exception.NotFoundError("gallery")
+ self.files = ()
+ return {}
- return metadata
+ self.files = post.pop("files", ())
+ post["gallery_id"] = self.gallery_id
+ post["tags"] = [tag["name"] for tag in post["tags"]]
- def images(self, page):
- page_data = self._retrieve_page_data(page)
-
- try:
- return [
- (file["link"], None)
- for file in page_data["props"]["post"]["files"]
- ]
- except Exception:
- return []
-
- def _retrieve_page_data(self, page):
- return json.loads(
- text.unescape(
- text.extr(
- page,
- begin='data-page="',
- end='"',
- default='{}')
- )
- )
+ return post
def _metadata_api(self, page):
post = self.api.post(self.gallery_id)
@@ -105,15 +62,18 @@ class ImagechestGalleryExtractor(GalleryExtractor):
post["gallery_id"] = self.gallery_id
post.pop("image_count", None)
- self._image_list = post.pop("images")
+ self.files = post.pop("images")
return post
- def _images_api(self, page):
- return [
- (img["link"], img)
- for img in self._image_list
- ]
+ def images(self, page):
+ try:
+ return [
+ (file["link"], file)
+ for file in self.files
+ ]
+ except Exception:
+ return ()
class ImagechestUserExtractor(Extractor):
@@ -124,10 +84,6 @@ class ImagechestUserExtractor(Extractor):
pattern = BASE_PATTERN + r"/u/([^/?#]+)"
example = "https://imgchest.com/u/USER"
- def __init__(self, match):
- Extractor.__init__(self, match)
- self.user = match.group(1)
-
def items(self):
url = self.root + "/api/posts"
params = {
@@ -135,7 +91,7 @@ class ImagechestUserExtractor(Extractor):
"sort" : "new",
"tag" : "",
"q" : "",
- "username": text.unquote(self.user),
+ "username": text.unquote(self.groups[0]),
"nsfw" : "true",
}
@@ -145,6 +101,9 @@ class ImagechestUserExtractor(Extractor):
except (TypeError, KeyError):
return
+ if not data:
+ return
+
for gallery in data:
gallery["_extractor"] = ImagechestGalleryExtractor
yield Message.Queue, gallery["link"], gallery