def __init__(self): self.arguments = docopt(__doc__, version='Tickets 1.0') self.from_station = stations.get_telecode(self.arguments['<from>']) self.to_station = stations.get_telecode(self.arguments['<to>']) self.date = self.arguments['<date>'] self.check_arguments_validity() self.options = ''.join([key for key, value in self.arguments.items() if value is True])
def queryTrain(from_station_name, to_station_name, day): from_station = stations.get_telecode(from_station_name) to_station = stations.get_telecode(to_station_name) url='https://kyfw.12306.cn/otn/leftTicket/query?'\ 'leftTicketDTO.train_date={}&'\ 'leftTicketDTO.from_station={}&'\ 'leftTicketDTO.to_station={}&'\ 'purpose_codes=ADULT'.format(day,from_station,to_station) print(url) response = requests.get(url, verify=False) result = response.json() if 'data' not in result: msg = result.get('messages', None) if msg is not None: print(','.join(msg)) else: print('red', u'获取车次信息失败! 请联系管理员 [email protected]') exit(0) raw_trains = result['data']['result'] result = [] for train in raw_trains: data_list = train.split('|') train_data = parse_train_data(data_list) result.append(train_data) return result
def __init__(self): self.arguments = docopt(__doc__) #print(self.arguments) self.from_station = stations.get_telecode(self.arguments['<from>']) self.to_station = stations.get_telecode(self.arguments['<to>']) self.date = self.arguments['<date>'] #print(self.arguments.items()) self.options = ''.join([key for key, value in self.arguments.items() if value is True])
def cli(): arguments = docopt(__doc__, version='tickets 1.0') from_station = stations.get_telecode(arguments.get('<from>')) to_station = stations.get_telecode(arguments.get('<to>')) date = arguments.get('<date>') options = ''.join( [key for key, value in arguments.items() if value is True]) url = ('https://kyfw.12306.cn/otn/leftTicket/query?' 'leftTicketDTO.train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT').format(date, from_station, to_station) r = requests.get(url, verify=False) raw_trains = r.json()['data']['result'] x = PrettyTable() x._set_field_names([ '车次', '出发车站/到达车站', '始发车站/到达车站', '时间', '历时', '商务座', '一等座', '二等座', '高级软卧', '软卧', '动卧', '硬卧', '软座', '硬座', '无座' ]) for raw_train in raw_trains: data_list = raw_train.split('|') train_no = data_list[3] initial = train_no[0].lower() from_station_code = data_list[4] to_station_code = data_list[5] from_station_u = data_list[6] to_station_u = data_list[7] start_time = data_list[8] arrive_time = data_list[9] duration = data_list[10] swz = data_list[32] or '--' first = data_list[31] or '--' second = data_list[30] or '--' gaojirw = data_list[21] or '--' ruanw = data_list[23] or '--' yingw = data_list[28] or '--' dongwo = data_list[33] or '--' ruanz = data_list[24] or '--' yingz = data_list[29] or '--' wuzuo = data_list[26] or '--' if initial in options: x.add_row([ train_no, '\n'.join([ Fore.GREEN + stations.get_name(from_station_u) + Fore.RESET, Fore.RED + stations.get_name(to_station_u) + Fore.RESET ]), '\n'.join([ Fore.GREEN + stations.get_name(from_station_code) + Fore.RESET, Fore.RED + stations.get_name(to_station_code) + Fore.RESET ]), '\n'.join([ Fore.GREEN + start_time + Fore.RESET, Fore.RED + arrive_time + Fore.RESET ]), duration, swz, first, second, gaojirw, ruanw, yingw, dongwo, ruanz, yingz, wuzuo ]) print(x)
def cli(): arguments = docopt(__doc__, version='tickets 1.0') from_station = stations.get_telecode(arguments.get('<from>')) to_station = stations.get_telecode(arguments.get('<to>')) date = arguments.get('<date>') options = ''.join( [key for key, value in arguments.items() if value is True]) url = ('https://kyfw.12306.cn/otn/leftTicket/query?' 'leftTicketDTO.train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT').format(date, from_station, to_station) r = requests.get(url, verify=False) raw_trains = r.json()['data']['result'] pt = PrettyTable() pt._set_field_names( '车次 车站 时间 历时 商务座 一等座 二等座 高级软卧 软卧 动卧 硬卧 软座 硬座 无座'.split()) for raw_train in raw_trains: data_list = raw_train.split('|') train_no = (data_list[3]) #车次 initial = train_no[0].lower() if initial in options or not options: from_station_code = (data_list[6]) to_station_code = (data_list[7]) from_station_name = '' to_station_name = '' start_time = data_list[8] arrive_time = data_list[9] time_duration = data_list[10] normal_seat = data_list[32] or '--' first_class_seat = data_list[31] or '--' second_class_seat = data_list[30] or '--' ssoft_sleep = data_list[21] or '--' soft_sleep = data_list[23] or '--' #为空显示-- move_sleep = data_list[33] or '--' hard_sleep = data_list[28] or '--' soft_seat = data_list[24] or '--' hard_seat = data_list[29] or '--' no_seat = data_list[26] or '--' #显示 pt.add_row([ ''.join([Fore.RED + train_no + Fore.RESET]), '\n'.join([ Fore.GREEN + stations.get_name(from_station_code) + Fore.RESET, Fore.YELLOW + stations.get_name(to_station_code) + Fore.RESET ]), '\n'.join([ Fore.GREEN + start_time + Fore.RESET, Fore.YELLOW + arrive_time + Fore.RESET ]), time_duration, normal_seat, first_class_seat, second_class_seat, ssoft_sleep, soft_sleep, move_sleep, hard_sleep, soft_seat, hard_seat, no_seat ]) return pt
def cli(): arguments = docopt(__doc__, version='Tickets1.0') from_station = stations.get_telecode(arguments.get('<from>')) to_station = stations.get_telecode(arguments.get('<to>')) data = arguments.get('<data>') options = ''.join([key for key, values in arguments.items() if values is True]) url = 'https://kyfw.12306.cn/otn/leftTicket/query?' \ 'leftTicketDTO.train_date={}&' \ 'leftTicketDTO.from_station={}&' \ 'leftTicketDTO.to_station={}&' \ 'purpose_codes=ADULT'.format(data, from_station, to_station) header = '车次 车站 时间 历时 商务座 一等 二等 软卧 硬卧 硬座 无座'.split() pt = PrettyTable() pt._set_field_names(header) # 获取接口 res = requests.get(url, verify=False) raw_data = res.json()['data']['result'] for data in raw_data: data_list = data.split('|') train_no = data_list[3] train_sort = train_no[0].lower() if not options or train_sort in options: from_station_name = data_list[6] to_station_name = data_list[7] start_time = data_list[8] arrive_time = data_list[9] cost_time = data_list[10] business_seat = data_list[32] or '--' first_class_seat = data_list[31] or '--' second_class_seat = data_list[30] or '--' soft_sleep = data_list[23] or '--' hard_sleep = data_list[28] or '--' hard_seat = data_list[29] or '--' no_seat = data_list[26] or '--' pt.add_row([ train_no, '\n'.join([Fore.GREEN + stations.get_name(from_station_name) + Fore.RESET, Fore.RED + stations.get_name(to_station_name) + Fore.RESET]), '\n'.join([Fore.GREEN + start_time + Fore.RESET, Fore.RED + arrive_time + Fore.RESET]), cost_time, business_seat, first_class_seat, second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat ]) print(pt)
def cli(): arguments = docopt(__doc__, version='tickets 1.0') from_station = stations.get_telecode(arguments.get('<from>')) to_station = stations.get_telecode(arguments.get('<to>')) date = arguments.get('<date>') options = ''.join( [key for key, value in arguments.items() if value is True]) url = ('https://kyfw.12306.cn/otn/leftTicket/query?' 'leftTicketDTO.train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT').format(date, from_station, to_station) r = requests.get(url, verify=False) #print(arguments) #print(r.text) raw_trains = r.json()['data']['result'] #print(trains) pt = PrettyTable() pt._set_field_names('车次 车站 时间 历时 一等座 二等座 软卧 硬卧 硬座 无座'.split()) for raw_trains in raw_trains: data_list = raw_trains.split('|') #print(data_list[2]) train_no = data_list[3] initial = train_no[0].lower() if not options or initial in options: from_station_code = data_list[6] to_station_code = data_list[7] from_station_name = '' to_station_name = '' start_time = data_list[8] arrive_time = data_list[9] time_duration = data_list[10] first_class_seat = data_list[31] or "--" secong_class_seat = data_list[30] or "--" soft_sleep = data_list[23] or "--" hard_sleep = data_list[28] or "--" hard_seat = data_list[29] or "--" no_seat = data_list[33] or "--" pt.add_row([ train_no, '\n'.join([ stations.get_name(from_station_code), stations.get_name(to_station_code) ]), '\n'.join([start_time, arrive_time]), time_duration, first_class_seat, secong_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat ]) print(pt)
def __init__(self, from_station, to_station, date, options=None): if options is None: options = {} self.arguments = { 'from_station': from_station, 'to_station': to_station } self.arguments.update(options) self.from_station = stations.get_telecode( self.arguments['from_station']) self.to_station = stations.get_telecode(self.arguments['to_station']) self.date = date self.check_arguments_validity() self.options = ''.join( [key for key, value in self.arguments.items() if value == 1])
def run(self): url_template = ( 'https://kyfw.12306.cn/otn/leftTicket/queryO?leftTicketDTO.' 'train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT') from_station = stations.get_telecode(self.pas.form) to_station = stations.get_telecode(self.pas.to) date = self.pas.time self.check_arguments_validity(date, from_station, to_station) url = url_template.format(date, from_station, to_station) r = requests.get(url) r.encoding = 'utf-8' trains = r.json()['data']['result'] TrainCollection(trains, self.pas.option).pretty_print()
def cli(): """Command-Line Interface""" arguments = docopt(__doc__, version='Tickets 1.0') date = arguments['<date>'] from_station = stations.get_telecode( arguments['<from>']) # 从stations中获取,如果没有获取到返回None to_station = stations.get_telecode(arguments['<to>']) # 构建 url url = ('https://kyfw.12306.cn/otn/leftTicket/queryZ?' 'leftTicketDTO.train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT').format(date, from_station, to_station) r = requests.get(url, verify=False) row_trains = r.json()['data']['result'] pt = PrettyTable() pt._set_field_names('车次 车站 时间 历时 一等座 二等座 软卧 硬卧 硬座 无座'.split()) for row_train in row_trains: data_list = row_train.split('|') train_no = data_list[3] from_station_code = data_list[6] to_station_code = data_list[7] from_station_name = '' to_station_name = '' start_time = data_list[8] arrive_time = data_list[9] time_duration = data_list[10] first_class_seat = data_list[31] or '--' second_class_seat = data_list[30] or '--' soft_sleep = data_list[23] or '--' hard_sleep = data_list[28] or '--' hard_seat = data_list[29] or '--' no_seat = data_list[33] or '--' pt.add_row([ train_no, '\n'.join([ stations.get_name(from_station_code), stations.get_name(to_station_code) ]), '\n'.join([start_time, arrive_time]), time_duration, first_class_seat, second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat ]) print(pt)
def cli(): """command-line interface""" arguments = docopt(__doc__, version='Tickets 1.0') from_station = stations.get_telecode(arguments.get('<from>')) to_station = stations.get_telecode(arguments.get('<to>')) train_date = arguments['<date>'] url = ('https://kyfw.12306.cn/otn/leftTicket/query?' 'leftTicketDTO.train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT').format(train_date,from_station,to_station) print(url) options = ''.join([ key for key,value in arguments.items() if value is True ]) r = requests.get(url,verify=False) raw_trains = r.json()['data']['result'] pt = PrettyTable() pt._set_field_names('车次 车站 时间 历时 一等 二等 软卧 硬卧 硬座 无座'.split()) for raw_train in raw_trains: data_list = raw_train.split('|') train_no = data_list[3] from_station_name = data_list[6] to_station_name = data_list[7] start_time = data_list[8] arrive_time = data_list[9] time_duration = data_list[10] first_class_seat = data_list[31] or '--' second_class_seat = data_list[30] or '--' soft_sleep = data_list[23] or '--' hard_sleep = data_list[28] or '--' hard_seat = data_list[29] or '--' no_seat = data_list[33] or '--' pt.add_row([ train_no, '\n'.join([Fore.LIGHTGREEN_EX + stations.get_name(from_station_name) + Fore.RESET,Fore.RED + stations.get_name(to_station_name) + Fore.RESET]), '\n'.join([Fore.LIGHTGREEN_EX + start_time + Fore.RESET,Fore.RED + arrive_time + Fore.RESET]), time_duration, first_class_seat, second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat ]) print(pt)
def cli(): arguments = docopt(__doc__)#用docopt来解析参数 from_station=stations.get_telecode(arguments.get('<from>')) to_station=stations.get_telecode(arguments.get('<to>')) date=arguments.get('<date>') options=''.join([key for key,value in arguments.items() if value is True]) #构造请求地址 url=('https://kyfw.12306.cn/otn/leftTicket/queryZ?' 'leftTicketDTO.train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT').format(date,from_station,to_station) r=requests.get(url,verify=False,headers=headers) r.encoding=r.apparent_encoding if (r.text.find('网络可能存在问题') != -1): print('网络存在问题,请重试,可能是你访问的过于频繁!') exit() #requests里面自带了json解析器,所以我们可以用来解析python raw_trains=r.json()['data']['result'] #原始火车信息 pt=PrettyTable() #初始化一个prettytable对象 pt._set_field_names('车次 车站 时间 历时 商务座 一等座 二等座 高级软卧 软卧 动卧 硬卧 软座 硬座 无座'.split()) for raw_train in raw_trains: #对每一趟列车进行解析 data_list=raw_train.split('|') train_no=data_list[3] initial=train_no[0].lower() #获取首字母,表示车次 if not options or initial in options: #如果没有设置options或者首字母在options里面 from_station_code=data_list[6] to_station_code=data_list[7] start_time=data_list[8] #始发时间 arrive_time=data_list[9] #到达时间 time_duration=data_list[10] #历时 swz_class_seat = data_list[32] if data_list[32] else '--' # 商务座 first_class_seat=data_list[31] if data_list[31] else '--' #一等座 second_class_seat=data_list[30] if data_list[30] else '--' #二等座 gjrw_class_seat = data_list[21] if data_list[21] else '--' # 高级软卧 rw_class_seat = data_list[23] if data_list[23] else '--' # 软卧 dw_class_seat = data_list[27] if data_list[27] else '--' # 动卧 yw_class_seat = data_list[28] if data_list[28] else '--' # 硬卧 soft_seat = data_list[24] if data_list[24] else '--' #软座 hard_seat=data_list[29] if data_list[29] else '--' #硬座 no_seat=data_list[26] if data_list[26] else '--' #无座 pt.add_row([ Fore.YELLOW + train_no + Fore.RESET, '\n'.join([ Fore.GREEN + stations.get_name(from_station_code) + Fore.RESET, Fore.RED + stations.get_name(to_station_code) + Fore.RESET]), '\n'.join([ Fore.GREEN + start_time + Fore.RESET, Fore.RED + arrive_time + Fore.RESET]), time_duration, #历时 swz_class_seat, # 商务座 first_class_seat, #一等座 second_class_seat, #二等座 gjrw_class_seat, #高级软卧 rw_class_seat, #软卧 dw_class_seat, #动卧 yw_class_seat, #硬卧 soft_seat, #软座 hard_seat, #硬座 no_seat]) #无座 print(pt)
def get_tickets(appoin=None): while(True): train_date = info.train_date start = info.start stop = info.stop from_station = stations.get_telecode(start) to_station = stations.get_telecode(stop) url = ( 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.' 'train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT' ).format(train_date, from_station, to_station) headers = { 'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init', 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36', 'X-Requested-With': 'XMLHttpRequest' } data = requests.get(url, headers=headers, verify=False).json() result = data['data']['result'] lenth = len(result) trains = [] hard_sleeper = [] hard_seat = [] first_class_seat = [] second_class_seat = [] gord = [] for i in range(int(lenth)): x = result[i].split('|') gord.append(x[3][0]) trains.append(x[3]) hard_seat.append(x[29]) hard_sleeper.append(x[28]) first_class_seat.append(x[31]) second_class_seat.append(x[30]) try: appoint = trains.index(appoin) if (gord[appoint] == 'G' or gord == 'D'): one = (first_class_seat[appoint] != '无' and first_class_seat[appoint] != ' ') two = (second_class_seat[appoint] != '无' and second_class_seat[appoint] != ' ') while (one or two): if (one): sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有一等座票!') % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600) else: sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有二等座票!') % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600) else: three = (hard_sleeper[appoint] != '无' and hard_sleeper[appoint] != ' ') four = (hard_seat[appoint] != '无' and hard_seat[appoint] != ' ') while (three or four): if (three): sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有卧铺票!') % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600) else: sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有硬座票!') % (start, stop, train_date, trains[appoint]), '火车票监票脚本', 3600) except ValueError: for j in range(int(lenth)): if (gord[j] == 'G' or gord == 'D'): one = (first_class_seat[j] != '无' and first_class_seat[j] != ' ') two = (second_class_seat[j] != '无' and second_class_seat[j] != ' ') while (one or two): if (one): sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有一等座票!') % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600) else: sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有二等座票!') % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600) else: three = (hard_sleeper[j] != '无' and hard_sleeper[j] != ' ') four = (hard_seat[j] != '无' and hard_seat[j] != ' ') while (three or four): if (three): sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有卧铺票!') % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600) else: sentmail(('始发站:%s' + '\n' + '终点站:%s' + '\n' + '时间:%s' + '\n' + '车次:%s' + '\n' + '该列车有硬座票!') % (start, stop, train_date, trains[j]), '火车票监票脚本', 3600) time.sleep(3)
def cli(): argv_len = len(sys.argv) print(argv_len) if argv_len != 4 and argv_len != 5: print(__doc__) return None print('searching ticket.....') #arguments = docopt(__doc__,version='ticket 1.0') #print(arguments) if 4 == argv_len: from_station = stations.get_telecode(sys.argv[1]) to_station = stations.get_telecode(sys.argv[2]) date = sys.argv[3] options = None else: from_station = stations.get_telecode(sys.argv[2]) to_station = stations.get_telecode(sys.argv[3]) date = sys.argv[4] options = sys.argv[1] #list(sys.argv[1])[1:] #print(options, type(options)) #print(not options or 'd' in options) # 列表推导式,得到的是查询车次类型的集合 #options = None#''.join([key for key,value in arguments.items() if value is True]) #print(options) url = ('https://kyfw.12306.cn/otn/leftTicket/query?' 'leftTicketDTO.train_date={}&' 'leftTicketDTO.from_station={}&' 'leftTicketDTO.to_station={}&' 'purpose_codes=ADULT').format(date,from_station,to_station) print(url) r = requests.get(url, verify=False) #print(r.json()) # requests得到的是一个json格式的对象,r.json()转化成python字典格式数据来提取,所有的车次结果result raw_trains = r.json()['data']['result'] #print(raw_trains) pt = PrettyTable() pt._set_field_names("车次 车站 始终 时间 经历时 一等座 二等座 软卧 硬卧 硬座 无座".split()) for raw_train in raw_trains: # split切割之后得到的是一个列表 #print(raw_train) data_list = raw_train.split("|") #print(data_list[3:]) train_no = data_list[3] initial = train_no[0].lower() #print(initial, type(initial),not options or initial in options) # 判断是否是查询特定车次的信息 if not options or initial in options: begin_station_code = data_list[4] end_station_code = data_list[5] from_station_code = data_list[6] to_station_code = data_list[7] from_station_name = '' to_station_name = '' begin_station_name = '' end_station_name = '' start_time = data_list[8] arrive_time = data_list[9] time_duration = data_list[10] first_class_seat = data_list[31] or "--" second_class_seat = data_list[30] or "--" soft_sleep = data_list[23] or "--" hard_sleep = data_list[28] or "--" hard_seat = data_list[29] or "--" no_seat = data_list[33] or "--" pt.add_row([ # 对特定文字添加颜色 train_no, '\n'.join([stations.get_name(from_station_code), stations.get_name(to_station_code)]), '\n'.join([stations.get_name(begin_station_code), stations.get_name(end_station_code)]), '\n'.join([start_time, arrive_time]), #'\n'.join([Fore.GREEN + stations.get_name(from_station_code) + Fore.RESET, Fore.RED + stations.get_name(to_station_code) + Fore.RESET]), #'\n'.join([Fore.GREEN + start_time + Fore.RESET,Fore.RED + arrive_time + Fore.RESET]), time_duration, first_class_seat, second_class_seat, soft_sleep, hard_sleep, hard_seat, no_seat ]) print(pt)