예제 #1
0
    def insertOrUpdateUser(self, usermap):
        
        session=Session()
        user=User()
        user.openid=usermap["openid"]
        user.username=usermap["username"]
        user.password=usermap["password"]

        flag=self.selectUserFlag(user.openid)
        if(flag==1):
            try:
                session.add(user)
                session.commit()
                logger.info("用户"+user.openid+"用户绑定成功")
                return True
            except:
                logger.error("用户"+user.openid+"用户绑定失败")
                return False
        elif(flag==2):
            try:
                user= session.query(User).filter_by(openid=user.openid).first()
                user.username=usermap["username"]
                user.password=usermap["password"]
                user.flag=1
                session.commit()
                logger.info("用户"+user.openid+"用户更新成功")
                return True
            except:
                logger.error("用户"+user.openid+"用户绑定失败")
                return False
        else:
            logger.error("用户"+user.openid+"用户绑定失败")
            return False
예제 #2
0
class keyWordDao:
    def __init__(self):
        self.session = Session()
        self.keyword = KeyWord()


    def deletekeyword(self,keyword):
        self.keyword.wordID=keyword
        try:
            self.session.delete(self.keyword)
            self.session.commit()
            logger.info("关键字"+keyword+"删除成功")
            return True
        except:
            logger.info("关键字"+keyword+"删除失败")
            return False

    @staticmethod
    def selectkeyword(keywordStr):
        dbconnect=engine.connect()
        result=dbconnect.execute(text('select result,type from keyword where INSTR(:ID,wordID)'), ID=keywordStr)
        if(result.rowcount<=0):
            return False
        else:
            ru = result.fetchall()[0]
            resultData={
                "type":ru[1],
                "result":ru[0]
            }
            return resultData

    @staticmethod
    def dropkeywordList():
        dbconnect=engine.connect()
        result=dbconnect.execute('delete from keyword')
        if(result.rowcount >=0):
            logger.info("关键字列表已清空")
            return True
        else:
            logger.info("关键字列表清空失败")
            return False

    def updateKeywordList(self,key):
        self.keyword.wordID=key["keyword"]
        self.keyword.type=key["type"]
        self.keyword.result=key["value"]
        keyword=self.session.query(KeyWord).filter_by(wordID=key["keyword"]).first()
        if(keyword is None):
            self.session.add(self.keyword)
            logger.info("关键字"+self.keyword.wordID+"添加成功")
        else:
            keyword.type=self.keyword.type
            keyword.result=self.keyword.result
            logger.info("关键字"+self.keyword.wordID+"更新成功")
        self.session.commit()
예제 #3
0
 def deleteUser(self, openidStr):
     session=Session()
     flag=self.selectUserFlag(openidStr)
     if(flag==3):
         user = session.query(User).filter_by(openid=openidStr).first()
         user.flag=0
         session.commit()
         logger.info("用户"+openidStr+"解绑成功")
         return True
     else:
         logger.error("用户"+openidStr+"未绑定,无法解绑")
         return False
예제 #4
0
class ScoreDao:
    def __init__(self, openidStr):
        #openid
        self.openidStr = openidStr
        #Session初始化
        self.session = Session()
        #分数返回结果初始化
        self.count = 0
        #判断该用户是否绑定

    #比较是否需要更新成绩
    # 参数:数据库中取出的时间
    # 返回值:
    # True:今天访问过教务系统
    # False:今天未访问教务系统
    def __compareTime(self, timeB):
        timeA = datetime.datetime.now().date()
        result = timeA - timeB
        if (result.days == 0):
            logger.info("用户" + self.openidStr + "今天已经爬取过成绩")
            return True
        else:
            logger.info("用户" + self.openidStr + "今天未调取过爬虫")
            return False

    #按照学期查询成绩,直到成绩出现
    # 参数:无
    # 返回值:
    # 1:用户未绑定
    # 2:查成绩超过三次超时
    # score:成绩字符串
    def selectScore(self):
        if (self.count >= 2):
            #失败次数大于2次
            return 2

        #从数据库中拿出成绩
        term = configfile.getConfig("term", "termStr")
        scoreInfo = self.session.query(Scores).filter_by(openid=self.openidStr,
                                                         termStr=term).first()
        #如果数据库中的成绩不存在
        if (scoreInfo == None):
            logger.info("用户" + self.openidStr + "数据库中无成绩")
            #插入成绩 0表示插入
            TrueOrFalse = self.__updateScore(0)
            #如果插入失败
            if (TrueOrFalse == False):
                #失败次数+1
                self.count = self.count + 1
                logger.warning("用户" + self.openidStr + "已爬" + str(self.count) +
                               "次")
            #调用一次自身
            return self.selectScore()
        #如果数据库取出的成绩过期
        elif (self.__compareTime(scoreInfo.updateTime.date()) == False):
            logger.info("用户" + self.openidStr + "使用爬虫爬取成绩")
            #更新 1表示更新
            TrueOrFalse = self.__updateScore(1)
            if (TrueOrFalse == False):
                #如果今天的成绩为空,更新失败,但是数据库原来有数据
                #直接取原来的数据库的数据
                logger.info("用户" + self.openidStr + "从数据库中取成绩")
                return scoreInfo.score
            else:
                #如果数据库跟新成功了,那就直接取数据库的
                return self.selectScore()
        else:
            logger.info("用户" + self.openidStr + "从数据库中取成绩")
            return scoreInfo.score

    # 插入成绩
    # 参数:成绩字符串
    # 返回值:
    # True:插入成功
    # False:插入失败

    def __insertScore(self, score_json):
        scoreInfo = Scores()
        scoreInfo.openid = self.openidStr
        scoreInfo.score = score_json
        scoreInfo.termStr = configfile.getConfig("term", "termStr")
        scoreInfo.updateTime = datetime.datetime.now().date()
        try:
            self.session.add(scoreInfo)
            self.session.commit()
            logger.info("用户" + self.openidStr + "成绩插入成功")
            return True
        except:
            logger.info("用户" + self.openidStr + "成绩插入失败")
            return False

    #更新成绩
    # 参数:无
    # 返回值:
    # True:插入成功
    # False:插入失败

    def __updateScore(self, flag):
        user = UserDao()
        userInfo = user.selectUserInfoByOpenid(self.openidStr)
        username = userInfo[0]
        password = userInfo[1]
        user = Score(username, password)
        scoreStr = user.parseScorePage()
        if (scoreStr != None):
            if (flag == 0):
                return self.__insertScore(scoreStr)
            else:
                scoreInfo = self.session.query(Scores).filter_by(
                    openid=self.openidStr).first()
                scoreInfo.score = scoreStr
                scoreInfo.updateTime = datetime.datetime.now().date()
                self.session.commit()
                logger.info("用户" + self.openidStr + "成绩更新成功")
                return True
        else:
            logger.error("用户" + self.openidStr + "成绩查询失败")
            return False