X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=manga%2Fbatoto.py;h=4343a0597a4ed4da293ed663b6a2288618e84dd2;hb=ebc277d35244dd94829cd19c3aadd09cc340384b;hp=37ab8b4dfa69abccc68f5be765691eb61d9ec8f3;hpb=81be6921788ee49cf63c91e4de3e6375b10654f6;p=automanga.git diff --git a/manga/batoto.py b/manga/batoto.py index 37ab8b4..4343a05 100644 --- a/manga/batoto.py +++ b/manga/batoto.py @@ -1,4 +1,4 @@ -import urllib.request, urllib.parse, http.cookiejar, re, bs4, os +import urllib.request, urllib.parse, http.cookiejar, re, bs4, os, time from . import profile, lib, htcache soup = bs4.BeautifulSoup soupify = lambda cont: soup(cont, "html.parser") @@ -8,6 +8,21 @@ class pageerror(Exception): super().__init__(message) self.page = page +def iterlast(itr, default=None): + if default is not None: + ret = default + try: + while True: + ret = next(itr) + except StopIteration: + return ret + +def find1(el, *args, **kwargs): + ret = el.find(*args, **kwargs) + if ret is None: + raise pageerror("could not find expected element", iterlast(el.parents, el)) + return ret + def byclass(el, name, cl): for ch in el.findAll(name): if not isinstance(ch, bs4.Tag): continue @@ -22,20 +37,28 @@ def nextel(el): if isinstance(el, bs4.Tag): return el +def fetchreader(lib, readerid, page): + pg = soupify(lib.sess.fetch(lib.base + "areader?" + urllib.parse.urlencode({"id": readerid, + "p": str(page), + "supress_webtoon": "t"}), + headers={"Referer": "http://bato.to/reader"})) + return pg + class page(lib.page): - def __init__(self, chapter, stack, n, url): + def __init__(self, chapter, stack, readerid, n): self.stack = stack + self.lib = chapter.lib self.chapter = chapter self.n = n self.id = str(n) self.name = "Page %s" % n - self.url = url + self.readerid = readerid self.ciurl = None def iurl(self): if self.ciurl is None: - page = soupify(htcache.fetch(self.url)) - img = nextel(page.find("div", id="full_image")).img + page = fetchreader(self.lib, self.readerid, self.n) + img = find1(page, "img", id="comic_page") self.ciurl = img["src"] return self.ciurl @@ -46,15 +69,17 @@ class page(lib.page): return self.name def __repr(self): - return "" % (self.chapter.manga.name, self.chapter.name, self.name) + return "" % (self.chapter.manga.name, self.chapter.group.name, self.chapter.name, self.name) class chapter(lib.pagelist): - def __init__(self, manga, stack, id, name, url): + def __init__(self, group, stack, id, name, readerid): self.stack = stack - self.manga = manga + self.group = group + self.manga = group.manga + self.lib = self.manga.lib self.id = id self.name = name - self.url = url + self.readerid = readerid self.cpag = None def __getitem__(self, i): @@ -66,12 +91,11 @@ class chapter(lib.pagelist): pnre = re.compile(r"page (\d+)") def pages(self): if self.cpag is None: - pg = soupify(htcache.fetch(self.url)) + pg = fetchreader(self.lib, self.readerid, 1) cpag = [] - for opt in pg.find("select", id="page_select").findAll("option"): - url = opt["value"] + for opt in find1(pg, "select", id="page_select").findAll("option"): n = int(self.pnre.match(opt.string).group(1)) - cpag.append(page(self, self.stack + [(self, len(cpag))], n, url)) + cpag.append(page(self, self.stack + [(self, len(cpag))], self.readerid, n)) self.cpag = cpag return self.cpag @@ -79,7 +103,27 @@ class chapter(lib.pagelist): return self.name def __repr__(self): - return "" % (self.manga.name, self.name) + return "" % (self.manga.name, self.group.name, self.name) + +class group(lib.pagelist): + def __init__(self, manga, stack, id, name): + self.stack = stack + self.manga = manga + self.id = id + self.name = name + self.ch = [] + + def __getitem__(self, i): + return self.ch[i] + + def __len__(self): + return len(self.ch) + + def __str__(self): + return self.name + + def __repr__(self): + return "