From b0beed7a06f513b6d6ca3c331b0a1322b1a4abbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mike=20F=C3=A4hrmann?= Date: Tue, 29 Dec 2020 17:36:37 +0100 Subject: [PATCH] [sankaku] add support for book searches (closes #1204) --- docs/supportedsites.rst | 2 +- gallery_dl/extractor/sankaku.py | 29 +++++++++++++++++++++++++++++ scripts/supportedsites.py | 3 +++ 3 files changed, 33 insertions(+), 1 deletion(-) diff --git a/docs/supportedsites.rst b/docs/supportedsites.rst index 59f476f7..a65cce38 100644 --- a/docs/supportedsites.rst +++ b/docs/supportedsites.rst @@ -111,7 +111,7 @@ rule #34 https://rule34.paheal.net/ Posts, Tag Searches Rule 34 https://rule34.xxx/ Pools, Posts, Tag Searches Safebooru https://safebooru.org/ Pools, Posts, Tag Searches Sakugabooru https://www.sakugabooru.com/ Pools, Popular Images, Posts, Tag Searches -Sankaku Channel https://sankaku.app/ Pools, Posts, Tag Searches Supported +Sankaku Channel https://sankaku.app/ Book Searches, Pools, Posts, Tag Searches Supported Sankaku Complex https://www.sankakucomplex.com/ Articles, Tag Searches Sen Manga https://raw.senmanga.com/ Chapters Sense-Scans https://sensescans.com/reader/ Chapters, Manga diff --git a/gallery_dl/extractor/sankaku.py b/gallery_dl/extractor/sankaku.py index 9e64eacf..6a499a39 100644 --- a/gallery_dl/extractor/sankaku.py +++ b/gallery_dl/extractor/sankaku.py @@ -9,6 +9,7 @@ """Extractors for https://sankaku.app/""" from .booru import BooruExtractor +from .common import Message from .. import text, exception from ..cache import cache import collections @@ -163,6 +164,31 @@ class SankakuPostExtractor(SankakuExtractor): return SankakuAPI(self).posts(self.post_id) +class SankakuBooksExtractor(SankakuExtractor): + """Extractor for books by tag search on sankaku.app""" + subcategory = "books" + pattern = BASE_PATTERN + r"/books/?\?([^#]*)" + test = ( + ("https://sankaku.app/books?tags=aiue_oka", { + "range": "1-20", + "count": 20, + }), + ("https://beta.sankakucomplex.com/books?tags=aiue_oka"), + ) + + def __init__(self, match): + SankakuExtractor.__init__(self, match) + query = text.parse_query(match.group(1)) + self.tags = text.unquote(query.get("tags", "").replace("+", " ")) + + def items(self): + params = {"tags": self.tags, "pool_type": "0"} + for pool in SankakuAPI(self).pools_keyset(params): + pool["_extractor"] = SankakuPoolExtractor + url = "https://sankaku.app/books/{}".format(pool["id"]) + yield Message.Queue, url, pool + + class SankakuAPI(): """Interface for the sankaku.app API""" @@ -178,6 +204,9 @@ class SankakuAPI(): params = {"lang": "en"} return self._call("/pools/" + pool_id, params) + def pools_keyset(self, params): + return self._pagination("/pools/keyset", params) + def posts(self, post_id): params = { "lang" : "en", diff --git a/scripts/supportedsites.py b/scripts/supportedsites.py index b8598617..2f71e85f 100755 --- a/scripts/supportedsites.py +++ b/scripts/supportedsites.py @@ -139,6 +139,9 @@ SUBCATEGORY_MAP = { "me" : "pixiv.me Links", "work": "individual Images", }, + "sankaku": { + "books": "Book Searches", + }, "smugmug": { "path": "Images from Users and Folders", },