python如何教你开发抢票程序

使用python实现韩国抢票,自动排队,自动下单,自动锁票,自动支付
def blockInit_v2(proxyConfig=None):
global first
try:
# 遍历区域抢购信息,
print(“创建订单:”+str(datetime.now()))
queues = [{}, {}]
ipsStr = None
userInfolist = redisCenterConn.hgetall(“melon_global_userinfo”)
if ip_pool is not None and len(ip_pool) > 0:
ipsStr = redisCenterConn.redis_conn.get(ip_pool)
if ipsStr is not None and type(ipsStr) == bytes:
ipsStr = ipsStr.decode(‘UTF-8’)
queues[1] = deque(ipsStr.split(‘,’))
userNewlist = []
flag = True
ipAddr = None
userInfo = None
for key in userInfolist:
# 取消局域网ip轮换,会影响抢票
ipAddr = None
try:
if ip_pool is not None and len(ip_pool) > 0:
ipAddr = “dai:123456@{}:8888”.format(queues[1].popleft())
except BaseException as rrr:
if ip_pool is not None and len(ip_pool) > 0:
queues[1] = deque(ipsStr.split(‘,’))
ipAddr = “dai:123456@{}:8888”.format(queues[1].popleft())
try:
userInfo = userInfolist.get(key)
userInfo = userInfo.decode(‘UTF-8’)
userInfo = json.loads(userInfo)
print(“users:{}”.format(userInfo.get(‘name’)))
# generUserData(userInfo,queues,ipsStr,ipAddr)
userNewlist.append(pool.submit(generUserData,userInfo,queues,ipsStr,ipAddr))
# userNewlist.append(generUserData(userInfo,ipAddr))
except BaseException as e:
print(“error:{}”.format(e))
concurrent.futures.wait(userNewlist)
userInfolist = redisCenterConn.hgetall(“melon_global_order”)
if userInfolist is None or len(userInfolist) == 0:
seatOrderNew.create(userInfo, defaultmap, queues, ipsStr, ipAddr, proxy_location)
print(“userNewlist size:{}”.format(len(userNewlist)))
except BaseException as r:
print(“初始化演唱会失败!%s” % (str®), “Line:”,
r.traceback.tb_lineno)
finally:
print(“订单创建结束!” + str(datetime.now()))
def generUserData(user,queues,ipsStr,ipAddr=None):
try:
global timeDefault
loginCookie = user.get(‘cookie’,{})
addtime = user.get(“addTime”)
format_string = “%Y-%m-%d %H:%M:%S.%f”
datetime_obj = datetime.strptime(addtime, format_string)
saveTime = datetime_obj.day
now = datetime.now()
hour = now.day
flag = False
if hour != saveTime or len(loginCookie) == 0:
loginCookien = {}
name = user.get(‘name’, “”)
password = user.get(‘password’, “”)
while len(loginCookien) == 0:
loginCookien = loginModule.login(name, password,queues,ipsStr,ipAddr,proxy_location)
if len(loginCookien) > 0:
pocId = str(time.time() * 1000)[0:13] + str(random.random())[2:12]
loginCookie = loginCookien
loginCookie.update({
‘PCID’: pocId,
‘PC_PCID’: pocId,
})
user.update({
‘cookie’: loginCookie
})
break
else:
ipAddr = changeIp(queues,ipsStr)
time.sleep(1)
if len(loginCookie) > 0:
prodId = user.get(‘prodId’, “”)
dateSelect = user.get(‘dateSelect’, “”)
dateSelect = convertDate(dateSelect)
scheduleNo = None
sellTypeCode = “”
datelistx = redisCenterConn.hget(“melon_global_dateselect”, dateSelect)
dateData = datelistx
while dateData is None or len(dateData) == 0:
ipAddr = changeIp(queues, ipsStr)
datelist = daylist.req(prodId, loginCookie,ipAddr,proxy_location)
if datelist is None:
time.sleep(1)
if datelist is not None and len(datelist) > 0:
for datet in datelist:
timestr = None
while timestr is None or len(timestr) == 0:
ipAddr = changeIp(queues, ipsStr)
timestr = timeQuery.req(prodId, datet[‘perfDay’], loginCookie,ipAddr,proxy_location)
timelist = []
if timestr is None:
time.sleep(0.1)
if timestr is not None and len(timestr) > 0:
timeObj = []
for timex in timestr:
timelist.append({“scheduleNo”: timex[‘scheduleNo’],“perfTime”: timex[‘perfTime’]})
gradestr = None
while gradestr is None or len(gradestr) == 0:
gradestr = gradelist.req(prodId, timex[‘scheduleNo’],timex[‘sellTypeCode’], loginCookie,ipAddr,proxy_location)
if gradestr is None or len(gradestr) == 0:
ipAddr = changeIp(queues, ipsStr)
time.sleep(0.1)
for gradex in gradestr:
redisCenterConn.hset(“melon_global_seatgrade”,gradex[“seatGradeNo”],gradex[‘seatGradeName’])
timeObj.append({
“scheduleNo”: timex[‘scheduleNo’],
“perfTime”: timex[‘perfTime’],
“sellTypeCode”: timex[‘sellTypeCode’],
“gradelist”: gradestr,
“perfDay”: timex[‘perfDay’]
})
# if timex[‘perfDay’] == dateSelect[0:10]:
# dateData = timeObj
dateData = timeObj
redisCenterConn.hset(“melon_global_dateselect”, datet[‘perfDay’], json.dumps(timeObj))

        if type(dateData) == bytes:
            dateData = dateData.decode('UTF-8')
            dateData = json.loads(dateData)
        if timeDefault is None or len(timeDefault) == 0:
            timeDefault = '0'
        if timeDefault == '0':
            scheduleNo = dateData[0]['scheduleNo']
            sellTypeCode = dateData[0]['sellTypeCode']
            seatGradeNo = dateData[0]['gradelist'][0]['seatGradeNo']
            perfDay = dateData[0]['perfDay']
        else:
            scheduleNo = dateData[int(timeDefault)]['scheduleNo']
            sellTypeCode = dateData[int(timeDefault)]['sellTypeCode']
            seatGradeNo = dateData[int(timeDefault)]['gradelist'][0]['seatGradeNo']
            perfDay = dateData[int(timeDefault)]['perfDay']
        user.update({
            "seatGradeNo": seatGradeNo,
            "perfDay": perfDay,
            "scheduleNo": scheduleNo
        })
        prodInfo = {}
        trafficCtrlYn = 'N'
        while prodInfo is None or len(prodInfo) == 0:
            ipAddr = changeIp(queues, ipsStr)
            prodInfo = infoProdSch.req(prodId, "SC0002", scheduleNo, sellTypeCode, loginCookie, ipAddr,
                                       proxy_location)
            if prodInfo is None:
                time.sleep(0.1)
            if prodInfo is not None and len(prodInfo) > 0:
                perfMainName = prodInfo.get('prodInform').get('perfMainName')
                rsrvFee = prodInfo.get('prodInform').get('rsrvFee')
                trafficCtrlYn = prodInfo.get('prodInform').get('trafficCtrlYn')
                flplanTypeCode = prodInfo.get('prodInform').get('flplanTypeCode')
                user.update({
                    'perfMainName': perfMainName,
                    'rsrvFee': rsrvFee,
                    'flplanTypeCode': flplanTypeCode,
                    'trafficCtrlYn': trafficCtrlYn
                })
        prodKeyStr = None
        captchaFlag = False
        while prodKeyStr is None or len(prodKeyStr) == 0:
            ipAddr = changeIp(queues, ipsStr)
            prodKeyStr,nflActId = proKey.req(prodId, scheduleNo, loginCookie,ipAddr,proxy_location)
            if prodKeyStr is not None and len(prodKeyStr) > 0:
                if trafficCtrlYn == 'Y':
                    # pool.submit(queueReq,loginCookie,nflActId,user,queues,ipsStr,ipAddr,proxy_location)
                    newData = queueReq(loginCookie, nflActId, user, queues, ipsStr, ipAddr, proxy_location)
                    user.update({
                        'cookie': newData.get('cookie'),
                        'netfunnel_key': '',
                        'NetFunnel_ID_key': newData.get('NetFunnel_ID_key')
                    })
                oneStopParams = {}
                while oneStopParams is None or len(oneStopParams) == 0:
                    ipAddr = changeIp(queues, ipsStr)
                    oneStopParams = getChapche.req(prodId, scheduleNo, loginCookie,user,trafficCtrlYn, prodKeyStr,sellTypeCode,ipAddr,queues, ipsStr)
                    if oneStopParams != None and len(oneStopParams) > 0:
                        try:
                            # oneStopParams.pop("seatGradeNo")
                            # oneStopParams.pop("sellTypeCode")
                            # oneStopParams.pop("scheduleNo")
                            user.update({
                                'mapClickYn': oneStopParams.get('mapClickYn'),
                                'pocCode': oneStopParams.get('pocCode'),
                                'sellTypeCode': oneStopParams.get('sellTypeCode')
                            })
                            capt = oneStopParams.get('chkcapt')
                            if capt is not None:
                                user.update({
                                    'chkcapt': capt
                                })
                        except BaseException as e:
                            print("{}".format(e))
                        captchaFlag = True
                    else:
                        time.sleep(0.1)
            else:
                time.sleep(1)
        user.update({'addTime': str(datetime.now())})
        user.update({
            "status": "1"
        })
        if captchaFlag:
            redisCenterConn.hset("melon_global_userinfo", "{}_{}".format(user.get('name'), user.get('crawAddr')),
                                 json.dumps(user))
        else:
            print("验证码为空!")
            redisCenterConn.hset("melon_global_userinfo", "{}_{}".format(user.get('name'), user.get('crawAddr')),
                                 json.dumps(user))
        return user
except BaseException as e:
    print("create userData error:{}".format(e))
    return None
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值