[exhentai] use image-count as stop signal
This commit is contained in:
@@ -31,7 +31,7 @@ class ExhentaiGalleryExtractor(Extractor):
|
|||||||
def __init__(self, match):
|
def __init__(self, match):
|
||||||
Extractor.__init__(self)
|
Extractor.__init__(self)
|
||||||
self.key = {}
|
self.key = {}
|
||||||
self.url = match.group(0)
|
self.count = 0
|
||||||
self.gid, self.token = match.groups()
|
self.gid, self.token = match.groups()
|
||||||
self.original = config.interpolate(("extractor", "exhentai", "download-original"), True)
|
self.original = config.interpolate(("extractor", "exhentai", "download-original"), True)
|
||||||
self.wait_min = config.interpolate(("extractor", "exhentai", "wait-min"), 3)
|
self.wait_min = config.interpolate(("extractor", "exhentai", "wait-min"), 3)
|
||||||
@@ -45,10 +45,12 @@ class ExhentaiGalleryExtractor(Extractor):
|
|||||||
yield Message.Headers, self.setup_headers()
|
yield Message.Headers, self.setup_headers()
|
||||||
yield Message.Cookies, self.session.cookies
|
yield Message.Cookies, self.session.cookies
|
||||||
|
|
||||||
page = self.request(self.url).text
|
url = "https://exhentai.org/g/{}/{}/".format(self.gid, self.token)
|
||||||
|
page = self.request(url).text
|
||||||
if page.startswith(("Key missing", "Gallery not found")):
|
if page.startswith(("Key missing", "Gallery not found")):
|
||||||
raise exception.NotFoundError("gallery")
|
raise exception.NotFoundError("gallery")
|
||||||
data = self.get_job_metadata(page)
|
data = self.get_job_metadata(page)
|
||||||
|
self.count = int(data["count"])
|
||||||
yield Message.Directory, data
|
yield Message.Directory, data
|
||||||
|
|
||||||
for url, image in self.get_images(page):
|
for url, image in self.get_images(page):
|
||||||
@@ -120,27 +122,21 @@ class ExhentaiGalleryExtractor(Extractor):
|
|||||||
|
|
||||||
def images_from_api(self):
|
def images_from_api(self):
|
||||||
"""Get image url and data from api calls"""
|
"""Get image url and data from api calls"""
|
||||||
imgkey = self.key["start"]
|
|
||||||
nextkey = self.key["next" ]
|
nextkey = self.key["next" ]
|
||||||
request = {
|
request = {
|
||||||
"method" : "showpage",
|
"method" : "showpage",
|
||||||
"page" : 2,
|
|
||||||
"gid" : int(self.gid),
|
"gid" : int(self.gid),
|
||||||
"imgkey" : nextkey,
|
"imgkey" : nextkey,
|
||||||
"showkey": self.key["show"],
|
"showkey": self.key["show"],
|
||||||
}
|
}
|
||||||
while True:
|
for request["page"] in range(2, self.count+1):
|
||||||
if imgkey == nextkey:
|
|
||||||
return
|
|
||||||
self.wait()
|
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
|
self.wait()
|
||||||
page = self.session.post(self.api_url, json=request).json()
|
page = self.session.post(self.api_url, json=request).json()
|
||||||
break
|
break
|
||||||
except requests.exceptions.ConnectionError as e:
|
except requests.exceptions.ConnectionError:
|
||||||
self.wait((5, 10))
|
pass
|
||||||
|
|
||||||
imgkey = nextkey
|
imgkey = nextkey
|
||||||
nextkey, pos = text.extract(page["i3"], "'", "'")
|
nextkey, pos = text.extract(page["i3"], "'", "'")
|
||||||
imgurl , pos = text.extract(page["i3"], '<img id="img" src="', '"', pos)
|
imgurl , pos = text.extract(page["i3"], '<img id="img" src="', '"', pos)
|
||||||
@@ -151,7 +147,6 @@ class ExhentaiGalleryExtractor(Extractor):
|
|||||||
"image-token": imgkey
|
"image-token": imgkey
|
||||||
})
|
})
|
||||||
request["imgkey"] = nextkey
|
request["imgkey"] = nextkey
|
||||||
request["page"] += 1
|
|
||||||
|
|
||||||
def wait(self, waittime=None):
|
def wait(self, waittime=None):
|
||||||
"""Wait for a randomly chosen amount of seconds"""
|
"""Wait for a randomly chosen amount of seconds"""
|
||||||
|
|||||||
Reference in New Issue
Block a user