Exemplo n.º 1
0
def get_from_to_station_names(data_list):
    from_station_code = data_list[6]
    to_station_code = data_list[7]
    return '\n'.join([
        stations.get_name(from_station_code),
        stations.get_name(to_station_code)
    ])
Exemplo n.º 2
0
 def get_from_to_station_name(self, data_list):
     from_station_telecode = data_list[6]
     to_station_telecode = data_list[7]
     return '\n'.join([
         self.colored('green', stations.get_name(from_station_telecode)),
         self.colored('red', stations.get_name(to_station_telecode))
     ])
Exemplo n.º 3
0
def parse_train_data(data_list):
    train_code = data_list[3]
    from_station_name = stations.get_name(data_list[6])
    to_station_name = stations.get_name(data_list[7])
    start_time = data_list[8]
    arrive_time = data_list[9]
    time_duration = data_list[10]
    business_class_seat = data_list[32] or data_list[25] or '--'
    first_class_seat = data_list[31] or '--'
    second_class_seat = data_list[30] or '--'
    senior_soft_sleep = data_list[21] or '--'
    soft_sleep = data_list[23] or '--'
    move_seat = 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 '--'
    other = data_list[22] or '--'

    is_support_card = int(data_list[18] or 0)

    return [
        train_code, from_station_name, to_station_name, start_time,
        arrive_time, time_duration, business_class_seat, first_class_seat,
        second_class_seat, senior_soft_sleep, soft_sleep, move_seat,
        hard_sleep, soft_seat, hard_seat, no_seat, other, is_support_card
    ]
Exemplo n.º 4
0
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)
Exemplo n.º 5
0
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
Exemplo n.º 6
0
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)
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
    def initDc(self, date):
        # 请求订票信息
        url = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'
        res = self.session.post(url, data={"_json_att": ""}).text
        tk = re.search(r'globalRepeatSubmitToken = \'(.+?)\'', res).group(1)
        leftTicketStr = re.search(r'\'leftTicketStr\':\'(.+?)\'', res).group(1)
        key_check_isChange = re.search(r'\'key_check_isChange\':\'(.+?)\'',
                                       res).group(1)
        leftTickets = re.findall(r"\w+num\':\'[1-9]\d*\'", res)

        if len(leftTickets) == 0:  # 判断是否存在硬座
            print('没票了,5秒后自动刷新')
            time.sleep(5)
            self.initDc(date)

        else:
            station_train_code = re.search(r'\'station_train_code\':\'(.+?)\'',
                                           res).group(1)  # 车次
            from_station = re.search(r'\'from_station\':\'(.+?)\'',
                                     res).group(1)  # 出发地
            to_station = re.search(r'\'to_station\':\'(.+?)\'',
                                   res).group(1)  # 目的地
            train_location = re.search(r'\'train_location\':\'(.+?)\'',
                                       res).group(1)
            train_no = re.search(r'\'train_no\':\'(.+?)\'',
                                 res).group(1)  # 车次完整号码
            start_time = re.search(r'\'start_time\':\'(.+?)\'', res).group(1)
            arrive_time = re.search(r'\'arrive_time\':\'(.+?)\'', res).group(1)
            users = self.getPassenger(tk)
            ticket_num = re.findall(r"\w+num\':\'[1-9]\d*\'", res)
            prices = re.findall(r"\w+price\':\'\d\d\d\d\d\'", res)

            t_file = [
                station_train_code,
                stations.get_name(from_station), start_time,
                stations.get_name(to_station), arrive_time, ticket_num, prices,
                users, tk, leftTicketStr, from_station, to_station,
                train_location, train_no, key_check_isChange, date
            ]
            return t_file
Exemplo n.º 10
0
def leadin():  #自定义将数据导入数据库的函数
    conn = sqlite3.connect('12306.db')  #建立与数据库的连接
    cursor = conn.cursor()  #使用游标进行操作
    SQL1 = '''create table if not exists alldata(车次,日期,始发站,终点站,出发时间,到达时间,历时,
            商务座,一等座,二等座,动卧,软卧,硬卧,硬座,无座,PRIMARY KEY(车次,日期))'''
    # SQL1语句在数据库内创建一张表(如果已经存在则不再创建),以车次,日期作为主键
    cursor.execute(SQL1)  #执行SQL1语句
    conn.commit()  #递交执行结果
    for raw_train in raw_trains:  #用循环将车次信息以列表导入数据库
        data_list = raw_train.split('|')
        SQL2 = '''insert or replace into alldata (车次,日期,始发站,终点站,出发时间,到达时间,历时,
            商务座,一等座,二等座,动卧,软卧,硬卧,硬座,无座) values('%s','%s','%s','%s','%s','%s','%s','%s',
            '%s','%s','%s','%s','%s','%s','%s')''' % (
            data_list[3], date, stations.get_name(
                data_list[6]), stations.get_name(
                    data_list[7]), data_list[8], data_list[9], data_list[10],
            data_list[32], data_list[31], data_list[30], data_list[33],
            data_list[23], data_list[28], data_list[29], data_list[26])
        #以车次,日期为主键判断是否存在,不存在则插入,存在则更新
        cursor.execute(SQL2)
        conn.commit()
    conn.close()
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
def tickets(entry2, entry3, entry4, entry5):

    global date

    str = entry2.get()  #请输入出发站
    str1 = entry3.get()  #请输入到达站
    date = entry4.get()  #请输入出发日期(格式xxxx-xx-xx)
    options = entry5.get()  #请输入列车类型(格式g、d、t、k、z)

    #获取地名对应的简写代码
    from_station = stations.station[str]
    to_station = stations.station[str1]

    #   例如:https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2020-06-19&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT

    #对url进行分析,拿到正确的url
    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)

    #设置headers
    headers = {
        "Cookie":
        "tk=-tIp2gt3OFnd85DwD1ZPefIm_hqqr_fZ4R8LmgtyT1T0; JSESSIONID=8C879BE703110108760AB7B06D189E4C; _jc_save_wfdc_flag=dc; ten_key=XHg9EqyTtYQzWSFbtdFVvi/EYPgxHIlZ; ten_js_key=XHg9EqyTtYQzWSFbtdFVvi%2FEYPgxHIlZ; ten_join_key=XHg9EqyTtYQzWSFbtdFVvi%2FEYPgxHIlZ%2CXHg9EqyTtYQzWSFbtdFVvi%2FEYPgxHIlZ; _jc_save_toStation=%u4E0A%u6D77%2CSHH; RAIL_EXPIRATION=1592636846009; RAIL_DEVICEID=VBzKZAfI0UiD-1Yb5clAfVIDbU7xbTVZh1yYP4d0A67zrJm_cXcZICUuM4ybvuqHzkOzcI9eCiAaF8VEetB7JdRw6K0UBo1duL5H_CO4KRFq4qqnM4pS3BBgxrAdrY4gadfZ3I5JO8ZXq17sk8UJ2PkpVMizthOp; BIGipServerpassport=988283146.50215.0000; route=6f50b51faa11b987e576cdb301e545c4; _jc_save_toDate=2020-06-19; BIGipServerpool_passport=283968010.50215.0000; BIGipServerotn=921698826.24610.0000; _jc_save_fromStation=%u5357%u4EAC%u5357%2CNKH; _jc_save_fromDate=2020-06-20"
    }

    r = requests.get(url, headers=headers, verify=False)
    r = r.text

    # requests得到的是一个json格式的对象,利用json转化成python字典格式数据来提取
    j = json.loads(r)

    global raw_trains  #定义全局变量,在导入数据库函数中使用
    raw_trains = j['data']['result']  #提取J中的“data”和“result”数据

    x = PrettyTable()

    x._set_field_names(
        '车次 车站 时间 历时 商务座 一等座  二等座  动卧  软卧   硬卧  硬座 无座'.split())  #得到信息的列表
    for raw_train in raw_trains:

        data_list = raw_train.split('|')  #由于在raw_train 中分隔符为“|”,故用此将信息隔开

        train_number = data_list[3]  #获取列车编号
        initial = train_number[0].lower(
        )  #由于在raw_train 中列车类型首字母均为大写,例如“G5”,为了和开始我们的信息的填写相对应,我们这里进行大小写转换

        if not options or initial in options:  #如果没有options(此时不做判断全部输出) 或者 列车首字母小写在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]  #历时
            business_seat = data_list[32] or '--'  #商务座,如果数据为空返回“--”
            first_class_seat = data_list[31] or '--'  #一等座
            second_class_seat = data_list[30] or '--'  #二等座
            pneumatic_sleep = data_list[33] 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 '--'  #无座
            x.add_row([
                train_number,
                '\n'.join([
                    stations.get_name(from_station_code),
                    stations.get_name(to_station_code)
                ]),  #把站名放在一起
                '\n'.join([start_time, arrive_time]),  #把发车时间和到达时间放在一起
                time_duration,
                business_seat,
                first_class_seat,
                second_class_seat,
                pneumatic_sleep,
                soft_sleep,
                hard_sleep,
                hard_seat,
                no_seat
            ])  #利用prettytable美化一下,使之输出为表格形式

    #这里用tkinter展示

    global root
    root = Tk()
    root.geometry("800x600")
    root.title("列车时刻表")
    text = Text(root, width=800, height=500)
    btn1 = Button(root, text='导入数据库', command=leadin)  #按钮一将数据导入数据库
    btn2 = Button(root, text='到库内查询', command=SS)  #按钮二执行自定义SS函数
    text.place(relx=0, relwidth=0.9, rely=0, relheight=1)
    btn1.place(relx=0.9, relwidth=0.1, rely=0.4, relheight=0.2)
    btn2.place(relx=0.9, relwidth=0.1, rely=0.6, relheight=0.2)
    text.insert(INSERT, x)
    root.mainloop()
Exemplo n.º 13
0
def cli():

    arguments = docopt(__doc__, version='Tickets 1.0')  #實例化命令行參數
    from_station = stations.get_code(arguments.get("<from>"))  #得到命令行輸入起始站的編號
    to_station = stations.get_code(arguments.get("<to>"))  #得到命令行輸入終點站編號
    date = arguments.get("<date>")  #得到輸入日期

    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)  #將上述參數放進 url
    try:
        r = requests.get(
            url,
            verify=False,
            timeout=100,
            headers={
                "User-Agent":
                "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:57.0) Gecko/20100101 Firefox/57.0"
            },
            allow_redirects=False)  #請求 url
        r.raise_for_status()
    except:
        print("error!")

    raw_trains = r.json()["data"]["result"]  #將json數據改爲列表

    #設定prettytable格式

    x = pt("車次 起始站/終點站 發車時刻/行車時間 歷時 一等座 二等坐 軟臥 硬臥 硬座 無坐".split(" "))
    x.align[""] = "|"
    x.padding_width = 1

    #從 json文件中解析數據

    for raw_train in raw_trains:
        data_list = raw_train.split("|")
        train_number = data_list[3]
        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]
        first_seat = data_list[31] or "--"
        second_seat = data_list[30] or "--"
        soft_bed = data_list[23] or "--"
        hard_bed = data_list[28] or "--"
        hard_seat = data_list[29] or "--"
        no_seat = data_list[33] or "--"

        #向  prettytable 中填充數據

        x.add_row([
            Fore.BLUE + train_number + 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, Fore.YELLOW + first_seat, second_seat, soft_bed,
            hard_bed, hard_seat, no_seat + Fore.RESET
        ])

    print(x)
Exemplo n.º 14
0
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)
Exemplo n.º 15
0
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)