1
0
mirror of https://github.com/mikf/gallery-dl.git synced 2025-02-01 03:51:42 +01:00

[hitomi] fix image URLs

update '_parse_gg()' yet again
This commit is contained in:
Mike Fährmann 2022-01-02 21:18:56 +01:00
parent 6f2e0c9c3d
commit 38e2af29d6
No known key found for this signature in database
GPG Key ID: 5680CA389D365A88

View File

@ -26,7 +26,7 @@ class HitomiGalleryExtractor(GalleryExtractor):
r"/(?:[^/?#]+-)?(\d+)")
test = (
("https://hitomi.la/galleries/867789.html", {
"pattern": r"https://[a-c]b.hitomi.la/images/1641047429/\d+"
"pattern": r"https://[a-c]b.hitomi.la/images/1641140516/\d+"
r"/[0-9a-f]{64}\.jpg",
"keyword": "4873ef9a523621fc857b114e0b2820ba4066e9ae",
"options": (("metadata", True),),
@ -39,12 +39,12 @@ class HitomiGalleryExtractor(GalleryExtractor):
}),
# Game CG with scenes (#321)
("https://hitomi.la/galleries/733697.html", {
"url": "7f5cfcb52d084bd3a65384aaf30daa9bbee8030f",
"url": "d4854175da2b5fa4ae62749266c7be0bf237dc99",
"count": 210,
}),
# fallback for galleries only available through /reader/ URLs
("https://hitomi.la/galleries/1045954.html", {
"url": "7f5c37d2cb54194b50a3e52ed5aa5022fba64b56",
"url": "eea99c3745719a7a392150335e6ae3f73faa0b85",
"count": 1413,
}),
# gallery with "broken" redirect
@ -138,7 +138,7 @@ class HitomiGalleryExtractor(GalleryExtractor):
def images(self, _):
# see https://ltn.hitomi.la/gg.js
gg_m, gg_b = _parse_gg(self)
gg_m, gg_b, gg_default = _parse_gg(self)
result = []
for image in self.info["files"]:
@ -148,7 +148,7 @@ class HitomiGalleryExtractor(GalleryExtractor):
# see https://ltn.hitomi.la/common.js
inum = int(ihash[-1] + ihash[-3:-1], 16)
url = "https://{}b.hitomi.la/images/{}/{}/{}.{}".format(
chr(97 + gg_m.get(inum, 1)),
chr(97 + gg_m.get(inum, gg_default)),
gg_b, inum, ihash, idata["extension"],
)
result.append((url, idata))
@ -195,11 +195,20 @@ class HitomiTagExtractor(Extractor):
def _parse_gg(extr):
page = extr.request("https://ltn.hitomi.la/gg.js").text
m = {
int(match.group(1)): int(match.group(2) or 0)
m = {}
keys = []
for match in re.finditer(
r"case\s+(\d+):(?:\s*o\s*=\s*(\d+))?", page)
}
r"case\s+(\d+):(?:\s*o\s*=\s*(\d+))?", page):
key, value = match.groups()
keys.append(int(key))
if value:
value = int(value)
for key in keys:
m[key] = value
keys.clear()
d = re.search(r"default:\s*o\s*=\s*(\d+)", page)
b = re.search(r"b:\s*[\"'](.+)[\"']", page)
return m, b.group(1).strip("/")
return m, b.group(1).strip("/"), int(d.group(1)) if d else int(not value)