Example #1
0
 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
Example #2
0
 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)
Example #3
0
 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))
Example #4
0
    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
Example #5
0
 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)
Example #6
0
 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)
Example #7
0
 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,))
Example #8
0
    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
Example #9
0
    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)