+
+ rure = re.compile(r"/comic/_/([^/]*)$")
+ def byname(self, prefix):
+ if not isinstance(prefix, unicode):
+ prefix = prefix.decode("utf8")
+ p = 1
+ while True:
+ resp = urllib.urlopen(self.base + "search?" + urllib.urlencode({"name": prefix.encode("utf8"), "name_cond": "s", "p": str(p)}))
+ try:
+ page = soup(resp.read())
+ finally:
+ resp.close()
+ rls = page.find("div", id="comic_search_results").table
+ if rls.tbody is not None:
+ rls = rls.tbody
+ hasmore = False
+ for child in rls.findAll("tr"):
+ if child.th is not None: continue
+ if child.get("id") == u"show_more_row":
+ hasmore = True
+ continue
+ link = child.td.strong.a
+ url = link["href"].encode("us-ascii")
+ m = self.rure.search(url)
+ if m is None: raise Exception("Got weird manga URL: %r" % url)
+ id = m.group(1)
+ name = link.text.strip()
+ if name[:len(prefix)].lower() != prefix.lower():
+ m = manga(self, id, name, url)
+ for aname in m.altnames():
+ if aname[:len(prefix)].lower() == prefix.lower():
+ name = aname
+ break
+ else:
+ if False:
+ print "eliding " + name
+ print m.altnames()
+ continue
+ yield manga(self, id, name, url)
+ p += 1
+ if not hasmore:
+ break