diff --git a/gallery_dl/extractor/3dbooru.py b/gallery_dl/extractor/3dbooru.py index c303a6d4..a7986880 100644 --- a/gallery_dl/extractor/3dbooru.py +++ b/gallery_dl/extractor/3dbooru.py @@ -8,24 +8,25 @@ """Extract image-urls from http://behoimi.org/""" -from .booru import JSONBooruExtractor +from . import booru -info = { - "category": "3dbooru", - "extractor": "ThreeDeeBooruExtractor", - "directory": ["{category}", "{tags}"], - "filename": "{category}_{id}_{md5}.{extension}", - "pattern": [ - r"(?:https?://)?(?:www\.)?behoimi\.org/post(?:/(?:index)?)?\?tags=([^&]+).*", - ], -} +class ThreeDeeBooruExtractor(booru.JSONBooruExtractor): + """Base class for 3dbooru extractors""" + category = "3dbooru" + api_url = "http://behoimi.org/post/index.json" + headers = { + "Referer": "http://behoimi.org/post/show/", + "User-Agent": "Mozilla/5.0", + } -class ThreeDeeBooruExtractor(JSONBooruExtractor): +class ThreeDeeBooruTagExtractor(ThreeDeeBooruExtractor, booru.BooruTagExtractor): + """Extract images from 3dbooru based on search-tags""" + pattern = [r"(?:https?://)?(?:www\.)?behoimi\.org/post(?:/(?:index)?)?\?tags=([^&]+)"] - def __init__(self, match): - JSONBooruExtractor.__init__(self, match, info) - self.api_url = "http://behoimi.org/post/index.json" - self.headers = { - "Referer": "http://behoimi.org/post/show/", - "User-Agent": "Mozilla/5.0" - } +class ThreeDeeBooruPoolExtractor(ThreeDeeBooruExtractor, booru.BooruPoolExtractor): + """Extract image-pools from 3dbooru""" + pattern = [r"(?:https?://)?(?:www\.)?behoimi\.org/pool/show/(\d+)"] + +class ThreeDeeBooruPostExtractor(ThreeDeeBooruExtractor, booru.BooruPostExtractor): + """Extract single images from 3dbooru""" + pattern = [r"(?:https?://)?(?:www\.)?behoimi\.org/post/show/(\d+)"] diff --git a/gallery_dl/extractor/booru.py b/gallery_dl/extractor/booru.py index 696b51a9..7f50bf10 100644 --- a/gallery_dl/extractor/booru.py +++ b/gallery_dl/extractor/booru.py @@ -17,13 +17,15 @@ import urllib.parse class BooruExtractor(Extractor): info = {} + params = {"limit": 50} + headers = {} + page = "page" api_url = "" + category = "" def __init__(self): Extractor.__init__(self) - self.page = "page" self.params = {"limit": 50} - self.headers = {} def items(self): yield Message.Version, 1