diff options
Diffstat (limited to 'gallery_dl/extractor/e621.py')
| -rw-r--r-- | gallery_dl/extractor/e621.py | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/gallery_dl/extractor/e621.py b/gallery_dl/extractor/e621.py index 71c3b30..cc6708d 100644 --- a/gallery_dl/extractor/e621.py +++ b/gallery_dl/extractor/e621.py @@ -51,13 +51,18 @@ class E621Extractor(danbooru.DanbooruExtractor): post["filename"] = file["md5"] post["extension"] = file["ext"] - post["date"] = text.parse_datetime( - post["created_at"], "%Y-%m-%dT%H:%M:%S.%f%z") + post["date"] = self.parse_datetime_iso(post["created_at"]) post.update(data) - yield Message.Directory, post + yield Message.Directory, "", post yield Message.Url, file["url"], post + def items_artists(self): + for artist in self.artists(): + artist["_extractor"] = E621TagExtractor + url = f"{self.root}/posts?tags={text.quote(artist['name'])}" + yield Message.Queue, url, artist + def _get_notes(self, id): return self.request_json( f"{self.root}/notes.json?search[post_id]={id}") @@ -89,13 +94,13 @@ BASE_PATTERN = E621Extractor.update({ class E621TagExtractor(E621Extractor, danbooru.DanbooruTagExtractor): """Extractor for e621 posts from tag searches""" - pattern = BASE_PATTERN + r"/posts?(?:\?[^#]*?tags=|/index/\d+/)([^&#]*)" + pattern = rf"{BASE_PATTERN}/posts?(?:\?[^#]*?tags=|/index/\d+/)([^&#]*)" example = "https://e621.net/posts?tags=TAG" class E621PoolExtractor(E621Extractor, danbooru.DanbooruPoolExtractor): """Extractor for e621 pools""" - pattern = BASE_PATTERN + r"/pool(?:s|/show)/(\d+)" + pattern = rf"{BASE_PATTERN}/pool(?:s|/show)/(\d+)" example = "https://e621.net/pools/12345" def posts(self): @@ -120,7 +125,7 @@ class E621PoolExtractor(E621Extractor, danbooru.DanbooruPoolExtractor): class E621PostExtractor(E621Extractor, danbooru.DanbooruPostExtractor): """Extractor for single e621 posts""" - pattern = BASE_PATTERN + r"/post(?:s|/show)/(\d+)" + pattern = rf"{BASE_PATTERN}/post(?:s|/show)/(\d+)" example = "https://e621.net/posts/12345" def posts(self): @@ -130,19 +135,38 @@ class E621PostExtractor(E621Extractor, danbooru.DanbooruPostExtractor): class E621PopularExtractor(E621Extractor, danbooru.DanbooruPopularExtractor): """Extractor for popular images from e621""" - pattern = BASE_PATTERN + r"/explore/posts/popular(?:\?([^#]*))?" + pattern = rf"{BASE_PATTERN}/explore/posts/popular(?:\?([^#]*))?" example = "https://e621.net/explore/posts/popular" def posts(self): return self._pagination("/popular.json", self.params) +class E621ArtistExtractor(E621Extractor, danbooru.DanbooruArtistExtractor): + """Extractor for e621 artists""" + subcategory = "artist" + pattern = rf"{BASE_PATTERN}/artists/(\d+)" + example = "https://e621.net/artists/12345" + + items = E621Extractor.items_artists + + +class E621ArtistSearchExtractor(E621Extractor, + danbooru.DanbooruArtistSearchExtractor): + """Extractor for e621 artist searches""" + subcategory = "artist-search" + pattern = rf"{BASE_PATTERN}/artists/?\?([^#]+)" + example = "https://e621.net/artists?QUERY" + + items = E621Extractor.items_artists + + class E621FavoriteExtractor(E621Extractor): """Extractor for e621 favorites""" subcategory = "favorite" directory_fmt = ("{category}", "Favorites", "{user_id}") archive_fmt = "f_{user_id}_{id}" - pattern = BASE_PATTERN + r"/favorites(?:\?([^#]*))?" + pattern = rf"{BASE_PATTERN}/favorites(?:\?([^#]*))?" example = "https://e621.net/favorites" def metadata(self): |
