优化查询

pull/69/head
wenxianping 2019-01-03 20:38:08 +08:00
parent 0cc85766a4
commit 43799d3b56
12 changed files with 52 additions and 115 deletions

View File

@ -6,6 +6,7 @@ import sys
import csv
import requests
from config import urlConf
if sys.version_info.major == 2:
reload(sys)
sys.setdefaultencoding('utf-8')
@ -42,7 +43,7 @@ class CDNProxy:
city_re = re.compile(r"<li id=\"(\S+)\" class=\"PingListCent PingRLlist")
self.city_list = re.findall(city_re, rep.content)
if self.city_list:
print self.city_list
print(self.city_list)
break
else:
pass

View File

@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
import os
import sys
import time
saleMinDelayDay = 0
@ -25,7 +26,11 @@ seat_conf = {'商务座': 32,
'硬座': 29,
'无座': 26,
}
if sys.version_info.major == 2:
seat_conf_2 = dict([(v,k) for (k,v) in seat_conf.iteritems()])
else:
seat_conf_2 = dict([(v, k) for (k, v) in seat_conf.items()])
def getNowTimestamp():
return time.time()

View File

@ -13,4 +13,4 @@ def _get_yaml():
f = open(path)
s = yaml.load(f)
f.close()
return s
return s.decode() if isinstance(s, bytes) else s

View File

@ -5,8 +5,7 @@ set:
# - 2018-01-06
# - 2018-01-07
station_dates:
- "2019-01-27"
- "2019-01-26"
- "2019-01-11"
# 是否根据时间范围 和 乘车类型 购票
# 否则将需要手动填写车次
@ -115,11 +114,14 @@ email_conf:
is_cdn: 1
# 下单接口分为两种1 为快速下单2 是普通下单
order_type: 2
order_type: 1
# 下单模式 1 为预售整点刷新刷新间隔0.1-0.5S, 然后会校验时间比如12点的预售那脚本就会在12.00整检票,刷新订单
# 2 是捡漏捡漏的刷新间隔时间为0.5-3秒时间间隔长不容易封ip
order_model: 1
order_model: 2
# 预售放票时间, 如果是捡漏模式,可以忽略此操作
open_time: '20:15:00'

View File

@ -52,5 +52,5 @@ class RClient(object):
if __name__ == '__main__':
rc = RClient('931128603', '',)
im = open('tkcode', 'rb').read()
print rc.rk_create(im, 6113)
print(rc.rk_create(im, 6113))

View File

@ -7,7 +7,6 @@ from inter.GetPassCodeNewOrderAndLogin import getPassCodeNewOrderAndLogin
from inter.GetRandCode import getRandCode
from myException.UserPasswordException import UserPasswordException
from myException.balanceException import balanceException
from myUrllib import myurllib2
class GoLogin:
@ -127,15 +126,6 @@ class GoLogin:
self.getUserName(uamtk)
break
def logout(self):
url = 'https://kyfw.12306.cn/otn/login/loginOut'
result = myurllib2.get(url)
if result:
print (u"已退出")
else:
print (u"退出失败")
# if __name__ == "__main__":
# # main()
# # logout()

View File

@ -29,7 +29,7 @@ from myException.ticketIsExitsException import ticketIsExitsException
from myException.ticketNumOutException import ticketNumOutException
from myUrllib.httpUtils import HTTPClient
from utils.timeUtil import time_to_minutes, minutes_to_time
if sys.version_info.major == 2:
reload(sys)
sys.setdefaultencoding('utf-8')
@ -43,7 +43,7 @@ class select:
self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, \
self.ticke_peoples, self.station_trains, self.ticket_black_list_time, \
self.order_type, self.is_by_time, self.train_types, self.departure_time, \
self.arrival_time, self.take_time, self.order_model = self.get_ticket_info()
self.arrival_time, self.take_time, self.order_model, self.open_time = self.get_ticket_info()
self.is_auto_code = _get_yaml()["is_auto_code"]
self.auto_code_type = _get_yaml()["auto_code_type"]
self.is_cdn = _get_yaml()["is_cdn"]
@ -82,17 +82,18 @@ class select:
# 下单模式
order_model = ticket_info_config["order_model"]
open_time = ticket_info_config["open_time"]
print u"*" * 20
print u"12306刷票小助手最后更新于2019.01.02请勿作为商业用途交流群号286271084(已满) 请加2群649992274"
print(u"*" * 50)
print(u"12306刷票小助手最后更新于2019.01.02请勿作为商业用途交流群号286271084(已满) 请加2群649992274")
if is_by_time:
method_notie = u"购票方式:根据时间区间购票\n可接受最早出发时间:{0}\n可接受最晚抵达时间:{1}\n可接受最长旅途时间:{2}\n可接受列车类型:{3}\n" \
.format(minutes_to_time(departure_time), minutes_to_time(arrival_time), minutes_to_time(take_time),
" , ".join(train_types))
else:
method_notie = u"购票方式:根据候选车次购买\n候选购买车次:{0}".format(",".join(station_trains))
print u"当前配置:\n出发站:{0}\n到达站:{1}\n乘车日期:{2}\n坐席:{3}\n是否有票优先提交:{4}\n乘车人:{5}\n" \
u"刷新间隔:随机(1-3S)\n{6}\n僵尸票关小黑屋时长:{7}\n 下单接口:{8}\n 下单模式:{9}\n".format \
print (u"当前配置:\n出发站:{0}\n到达站:{1}\n乘车日期:{2}\n坐席:{3}\n是否有票优先提交:{4}\n乘车人:{5}\n" \
u"刷新间隔: 随机(1-3S)\n{6}\n僵尸票关小黑屋时长: {7}\n下单接口: {8}\n下单模式: {9}\n预售踩点时间:{10} ".format \
(
from_station,
to_station,
@ -103,12 +104,13 @@ class select:
method_notie,
ticket_black_list_time,
order_type,
order_model
)
print u"*" * 20
order_model,
open_time,
))
print (u"*" * 50)
return from_station, to_station, station_dates, set_type, is_more_ticket, ticke_peoples, station_trains, \
ticket_black_list_time, order_type, is_by_time, train_types, departure_time, arrival_time, take_time, \
order_model
order_model, open_time
def station_table(self, from_station, to_station):
"""
@ -146,7 +148,7 @@ class select:
rep = http.send(urls)
if rep and "message" not in rep and (datetime.datetime.now() - start_time).microseconds / 1000 < 500:
if cdn[i].replace("\n", "") not in self.cdn_list: # 如果有重复的cdn则放弃加入
print("加入cdn {0}".format(cdn[i].replace("\n", "")))
print(u"加入cdn {0}".format(cdn[i].replace("\n", "")))
self.cdn_list.append(cdn[i].replace("\n", ""))
print(u"所有cdn解析完成...")
@ -180,7 +182,6 @@ class select:
check_user.sendCheckUser()
from_station, to_station = self.station_table(self.from_station, self.to_station)
num = 0
# isAutoSynchroTime = False
while 1:
try:
num += 1
@ -194,13 +195,14 @@ class select:
time.sleep((open_time - now).seconds)
self.call_login()
if self.order_model is 1:
sleep_time_s = 0.1
sleep_time_t = 0.5
sleep_time_s = 0.5
sleep_time_t = 0.6
# 测试了一下有微妙级的误差应该不影响测试结果2019-01-02 22:30:00.004555,预售还是会受到前一次刷新的时间影响,暂时没想到好的解决方案
if now.strftime("%M:%S") == "29:55" or now.strftime("%M:%S") == "59:55":
print(u"预售整点模式卡点中")
time.sleep(5)
print(u"预售模式执行")
while not now.strftime("%H:%M:%S") == self.open_time:
now = datetime.datetime.now()
if now.strftime("%H:%M:%S") > self.open_time:
break
time.sleep(0.0001)
else:
sleep_time_s = 0.5
sleep_time_t = 3
@ -275,19 +277,19 @@ class select:
random_time))
time.sleep(random_time)
except PassengerUserException as e:
print e.message
print(e.message)
break
except ticketConfigException as e:
print e.message
print(e.message)
break
except ticketIsExitsException as e:
print e.message
print(e.message)
break
except ticketNumOutException as e:
print e.message
print(e.message)
break
except UserPasswordException as e:
print e.message
print(e.message)
break
except ValueError as e:
if e.message == "No JSON object could be decoded":

View File

@ -68,7 +68,7 @@ class checkOrderInfo:
self.passengerTicketStrList,
)
QueueCount.sendGetQueueCount()
elif "errMsg" in checkOrderInfoRep['data'] and checkOrderInfoRep['data']["errMsg"]:
print checkOrderInfoRep['data']["errMsg"]
elif "errMsg" in data and data["errMsg"]:
print(checkOrderInfoRep['data']["errMsg"])
elif 'messages' in checkOrderInfoRep and checkOrderInfoRep['messages']:
print (checkOrderInfoRep['messages'][0])

View File

@ -23,7 +23,7 @@ def getRandCode(is_auto_code, auto_code_type, result):
return codexy(Ofset=",".join(list(Result["Result"])), is_raw_input=False)
else:
if "Error" in Result and Result["Error"]:
print u"打码平台错误: {0}, 请登录打码平台查看-http://www.ruokuai.com/client/index?6726".format(Result["Error"])
print(u"打码平台错误: {0}, 请登录打码平台查看-http://www.ruokuai.com/client/index?6726".format(Result["Error"]))
return ""
else:
img = Image.open('./tkcode')

View File

@ -117,7 +117,7 @@ class query:
start_time = ticket_info[8]
arrival_time = ticket_info[9]
distance_time = ticket_info[10]
print start_time, arrival_time, distance_time
print(start_time, arrival_time, distance_time)
seat = j
try:
ticket_num = int(ticket_info[j])
@ -160,7 +160,7 @@ class query:
"status": True,
}
else:
print u"车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket)
print(u"车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket))
return {"code": ticket.FAIL_CODE, "status": False}

View File

@ -45,7 +45,7 @@ class queryOrderWaitTime:
raise ticketIsExitsException(ticket.WAIT_ORDER_SUCCESS.format(
data.get("orderId")))
elif data.get("msg", False):
print data.get("msg", "")
print(data.get("msg", ""))
break
elif data.get("waitTime", False):
print(ticket.WAIT_ORDER_CONTINUE.format(0 - data.get("waitTime", False)))
@ -83,7 +83,7 @@ class queryOrderWaitTime:
queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"])
else:
if queryMyOrderNoCompleteResult.get("message", False):
print queryMyOrderNoCompleteResult.get("message", False)
print(queryMyOrderNoCompleteResult.get("message", False))
return False
else:
return False

View File

@ -1,63 +0,0 @@
# -*- coding=utf-8 -*-
import httplib
import ssl
import urllib
import urllib2
import sys
from cookielib import LWPCookieJar
reload(sys)
sys.setdefaultencoding('UTF8')
cookiejar = LWPCookieJar()
cookiesuppor = urllib2.HTTPCookieProcessor(cookiejar)
opener = urllib2.build_opener(cookiesuppor, urllib2.HTTPHandler)
urllib2.install_opener(opener)
ssl._create_default_https_context = ssl._create_unverified_context
def get(url):
try:
request = urllib2.Request(url=url)
request.add_header("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
request.add_header('X-Requested-With', 'xmlHttpRequest')
request.add_header('User-Agent', "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
)
request.add_header('Referer', 'https://kyfw.12306.cn/otn/confirmPassenger/initDc')
request.add_header('Accept', '*/*')
result = urllib2.urlopen(request).read()
assert isinstance(result, object)
return result
except httplib.error as e:
print e
pass
except urllib2.URLError as e:
print e
pass
except urllib2.HTTPBasicAuthHandler, urllib2.HTTPError:
pass
def Post(url, data):
try:
request = urllib2.Request(url=url, data=urllib.urlencode(data))
# req.add_header('User-Agent', 'Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0')
# request = urllib2Post.Request(ajax_url, urllib.urlencode(dc))
request.add_header("Content-Type", "application/x-www-form-urlencoded;application/json;charset=utf-8")
request.add_header('X-Requested-With', 'xmlHttpRequest')
request.add_header('User-Agent', "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
)
request.add_header('Referer', 'https://kyfw.12306.cn/otn/confirmPassenger/initDc')
request.add_header('Accept', '*/*')
# request.add_header('Accept-Encoding', 'gzip, deflate')
for i in range(3):
result = urllib2.urlopen(request).read()
if result:
return result
else:
print("返回结果为空,正在第{0}重试".format(i))
except httplib.error as e:
return e
except urllib2.URLError as e:
return e
except urllib2.HTTPBasicAuthHandler, urllib2.HTTPError:
return ('error')