实现的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
# coding: utf-8 """命令行火车票查看器 usage: tickets [-gdtkz] options: -h,--help 显示帮助菜单 -g 高铁 -d 动车 -t 特快 -k 快速 -z 直达 example: tickets 北京 上海 2016-10-10 tickets -dg 成都 南京 2016-10-10 """ import json import requests import prettytable from docopt import docopt from colorama import init, fore class collectinfo: def __init__( self ): self .qurey_ret = [] self .header = [ '车次信息' , '发/到时间' , '发/到站' , '历时' , '票价' , '余票' ] # 获取车次相关的所有信息 def query_html_ret( self , query_args): url = 'http: / / api. 12306.com / v1 / train / traininfos?arrstationcode = {to_station}&deptdate = {date}\ &deptstationcode = {source_station}&findgd = false '.format(to_station=query_args[' to_station'], source_station = query_args[ 'source_station' ], date = query_args[ 'date' ]) row_ret = requests.get(url) return row_ret.json() # 解析获取到的结果 def paser_ret( self , row_ret): trains_info = row_ret[ 'data' ][ 'traininfos' ] for info in trains_info: row_info = [] # 获取车次信息 row_info.append( '\n' + info[ 'traincode' ]) # 获取车次到站时间信息 row_info.append( '\n' + '\n' .join([fore.green + info[ 'depttime' ] + fore.reset, fore.red + info[ 'arrtime' ] + fore.reset])) # 获取车次站点名称 row_info.append( '\n' + '\n' .join([fore.green + info[ 'deptstationname' ] + fore.reset, fore.red + info[ 'arrstationname' ] + fore.reset])) # 获取车次到达站点所需时间 row_info.append( '\n' + info[ 'runtime' ]) # 获取票价以及余票信息 seat_price = [] seat_num = [] for seat in info[ 'seatlist' ]: seat_price.append(seat[ 'seatname' ] + ':' + seat[ 'seatprice' ]) if int (seat[ 'seatnum' ]) > 10 : ticknum = fore.green + seat[ 'seatnum' ] + fore.reset else : ticknum = seat[ 'seatnum' ] seat_num.append(ticknum) row_info.append( '\n' .join(seat_price)) row_info.append( '\n' .join(seat_num)) self .qurey_ret.append(row_info) self .qurey_ret.append([ ' ' , ' ' , ' ' , ' ' , ' ' , ' ' ]) return self .qurey_ret def show_with_table( self ): ticket_table = prettytable.prettytable() ticket_table.field_names = self .header for row in self .qurey_ret: if len (row) = = 0 : continue ticket_table.add_row(row) return ticket_table def main(): arguments = docopt(__doc__) query_args = {} init() # 获取所有站点信息(stations.txt信息通过 函数获取) # https: // kyfw.12306.cn / otn / resources / js / framework / station_name.js?station_version = 1.8971 f = open ( 'stations.txt' , 'r' ) info = f.read() stations_info = json.loads(info) # 从所有站点信息中获取所要查询站点的代码信息 query_args[ 'to_station' ] = stations_info[arguments['']] query_args[ 'source_station' ] = stations_info[arguments['']] query_args[ 'date' ] = arguments[''] # 向12306查询,得到跟车次相关的所有信息 collect_train = collectinfo() row_ret = collect_train.query_html_ret(query_args) collect_train.paser_ret(row_ret) table = collect_train.show_with_table() print (table) if __name__ = = '__main__' : main() |
总结
以上所述是小编给大家介绍的使用python脚本查询火车票工具,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://www.cnblogs.com/zpzhue/archive/2018/07/19/9336235.html