pythonpost请求json_python中post请求json数据且返回json数据处理

该脚本是为了实现将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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值