return el
def fetchreader(lib, readerid, page):
- pg = soupify(lib.sess.fetch(lib.base + "areader?" + urllib.parse.urlencode({"id": readerid, "p": str(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
return self.name
def __repr(self):
- return "<batoto.page %r.%r.%r>" % (self.chapter.manga.name, self.chapter.name, self.name)
+ return "<batoto.page %r.%r.%r.%r>" % (self.chapter.manga.name, self.chapter.group.name, self.chapter.name, self.name)
class chapter(lib.pagelist):
- def __init__(self, manga, stack, id, name, readerid):
+ def __init__(self, group, stack, id, name, readerid):
self.stack = stack
- self.manga = manga
- self.lib = manga.lib
+ self.group = group
+ self.manga = group.manga
+ self.lib = self.manga.lib
self.id = id
self.name = name
self.readerid = readerid
return self.name
def __repr__(self):
- return "<batoto.chapter %r.%r>" % (self.manga.name, self.name)
+ return "<batoto.chapter %r.%r.%r>" % (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 "<batoto.group %r.%r" % (self.manga.name, self.name)
class manga(lib.manga):
def __init__(self, lib, id, name, url):
if m is None: raise pageerror("Got weird chapter URL: %r" % url, page)
readerid = m.group(1)
name = ch.td.a.text
- cch.append((readerid, name))
+ gname = nextel(nextel(ch.td)).text.strip()
+ cch.append((readerid, name, gname))
cch.reverse()
- rch = []
- for n, (readerid, name) in enumerate(cch):
- rch.append(chapter(self, [(self, n)], readerid, name, readerid))
- self.cch = rch
+ groups = {}
+ for n, (readerid, name, gname) in enumerate(cch):
+ groups.setdefault(gname, [n, []])[1].append((readerid, name))
+ groups = sorted(groups.items(), key=lambda o: o[1][0])
+ rgrp = []
+ for n, (gname, (_, gch)) in enumerate(groups):
+ ngrp = group(self, [(self, n)], gname, gname)
+ for m, (readerid, name) in enumerate(gch):
+ ngrp.ch.append(chapter(ngrp, ngrp.stack + [(ngrp, m)], readerid, name, readerid))
+ rgrp.append(ngrp)
+ self.cch = rgrp
return self.cch
def altnames(self):
else:
return
else:
+ pass
form = page.find("form", id="login")
if not form and pre:
values["rememberMe"] = "1"
values["anonymous"] = "1"
req = urllib.request.Request(form["action"], urllib.parse.urlencode(values).encode("ascii"))
+ req.add_header("User-Agent", self.useragent)
with self.web.open(req) as hs:
page = soupify(hs.read())
for resp in page.findAll("p", attrs={"class": "message"}):
def open(self, url):
return self.web.open(url)
+ useragent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22"
def fetch(self, url, headers=None):
req = urllib.request.Request(url)
+ req.add_header("User-Agent", self.useragent)
if headers is not None:
for k, v in headers.items():
req.add_header(k, v)
while True:
_pars = dict(pars)
_pars["p"] = str(p)
- resp = urllib.request.urlopen(self.base + "search?" + urllib.parse.urlencode(_pars).encode("ascii"))
+ req = urllib.request.Request(self.base + "search?" + urllib.parse.urlencode(_pars))
+ req.add_header("User-Agent", session.useragent)
+ resp = urllib.request.urlopen(req)
try:
page = soupify(resp.read())
finally: