diff --git a/docs/supportedsites.md b/docs/supportedsites.md index 07aff3d9..1865f82e 100644 --- a/docs/supportedsites.md +++ b/docs/supportedsites.md @@ -352,7 +352,7 @@ Consider all listed sites to potentially be NSFW. ImageChest https://imgchest.com/ - Galleries + Galleries, User Profiles diff --git a/gallery_dl/extractor/imagechest.py b/gallery_dl/extractor/imagechest.py index 9199d125..115fff32 100644 --- a/gallery_dl/extractor/imagechest.py +++ b/gallery_dl/extractor/imagechest.py @@ -9,15 +9,17 @@ """Extractors for https://imgchest.com/""" -from .common import GalleryExtractor +from .common import GalleryExtractor, Extractor, Message from .. import text, exception +BASE_PATTERN = r"(?:https?://)?(?:www\.)?imgchest\.com" + class ImagechestGalleryExtractor(GalleryExtractor): """Extractor for image galleries from imgchest.com""" category = "imagechest" root = "https://imgchest.com" - pattern = r"(?:https?://)?(?:www\.)?imgchest\.com/p/([A-Za-z0-9]{11})" + pattern = BASE_PATTERN + r"/p/([A-Za-z0-9]{11})" example = "https://imgchest.com/p/abcdefghijk" def __init__(self, match): @@ -83,6 +85,42 @@ class ImagechestGalleryExtractor(GalleryExtractor): ] +class ImagechestUserExtractor(Extractor): + """Extractor for imgchest.com user profiles""" + category = "imagechest" + subcategory = "user" + root = "https://imgchest.com" + 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 = { + "page" : 1, + "sort" : "new", + "tag" : "", + "q" : "", + "username": text.unquote(self.user), + "nsfw" : "true", + } + + while True: + try: + data = self.request(url, params=params).json()["data"] + except (TypeError, KeyError): + return + + for gallery in data: + gallery["_extractor"] = ImagechestGalleryExtractor + yield Message.Queue, gallery["link"], gallery + + params["page"] += 1 + + class ImagechestAPI(): """Interface for the Image Chest API diff --git a/test/results/imagechest.py b/test/results/imagechest.py index 4b6a2ba3..41254a39 100644 --- a/test/results/imagechest.py +++ b/test/results/imagechest.py @@ -41,4 +41,12 @@ __tests__ = ( "#exception": exception.NotFoundError, }, +{ + "#url" : "https://imgchest.com/u/LunarLandr", + "#category": ("", "imagechest", "user"), + "#class" : imagechest.ImagechestUserExtractor, + "#pattern" : imagechest.ImagechestGalleryExtractor.pattern, + "#count" : 279, +}, + )