[sankaku] implement support for new 'tags' categories (#7333 #7553)

This commit is contained in:
Mike Fährmann
2025-05-22 08:17:45 +02:00
parent b8f3ca6c4e
commit 7b5dd61e17
3 changed files with 98 additions and 3 deletions

View File

@@ -47,6 +47,8 @@ class SankakuExtractor(BooruExtractor):
def _init(self):
self.api = SankakuAPI(self)
if self.config("tags") == "extended":
self._tags = self._tags_extended
def _file_url(self, post):
url = post["file_url"]
@@ -85,6 +87,24 @@ class SankakuExtractor(BooruExtractor):
post["tags_" + name] = values
post["tag_string_" + name] = " ".join(values)
def _tags_extended(self, post, page):
try:
url = "https://chan.sankakucomplex.com/posts/" + post["id"]
page = self.request(url).text
except Exception as exc:
return self.log.warning(
"%s: Failed to extract extended tag categories (%s: %s)",
post["id"], exc.__class__.__name__, exc)
tags = collections.defaultdict(list)
tag_sidebar = text.extr(page, '<ul id="tag-sidebar"', "</ul>")
pattern = re.compile(r"tag-type-([^\"' ]+).*?\?tags=([^\"'&]+)")
for tag_type, tag_name in pattern.findall(tag_sidebar):
tags[tag_type].append(text.unescape(text.unquote(tag_name)))
for type, values in tags.items():
post["tags_" + type] = values
post["tag_string_" + type] = " ".join(values)
def _notes(self, post, page):
if post.get("has_notes"):
post["notes"] = self.api.notes(post["id"])