该脚本是为了实现将mysql数据库中的数据进行筛选之后通过post请求定时推送给目标url
from django.core.management import BaseCommand
from models.server import Server,Group
import datetime,time
from views.base import getConn,json_response
from models.log import DictDefine
import requests
import json,hashlib
from GameAnalys.views.game.base import GMProtocol
class Command(BaseCommand):
'''定时推送聊天记录
'''
def handle(self, *args, **options):
#目标url
url = "xxx"
#请求头,不过好像没用上
header = {"Content-type": "application/json"}
while True:
#初步筛选,得到想要推送的服务器id
list_record = Server.objects.filter(status__in = [2,3,4]).order_by('create_time')
#这里的S用来记录每次连接数据库到查询再推送一次整个过程的时间
S = 0
for item in list_record:
if item.alias == "xx":
try:
print(item.id)
#这里用了个映射字典
chat_channel_dict = DictDefine.get_dict_for_key("chatChannel")
#当前时间戳
new_time = time.time()
timeArray = time.localtime(new_time)
#转换成数据库中的"%Y-%m-%d %H:%M:%S"格式
new_time1 = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
#当前时间戳-30S-S就是所需查询的时间段再减去操作时间
old_time = time.time() - 30 - S
timeArray = time.localtime(old_time)
old_time1 = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)
#连接数据库
conn = getConn(item.id)
#sql查询语句
query_sql = '''select log_server,pp.link_key,v.toplevel,lc.log_user,lc.log_name,lc.log_level,f2,lpl.log_name,lpl.log_level,log_time,f8,f1 from log_chat as lc LEFT JOIN (select log_user,log_name,max(log_level) as log_level from log_player_level GROUP BY log_name) as lpl on lc.f2 = lpl.log_user left join (SELECT log_user,MAX(f2) as toplevel FROM log_player_vip GROUP BY log_user) v on v.log_user = lc.log_user left join (select player_id,link_key from player_%s) pp on pp.player_id = lc.log_user where log_time BETWEEN '%s' and '%s' and f8 not in ('"谢谢老板"')''' % (item.id, old_time1, new_time1)
print query_sql
#游标
cur = conn.cursor()
cur.execute(query_sql)
#查询结果
channel_msg = cur.fetchall()
if channel_msg:
gameid = xx
key = "xxxxxx"
times = int(time.time())
#签名认证
sign_str = str(gameid) + str(times) + key
signStr = hashlib.md5()
signStr.update(sign_str.encode('utf-8'))
sign = signStr.hexdigest()
print("sign->", sign)
data = []
for item in channel_msg:
data.append({"serverid": item[0], "username": item[1], "vip": item[2], "roleid": item[3],
"rolename": item[4], "rolelevel": item[5], "roleid_pm": item[6],
"rolename_pm": item[7], "rolelevel_pm": item[8],
"msgtime": int(time.mktime(time.strptime(str(item[9]), "%Y-%m-%d %H:%M:%S"))),
"msgcontent": item[10], "msgchannel": chat_channel_dict[str(item[11])]})
#数据写入字典
dict_test = dict()
dict_test["gameid"] = gameid
dict_test["time"] = times
dict_test["data"] = data
dict_test["sign"] = sign
# print(dict_test)
print(json.dumps(dict_test))
#post请求推送
response = requests.post(url,data=json.dumps(dict_test))
content = json.loads(response.text)
#查看返回值
print(content)
except BaseException as e:
print e
S += (time.time() - new_time)
print("操作时间->",S)
sleep_time = 30 - S
if sleep_time <= 0:
sleep_time = 0
print(sleep_time)
time.sleep(sleep_time)