Skip to content

Commit

Permalink
update version 1.2.003
Browse files Browse the repository at this point in the history
  • Loading branch information
testerSunshine committed Dec 19, 2019
1 parent 008c7ec commit 04a2716
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 23 deletions.
26 changes: 13 additions & 13 deletions TickerConfig.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率

# 刷票模式:1=刷票 2=候补+刷票
TICKET_TYPE = 2
TICKET_TYPE = 1

# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2020-01-05"
"2020-01-17"
]

# 填入需要购买的车次(list),"G1353"
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
STATION_TRAINS = ["G1002"]
STATION_TRAINS = ["G1120"]

# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "深圳北"
FROM_STATION = "广州"

# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = "长沙南"
TO_STATION = "武汉"

# 座位(list) 多个座位ex:
# "商务座",
Expand All @@ -33,7 +33,7 @@
# "硬座",
# "无座",
# "动卧",
SET_TYPE = ["硬座"]
SET_TYPE = ["二等座"]

# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
# bool
Expand All @@ -42,7 +42,7 @@
# 乘车人(list) 多个乘车人ex:
# "张三",
# "李四"
TICKET_PEOPLES = []
TICKET_PEOPLES = [""]

# 12306登录账号
USER = ""
Expand All @@ -56,7 +56,7 @@

# 设置2本地自动打码,需要配置tensorflow和keras库,3为云打码,由于云打码服务器资源有限(为2h4C的cpu服务器),请不要恶意请求,不然只能关闭服务器
# ps: 请不要一直依赖云服务器资源,在此向所有提供服务器同学表示感谢
AUTO_CODE_TYPE = 2
AUTO_CODE_TYPE = 3

# 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改
HOST = "120.77.154.140:8000"
Expand Down Expand Up @@ -102,7 +102,7 @@

# 下单模式 1 为预售,整点刷新,刷新间隔0.1-0.5S, 然后会校验时间,比如12点的预售,那脚本就会在12.00整检票,刷新订单
# 2 是捡漏,捡漏的刷新间隔时间为0.5-3秒,时间间隔长,不容易封ip
ORDER_MODEL = 2
ORDER_MODEL = 1

# 是否开启代理, 0代表关闭, 1表示开始
# 开启此功能的时候请确保代理ip是否可用,在测试放里面经过充分的测试,再开启此功能,不然可能会耽误你购票的宝贵时间
Expand All @@ -113,7 +113,7 @@
IS_PROXY = 0

# 预售放票时间, 如果是捡漏模式,可以忽略此操作
OPEN_TIME = "13:00:00"
OPEN_TIME = "12:59:50"
# 1=使用selenium获取devicesID
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium
Expand All @@ -126,8 +126,8 @@
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"

# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
RAIL_EXPIRATION = ""
RAIL_DEVICEID = ""
RAIL_EXPIRATION = "1577033439142"
RAIL_DEVICEID = "PuV16sVaV-CTGsFZUuL8JLAk4OhuT1wgUYC_W3L2JZfWx8Ygx8LOPkko3PSOrK5_xSKhXjgyTMS8dBmj1RZHL2CKBTmVs6UG_yptlB4NJbGHldltrLMTUEgoDpSkpX2vzpGXgMQsTRzgOXfuQkAWwS4GjCxSmV3C; BIGipServerpassport=820510986.50215.0000; route=9036359bb8a8a461c164a04f8f50b252"


# 1=>为一直随机ua,2->只启动的时候随机一次ua
Expand All @@ -152,4 +152,4 @@
MIN_TIME = 1

# 软件版本
RE_VERSION = "1.2.002"
RE_VERSION = "1.2.003"
24 changes: 20 additions & 4 deletions agency/cdn_utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# encoding=utf8
import datetime
import operator
import os
import requests
from config import urlConf
Expand Down Expand Up @@ -27,10 +28,11 @@ def run(self):
http._cdn = cdn.replace("\n", "")
start_time = datetime.datetime.now()
rep = http.send(url)
if rep and "message" not in rep and (datetime.datetime.now() - start_time).microseconds / 1000 < 3000:
retTime = (datetime.datetime.now() - start_time).microseconds / 1000
if rep and "message" not in rep and retTime < 3000:
if cdn.replace("\n", "") not in cdn_list: # 如果有重复的cdn,则放弃加入
print(f"加入cdn: {cdn}")
cdn_list.append(cdn.replace("\n", ""))
cdn_list.append({"ip": cdn.replace("\n", ""), "time": retTime})


def open_cdn_file(cdnFile):
Expand All @@ -50,6 +52,19 @@ def open_cdn_file(cdnFile):
return cdn


def sortCdn():
"""
对cdn进行排序
:return:
"""
ips = []
cs = sorted(cdn_list, key=operator.itemgetter('time'))
for c in cs:
print(f"当前ip: {c['ip']}, 延时: {c['time']}")
ips.append(c["ip"])
return ips


def filterCdn():
"""
过滤cdn, 过滤逻辑为当前cdn响应值小于1000毫秒
Expand All @@ -71,13 +86,14 @@ def filterCdn():

print(f"当前有效cdn个数为: {len(cdn_list)}")
if cdn_list:
ips = sortCdn()
path = os.path.join(os.path.dirname(__file__), f'../filter_cdn_list')
f = open(path, "a+")
f.seek(0)
f.truncate()
f.writelines("")
for c in cdn_list:
f.writelines(f"{c}\n")
for ip in ips:
f.writelines(f"{ip}\n")
f.close()


Expand Down
8 changes: 4 additions & 4 deletions init/select_ticket_info.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def __init__(self):
self._station_seat = [seat_conf[x] for x in TickerConfig.SET_TYPE]
self.auto_code_type = TickerConfig.AUTO_CODE_TYPE
self.httpClint = HTTPClient(TickerConfig.IS_PROXY)
self.httpClint.cdn = self.cdn_list[random.randint(0, len(self.cdn_list) - 1)]
self.httpClint.cdn = self.cdn_list[random.randint(0, 4)]
self.urls = urlConf.urls
self.login = GoLogin(self, TickerConfig.IS_AUTO_CODE, self.auto_code_type)
self.cookies = ""
Expand Down Expand Up @@ -134,8 +134,8 @@ def main(self):
now = datetime.datetime.now()
if TickerConfig.ORDER_MODEL is 1:
print(f"预售还未开始,阻塞中,预售时间为{TickerConfig.OPEN_TIME}, 当前时间为: {now.strftime('%H:%M:%S')}")
sleep_time_s = 0.5
sleep_time_t = 0.6
sleep_time_s = 0.1
sleep_time_t = 0.3
# 测试了一下有微妙级的误差,应该不影响,测试结果:2019-01-02 22:30:00.004555,预售还是会受到前一次刷新的时间影响,暂时没想到好的解决方案
while now.strftime("%H:%M:%S") < TickerConfig.OPEN_TIME:
now = datetime.datetime.now()
Expand All @@ -162,7 +162,7 @@ def main(self):
)
queryResult = q.sendQuery()
# 查询接口
if queryResult.get("status", False):
if queryResult.get("status"):
train_no = queryResult.get("train_no", "")
train_date = queryResult.get("train_date", "")
stationTrainCode = queryResult.get("stationTrainCode", "")
Expand Down
2 changes: 1 addition & 1 deletion inter/GetPassCodeNewOrderAndLogin.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ def getPassCodeNewOrderAndLogin1(session, imgType):
img.write(base64.b64decode(result))
return result
except OSError:
print(u"验证码下载失败,可能ip被封,确认请手动请求: {0}".format(codeImgUrl))
print(u"验证码下载失败,可能ip被封或者文件写入没权限")


if __name__ == '__main__':
Expand Down
4 changes: 3 additions & 1 deletion inter/Query.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def sendQuery(self):
:return:
"""
if TickerConfig.IS_CDN == 1 and self.session.cdn_list:
self.httpClint.cdn = self.session.cdn_list[random.randint(0, len(self.session.cdn_list) - 1)]
self.httpClint.cdn = self.session.cdn_list[random.randint(4, len(self.session.cdn_list) - 1)]
for station_date in self.station_dates:
select_url = copy.copy(self.urls["select_url"])
select_url["req_url"] = select_url["req_url"].format(station_date, self.from_station, self.to_station,
Expand Down Expand Up @@ -169,13 +169,15 @@ def sendQuery(self):
"seat": [set_type],
"train_no": ticket_info[2],
"status": True,
"cdn": self.httpClint.cdn,
}
elif ticket_info[3][0] in ["T", "Z", "K"] and set_type in ["硬卧", "硬座", "无座", "软座", "软卧"]:
return {
"secretList": ticket_info[0],
"seat": [set_type],
"train_no": ticket_info[2],
"status": True,
"cdn": self.httpClint.cdn,
}
else:
print(u"车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket))
Expand Down
Binary file modified tkcode.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 04a2716

Please sign in to comment.