def getUsers(self, titles): db = DBHelper() data = [] for user in db.retrieveData("SELECT * FROM `users`"): print user[4] userdata = self.parseXML(user[3], user[1], user[2], user[4], titles) if userdata is not None: data.append(userdata) return data
def notifyUsers(self, newAnime = [], user=None): allTitles = [] db = DBHelper() if not newAnime: return None for anime in newAnime: titles = db.retrieveData("SELECT title FROM titles, shows WHERE titles.showId = shows.showId AND sequel = " + str(anime)) tmp = [] for title in titles: tmp.append(title[0]) allTitles.append((tmp, anime,)) if user is not None: user = db.retrieveData("SELECT * FROM `users` WHERE mal = \"" + user + "\"") if len(user) != 1: return None user = user[0] return self.parseXML(user[3], user[1], user[2], 0, titles=allTitles, first=True) else: return self.getUsers(allTitles)
def getRelatedShows(self, titlesToGet): db = DBHelper() inParam = ', '.join(list(map(lambda x: '%s', titlesToGet))) sql = ("SELECT resultShow.showId, resultShow.sequel, watchedShow.showId, resultShow.sequelChain, title " "FROM titles, shows AS resultShow, shows AS watchedShow " "WHERE titles.showId = watchedShow.showId " "AND title IN (%s) " "AND resultShow.sequelChain = watchedShow.sequelChain " "GROUP BY resultShow.showId") % inParam return db.retrieveData(sql, tuple(titlesToGet))
def getShowXMLs(self, idsToGet): db = DBHelper() inParam = ', '.join(list(map(lambda x: '%s', idsToGet))) sql = "SELECT showId, xml FROM shows WHERE showId IN (%s)" % inParam xmls = db.retrieveData(sql, tuple(idsToGet)) xmlById = {} for row in xmls: xmlById[row[0]] = row[1] return xmlById
def getXML(self, id): db = DBHelper() lastXmlUpdate = db.retrieveData("SELECT lastXmlUpdate FROM shows WHERE showId=%s", (id,)) if len(lastXmlUpdate) < 1: return lastXmlUpdate = lastXmlUpdate[0][0] if lastXmlUpdate is None or time() - lastXmlUpdate > 604800000: # 1 week sleep(2) url = "http://api.anidb.net:9001/httpapi?request=anime&client=seqwatcher&clientver=0&protover=1&aid=" + str(id) r = requests.get(url) xml = r.text.encode('utf-8') if "anime id" not in xml: # check the response is valid return db.executeQuery("UPDATE shows SET xml=%s, lastXmlUpdate=%s WHERE showId=%s", (xml, time(), id)) print "Updated XML for showId: " + str(id)
def checkSequel(self, id): # self.getXML(id) db = DBHelper() xml = db.retrieveData("SELECT xml FROM shows WHERE showId=%s AND xml IS NOT NULL", (id,)) if len(xml) < 1: return xml = xml[0][0] root = ET.fromstring(xml) if root.find("relatedanime") is None: return for anime in root.find("relatedanime"): if anime.attrib['type'] == "Prequel": prequelId = anime.attrib['id'] db = DBHelper() db.executeQuery("UPDATE shows SET sequel=" + str(id) + " WHERE showId=%s", (prequelId,)) print "Added sequel: " + str(id)
def addNewShows(self): db = DBHelper() lastId = db.retrieveData("SELECT * FROM shows ORDER BY showId DESC LIMIT 1", ()) if len(lastId) > 0: lastId = lastId[0][0] else: lastId = 0 tree = ET.parse('./allshows.xml') root = tree.getroot() for child in root: id = int(child.attrib['aid']) if id > lastId: db.executeQuery("INSERT INTO shows (showId) VALUES (" + str(id) + ")", ()) for title in child: lang = title.attrib['{http://www.w3.org/XML/1998/namespace}lang'] if (lang == "en") or (lang == "x-jat"): db.executeQuery("INSERT INTO titles (showId, title) VALUES (" + str(id) + ", %s)", (title.text,))
def showAllForUser(self, MALname): db = DBHelper() root = ET.fromstring(self.getXML(MALname)) listOfShows = {} for anime in root.findall('anime'): title = anime.find('series_title').text.encode('utf-8') sql = "SELECT shows.showId, shows.sequel FROM titles, shows WHERE titles.showId = shows.showId AND title = %s AND sequel IS NOT NULL" sequel = db.retrieveData(sql, (title,)) if len(sequel) > 0: tuple = self.parseAniDB(int(sequel[0][1])) listOfShows[tuple[1]] = tuple for anime in root.findall('anime'): if anime.find('series_title').text in listOfShows.keys(): del listOfShows[anime.find('series_title').text] return listOfShows
def parseAniDB(self, showId): db = DBHelper() xml = db.retrieveData("SELECT xml FROM shows WHERE showId=%s", (showId,))[0][0] root = ET.fromstring(xml) if root.find('startdate') is not None: startdate = root.find('startdate').text else: startdate = "unknown" if root.find('description') is not None: desc = root.find('description').text else: desc = "Not available" if root.find('titles/title') is not None: title = root.find('titles/title').text else: title = "Not available" return (startdate, title, desc, showId)