[hdoujin] extract 'source' metadata (#8280)

requires 'token'
This commit is contained in:
Mike Fährmann
2025-09-24 07:10:51 +02:00
parent 8b3af88d52
commit 3c57ad414f

View File

@@ -62,10 +62,11 @@ class SchalenetworkExtractor(Extractor):
pass
params["page"] += 1
def _token(self):
def _token(self, required=True):
if token := self.config("token"):
return f"Bearer {token.rpartition(' ')[2]}"
raise exception.AuthRequired("'token'", "your favorites")
if required:
raise exception.AuthRequired("'token'", "your favorites")
def _crt(self):
crt = self.config("crt")
@@ -88,7 +89,7 @@ class SchalenetworkExtractor(Extractor):
else:
msg = f"{exc.status} {exc.response.reason}"
raise exception.AuthRequired(
"'crt' query parameter & matching '--user-agent'", None, msg)
"'crt' query parameter & matching 'user-agent'", None, msg)
class SchalenetworkGalleryExtractor(SchalenetworkExtractor, GalleryExtractor):
@@ -118,15 +119,21 @@ class SchalenetworkGalleryExtractor(SchalenetworkExtractor, GalleryExtractor):
def metadata(self, _):
_, gid, gkey = self.groups
url = f"{self.root_api}/books/detail/{gid}/{gkey}"
data = self.request_json(url, headers=self.headers)
data["date"] = text.parse_timestamp(data["created_at"] // 1000)
headers = self.headers
data = self.request_json(url, headers=headers)
try:
data["date"] = text.parse_timestamp(data["created_at"] // 1000)
data["count"] = len(data["thumbnails"]["entries"])
del data["thumbnails"]
except Exception:
pass
tags = []
types = self.TAG_TYPES
tags_data = data["tags"]
for tag in tags_data:
for tag in data["tags"]:
name = tag["name"]
namespace = tag.get("namespace", 0)
tags.append(types[namespace] + ":" + name)
@@ -134,33 +141,34 @@ class SchalenetworkGalleryExtractor(SchalenetworkExtractor, GalleryExtractor):
if self.config("tags", False):
tags = collections.defaultdict(list)
for tag in tags_data :
for tag in data["tags"]:
tags[tag.get("namespace", 0)].append(tag["name"])
for type, values in tags.items():
data["tags_" + types[type]] = values
url = f"{self.root_api}/books/detail/{gid}/{gkey}?crt={self._crt()}"
if token := self._token(False):
headers = headers.copy()
headers["Authorization"] = token
try:
data["count"] = len(data["thumbnails"]["entries"])
del data["thumbnails"]
except Exception:
pass
data_fmt = self.request_json(
url, method="POST", headers=headers)
except exception.HttpError as exc:
self._require_auth(exc)
self.fmt = self._select_format(data_fmt["data"])
data["source"] = data_fmt.get("source")
return data
def images(self, _):
crt = self._crt()
_, gid, gkey = self.groups
url = f"{self.root_api}/books/detail/{gid}/{gkey}?crt={crt}"
try:
data = self.request_json(url, method="POST", headers=self.headers)
except exception.HttpError as exc:
self._require_auth(exc)
fmt = self._select_format(data["data"])
fmt = self.fmt
url = (f"{self.root_api}/books/data/{gid}/{gkey}"
f"/{fmt['id']}/{fmt['key']}/{fmt['w']}?crt={crt}")
data = self.request_json(url, headers=self.headers)
f"/{fmt['id']}/{fmt['key']}/{fmt['w']}?crt={self._crt()}")
headers = self.headers
data = self.request_json(url, headers=headers)
base = data["base"]
results = []
@@ -169,7 +177,7 @@ class SchalenetworkGalleryExtractor(SchalenetworkExtractor, GalleryExtractor):
info = {
"width" : dimensions[0],
"height": dimensions[1],
"_http_headers": self.headers,
"_http_headers": headers,
}
results.append((base + entry["path"], info))
return results