summaryrefslogtreecommitdiffstats
path: root/gallery_dl/extractor/sankaku.py
diff options
context:
space:
mode:
authorLibravatarUnit 193 <unit193@unit193.net>2021-01-11 03:25:41 -0500
committerLibravatarUnit 193 <unit193@unit193.net>2021-01-11 03:25:41 -0500
commit6335711bbe769b6b9301a88d88790d7a2f8aa82e (patch)
tree9122f4da2bcce66fbee1a2f21260a2de53dc4cc7 /gallery_dl/extractor/sankaku.py
parent87a5aa088ce33a1196ff409b76a9ea8233bdc634 (diff)
New upstream version 1.16.3.upstream/1.16.3
Diffstat (limited to 'gallery_dl/extractor/sankaku.py')
-rw-r--r--gallery_dl/extractor/sankaku.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/gallery_dl/extractor/sankaku.py b/gallery_dl/extractor/sankaku.py
index 9e64eac..6a499a3 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",