def __init__(self): try: self.db = MySQLdb.connect(host, username, password, database, charset="utf8") except MySQLdb.Error, e: try: error_message = "Error %d:%s" % (e.args[0], e.args[1]) except IndexError: error_message = "MySQL Error:%s" % str(e) logging.warning(error_message) raise
def visit(self, url, post_data=None, referer=''): header = self.header if referer: header['Referer'] = referer if post_data: post_data = urllib.urlencode(post_data) req = urllib2.Request(url=url, headers=header, data=post_data) try: s = self.opener.open(req).read() except urllib2.URLError, e: logging.warning("Get HTML ERROR!!!" + str(e.reason)) raise VisitError
def visit(self, url, post_data=None, referer=''): if self.refresh_time is not None and datetime.now() < self.refresh_time: sleep((self.refresh_time - datetime.now()).total_seconds()) self.refresh_time = None s = super(OJAccess, self).visit(url, post_data, referer) if OJ_Decode[self.oj]: s = s.decode('gbk', 'ignore').encode('utf8') if NOT_Refresh[self.oj]: t = self.refresh(s) if t is not None: self.refresh_time = datetime.now() + timedelta(seconds=int(t)) return self.visit(url, post_data, referer) if self.wrong_page(s): logging.warning("OJ Forbidden!!! html:\n" + s) raise VisitError return s
def save_img(self, url, problem_id=''): filename = url.split('/')[-1] path = os.path.join(STATIC_PATH, 'upload', self.oj, str(problem_id)) make_dir(path) path = os.path.join(path, filename) if url[0:4] != 'http': if self.oj == 'hdu_std': url = OJ_Index['hdu'] + url else: url = OJ_Index[self.oj] + url try: urllib.urlretrieve(url, path) except: logging.warning("Get Image ERROR!!!") else: logging.info("Download image <%s> over" % (filename))
def login(self, cid=None): if cid is not None: url = Login_URL[self.oj] % cid else: url = Login_URL[self.oj] try: html = self.visit(url, self.postdata) except VisitError: logging.info("OJ:" + self.oj + " USER: "******" NOT Login!!!") return False if not self.judge_password(html): logging.warning("Login ERRER!!! No Such User!!!") return False else: if self.is_login(cid): logging.info("OJ:" + self.oj + " USER: "******" Logined") return True else: logging.info("OJ:" + self.oj + " USER: "******" NOT Login!!!") return False
def get_id(self): try: id = self.cursor.lastrowid except MySQLdb.Error, e: logging.warning('MySQL get_id ERROR!!! Error: %s' % str(e)) raise MySQLQueryError
def query(self, sql): try: self.cursor.execute(sql) except MySQLdb.Error, e: logging.warning('MySQL query ERROR!!! Error: %s & SQL: %s' % (str(e), sql)) raise MySQLQueryError
def update(self, sql): try: self.cursor.execute(sql) except MySQLdb.Error, e: logging.warning('MySQL update ERROR!!! Error: %s & SQL: %s' % (str(e), sql)) return False