diff --git a/docs/supportedsites.rst b/docs/supportedsites.rst index 546c9fc5..e16cd69b 100644 --- a/docs/supportedsites.rst +++ b/docs/supportedsites.rst @@ -22,7 +22,7 @@ Fallen Angels Scans https://www.fascans.com/ Chapters, Manga Fireden https://boards.fireden.net/ Threads Flickr https://www.flickr.com/ |Images from Use-2| Optional (OAuth) Futaba Channel https://www.2chan.net/ Threads -Gelbooru https://gelbooru.com/ Posts, Tag-Searches +Gelbooru https://gelbooru.com/ Pools, Posts, Tag-Searches Gfycat https://gfycat.com/ individual Images GoManga https://gomanga.co/ Chapters, Manga HBrowse http://www.hbrowse.com/ Chapters, Manga diff --git a/gallery_dl/extractor/deviantart.py b/gallery_dl/extractor/deviantart.py index 388e2373..c7cc1fd9 100644 --- a/gallery_dl/extractor/deviantart.py +++ b/gallery_dl/extractor/deviantart.py @@ -301,7 +301,7 @@ class DeviantartCollectionExtractor(DeviantartExtractor): test = [(("https://pencilshadings.deviantart.com" "/favourites/70595441/3D-Favorites"), { "url": "36ea299132a6b0a0cd319318e9bf18ad32e9b8cc", - "keyword": "6aada4e3159ca09ff8de9bae880952ce3b46d529", + "keyword": "e32b1840f1e09d1671bdc0f8a7a72472a0df57a8", "options": (("original", False),), })] diff --git a/gallery_dl/extractor/gelbooru.py b/gallery_dl/extractor/gelbooru.py index 6d83bc72..6aafbe9a 100644 --- a/gallery_dl/extractor/gelbooru.py +++ b/gallery_dl/extractor/gelbooru.py @@ -8,40 +8,122 @@ """Extract images from https://gelbooru.com/""" -from . import booru +from .common import SharedConfigExtractor, Message +from .. import text, util -class GelbooruExtractor(booru.XMLBooruExtractor): +class GelbooruExtractor(SharedConfigExtractor): """Base class for gelbooru extractors""" + basecategory = "booru" category = "gelbooru" - api_url = "https://gelbooru.com/" - pagestart = 0 - pagekey = "pid" + filename_fmt = "{category}_{id}_{md5}.{extension}" - def setup(self): - self.params.update({"page": "dapi", "s": "post", "q": "index"}) + def items(self): + yield Message.Version, 1 + yield Message.Directory, self.get_metadata() + for post_id in self.posts(): + data = self.get_post_data(post_id) + url = data["file_url"] + yield Message.Url, url, text.nameext_from_url(url, data) -class GelbooruTagExtractor(GelbooruExtractor, booru.BooruTagExtractor): + def posts(self): + """Return an iterable containing all relevant post ids""" + + def get_metadata(self): + """Return general metadata""" + return {} + + def get_post_data(self, post_id): + """Extract metadata of a single post""" + page = self.request("https://gelbooru.com/index.php?page=post&s=view" + "&id=" + post_id).text + data = text.extract_all(page, ( + (None , 'Id: ', '<'), + ("created_at", '
  • Posted: ', '<'), + ("width" , '
  • Size: ', 'x'), + ("height" , '', '<'), + ("source" , '
  • Source: Rating: ', '<'), + (None , '
  • Score: ', ''), + ("score" , '>', '<'), + ("file_url" , '
  • 1: