diff options
| author | 2025-12-20 05:49:04 -0500 | |
|---|---|---|
| committer | 2025-12-20 05:49:04 -0500 | |
| commit | a24ec1647aeac35a63b744ea856011ad6e06be3b (patch) | |
| tree | ae94416de786aeddd05d99559098f7f16bb103a6 /gallery_dl/extractor/itaku.py | |
| parent | 33f8a8a37a9cba738ef25fb99955f0730da9eb48 (diff) | |
New upstream version 1.31.1.upstream/1.31.1
Diffstat (limited to 'gallery_dl/extractor/itaku.py')
| -rw-r--r-- | gallery_dl/extractor/itaku.py | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/gallery_dl/extractor/itaku.py b/gallery_dl/extractor/itaku.py index 19ffc50..566ee8b 100644 --- a/gallery_dl/extractor/itaku.py +++ b/gallery_dl/extractor/itaku.py @@ -13,7 +13,7 @@ from ..cache import memcache from .. import text, util BASE_PATTERN = r"(?:https?://)?itaku\.ee" -USER_PATTERN = BASE_PATTERN + r"/profile/([^/?#]+)" +USER_PATTERN = rf"{BASE_PATTERN}/profile/([^/?#]+)" class ItakuExtractor(Extractor): @@ -32,8 +32,7 @@ class ItakuExtractor(Extractor): def items(self): if images := self.images(): for image in images: - image["date"] = text.parse_datetime( - image["date_added"], "%Y-%m-%dT%H:%M:%S.%fZ") + image["date"] = self.parse_datetime_iso(image["date_added"]) for category, tags in image.pop("categorized_tags").items(): image[f"tags_{category.lower()}"] = [ t["name"] for t in tags] @@ -52,7 +51,7 @@ class ItakuExtractor(Extractor): else: url = image["image"] - yield Message.Directory, image + yield Message.Directory, "", image yield Message.Url, url, text.nameext_from_url(url, image) return @@ -60,15 +59,14 @@ class ItakuExtractor(Extractor): for post in posts: images = post.pop("gallery_images") or () post["count"] = len(images) - post["date"] = text.parse_datetime( - post["date_added"], "%Y-%m-%dT%H:%M:%S.%fZ") + post["date"] = self.parse_datetime_iso(post["date_added"]) post["tags"] = [t["name"] for t in post["tags"]] - yield Message.Directory, post + yield Message.Directory, "", post for post["num"], image in enumerate(images, 1): post["file"] = image - image["date"] = text.parse_datetime( - image["date_added"], "%Y-%m-%dT%H:%M:%S.%fZ") + image["date"] = self.parse_datetime_iso( + image["date_added"]) url = image["image"] yield Message.Url, url, text.nameext_from_url(url, post) @@ -88,7 +86,7 @@ class ItakuExtractor(Extractor): class ItakuGalleryExtractor(ItakuExtractor): """Extractor for an itaku user's gallery""" subcategory = "gallery" - pattern = USER_PATTERN + r"/gallery(?:/(\d+))?" + pattern = rf"{USER_PATTERN}/gallery(?:/(\d+))?" example = "https://itaku.ee/profile/USER/gallery" def images(self): @@ -106,7 +104,7 @@ class ItakuPostsExtractor(ItakuExtractor): "{id}{title:? //}") filename_fmt = "{file[id]}{file[title]:? //}.{extension}" archive_fmt = "{id}_{file[id]}" - pattern = USER_PATTERN + r"/posts(?:/(\d+))?" + pattern = rf"{USER_PATTERN}/posts(?:/(\d+))?" example = "https://itaku.ee/profile/USER/posts" def posts(self): @@ -120,7 +118,7 @@ class ItakuPostsExtractor(ItakuExtractor): class ItakuStarsExtractor(ItakuExtractor): """Extractor for an itaku user's starred images""" subcategory = "stars" - pattern = USER_PATTERN + r"/stars(?:/(\d+))?" + pattern = rf"{USER_PATTERN}/stars(?:/(\d+))?" example = "https://itaku.ee/profile/USER/stars" def images(self): @@ -134,7 +132,7 @@ class ItakuStarsExtractor(ItakuExtractor): class ItakuFollowingExtractor(ItakuExtractor): subcategory = "following" - pattern = USER_PATTERN + r"/following" + pattern = rf"{USER_PATTERN}/following" example = "https://itaku.ee/profile/USER/following" def users(self): @@ -145,7 +143,7 @@ class ItakuFollowingExtractor(ItakuExtractor): class ItakuFollowersExtractor(ItakuExtractor): subcategory = "followers" - pattern = USER_PATTERN + r"/followers" + pattern = rf"{USER_PATTERN}/followers" example = "https://itaku.ee/profile/USER/followers" def users(self): @@ -157,7 +155,7 @@ class ItakuFollowersExtractor(ItakuExtractor): class ItakuBookmarksExtractor(ItakuExtractor): """Extractor for an itaku bookmarks folder""" subcategory = "bookmarks" - pattern = USER_PATTERN + r"/bookmarks/(image|user)/(\d+)" + pattern = rf"{USER_PATTERN}/bookmarks/(image|user)/(\d+)" example = "https://itaku.ee/profile/USER/bookmarks/image/12345" def _init(self): @@ -178,23 +176,23 @@ class ItakuBookmarksExtractor(ItakuExtractor): class ItakuUserExtractor(Dispatch, ItakuExtractor): """Extractor for itaku user profiles""" - pattern = USER_PATTERN + r"/?(?:$|\?|#)" + pattern = rf"{USER_PATTERN}/?(?:$|\?|#)" example = "https://itaku.ee/profile/USER" def items(self): base = f"{self.root}/profile/{self.groups[0]}/" return self._dispatch_extractors(( - (ItakuGalleryExtractor , base + "gallery"), - (ItakuPostsExtractor , base + "posts"), - (ItakuFollowersExtractor, base + "followers"), - (ItakuFollowingExtractor, base + "following"), - (ItakuStarsExtractor , base + "stars"), + (ItakuGalleryExtractor , f"{base}gallery"), + (ItakuPostsExtractor , f"{base}posts"), + (ItakuFollowersExtractor, f"{base}followers"), + (ItakuFollowingExtractor, f"{base}following"), + (ItakuStarsExtractor , f"{base}stars"), ), ("gallery",)) class ItakuImageExtractor(ItakuExtractor): subcategory = "image" - pattern = BASE_PATTERN + r"/images/(\d+)" + pattern = rf"{BASE_PATTERN}/images/(\d+)" example = "https://itaku.ee/images/12345" def images(self): @@ -207,7 +205,7 @@ class ItakuPostExtractor(ItakuExtractor): "{id}{title:? //}") filename_fmt = "{file[id]}{file[title]:? //}.{extension}" archive_fmt = "{id}_{file[id]}" - pattern = BASE_PATTERN + r"/posts/(\d+)" + pattern = rf"{BASE_PATTERN}/posts/(\d+)" example = "https://itaku.ee/posts/12345" def posts(self): @@ -216,7 +214,7 @@ class ItakuPostExtractor(ItakuExtractor): class ItakuSearchExtractor(ItakuExtractor): subcategory = "search" - pattern = BASE_PATTERN + r"/home/images/?\?([^#]+)" + pattern = rf"{BASE_PATTERN}/home/images/?\?([^#]+)" example = "https://itaku.ee/home/images?tags=SEARCH" def images(self): @@ -248,7 +246,7 @@ class ItakuAPI(): def __init__(self, extractor): self.extractor = extractor - self.root = extractor.root + "/api" + self.root = f"{extractor.root}/api" self.headers = { "Accept": "application/json, text/plain, */*", } @@ -259,7 +257,7 @@ class ItakuAPI(): "cursor" : None, "date_range": "", "maturity_rating": ("SFW", "Questionable", "NSFW"), - "ordering" : "-date_added", + "ordering" : self._order(), "page" : "1", "page_size" : "30", "visibility": ("PUBLIC", "PROFILE_ONLY"), @@ -273,7 +271,7 @@ class ItakuAPI(): "cursor" : None, "date_range": "", "maturity_rating": ("SFW", "Questionable", "NSFW"), - "ordering" : "-date_added", + "ordering" : self._order(), "page" : "1", "page_size" : "30", **params, @@ -284,7 +282,7 @@ class ItakuAPI(): endpoint = "/user_profiles/" params = { "cursor" : None, - "ordering" : "-date_added", + "ordering" : self._order(), "page" : "1", "page_size": "50", "sfw_only" : "false", @@ -311,7 +309,7 @@ class ItakuAPI(): def _call(self, endpoint, params=None): if not endpoint.startswith("http"): - endpoint = self.root + endpoint + endpoint = f"{self.root}{endpoint}" return self.extractor.request_json( endpoint, params=params, headers=self.headers) @@ -330,3 +328,11 @@ class ItakuAPI(): return data = self._call(url_next) + + def _order(self): + if order := self.extractor.config("order"): + if order in {"a", "asc", "r", "reverse"}: + return "date_added" + if order not in {"d", "desc"}: + return order + return "-date_added" |
