89 lines
2.4 KiB
Python
89 lines
2.4 KiB
Python
# coding=utf-8
|
||
import sys
|
||
|
||
from requests.sessions import session
|
||
sys.path.append('./lib/public')
|
||
from crawler import Crawler
|
||
import json
|
||
from hashlib import md5
|
||
from urllib.parse import urlencode, unquote_plus
|
||
from db import insertRank, findRank
|
||
# 主函数
|
||
|
||
crawlerCache = {}
|
||
# 处理登录操作 data:{cid,pwd,sign}
|
||
# 这里三个接口公用一个session所以合并成一个接口,一个session走到底,一次性返回所有数据
|
||
def manageLogin(request):
|
||
# json化,应该能当dict用
|
||
data = json.loads(request.form['data'])
|
||
# MD5校验
|
||
checked = checkData(data)
|
||
if checked:
|
||
c = Crawler()
|
||
c.defaultInit(data)
|
||
res = c.connection()
|
||
crawlerCache[data['cid']] = c
|
||
return res
|
||
else:
|
||
return '数据校验失败', 400
|
||
|
||
def manageSubmitVerificationCode(request):
|
||
data = json.loads(request.form['data'])
|
||
|
||
checked = checkData(data)
|
||
if checked:
|
||
c = crawlerCache[data['cid']]
|
||
res = c.submitVerificationCode(data)
|
||
if res[-1] == 200:
|
||
grade = c.getGrade()
|
||
ownSchedule = c.getOwnSchedule()
|
||
crawlerCache[data['cid']] = None
|
||
return json.dumps({'grade': grade, 'ownSchedule': ownSchedule}), 200
|
||
else:
|
||
return res
|
||
else:
|
||
return '数据校验失败', 400
|
||
|
||
# 处理更新课表游戏排名信息
|
||
def manageScheduleUpload(request):
|
||
# json化,应该能当dict用
|
||
data_cache = json.loads(request.form['data'])
|
||
# MD5校验
|
||
checked = checkData(data_cache)
|
||
data_cache.pop('sign')
|
||
if checked:
|
||
add_res = insertRank( data_cache['cid'], data_cache['nick'], data_cache['count'], data_cache['time'])
|
||
return add_res
|
||
else:
|
||
return '数据校验失败', 400
|
||
|
||
# 处理获取课表游戏排名信息
|
||
def manageScheduleGet(request):
|
||
# json化,应该能当dict用
|
||
data_cache = json.loads(request.form['data'])
|
||
# MD5校验
|
||
checked = checkData(data_cache)
|
||
data_cache.pop('sign')
|
||
if checked:
|
||
# 获取排名表
|
||
get_res = findRank()
|
||
return get_res
|
||
else:
|
||
return '数据校验失败', 400
|
||
|
||
# 工具函数
|
||
|
||
# MD5 校验
|
||
def checkData(data):
|
||
d = data.copy()
|
||
try:
|
||
d.pop('sign')
|
||
except KeyError:
|
||
pass
|
||
d = str(d)
|
||
d = d.replace(' ', '')
|
||
md = md5()
|
||
md.update(d.encode('utf-8'))
|
||
r = md.hexdigest().upper()
|
||
return r == data['sign']
|