使用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