使用python制作查询火车票工具

使用python脚本实现查询火车票信息的效果图如下:

使用python制作查询火车票工具

实现的代码:

1 # coding: utf-8

2

3 “”"命令行火车票查看器

4

5 Usage:

6 tickets [-gdtkz]

7

8 Options:

9 -h,–help 显示帮助菜单

10 -g 高铁

11 -d 动车

12 -t 特快

13 -k 快速

14 -z 直达

15

16 Example:

17 tickets 北京 上海 2016-10-10

18 tickets -dg 成都 南京 2016-10-10

19 “”"

20

21 import json

22 import requests

23 import prettytable

24 from docopt import docopt

25 from colorama import init, Fore

26

27

28 class CollectInfo:

29 def init(self):

30 self.qurey_ret = []

31 self.header = [‘车次信息’, ‘发/到时间’, ‘发/到站’, ‘历时’, ‘票价’, ‘余票’]

32

33 # 获取车次相关的所有信息

34 def query_html_ret(self, query_args):

35 url = 'http://api.12306.com/v1/train/trainInfos?arrStationCode={to_station}&deptDate={date}\

36 &deptStationCode={source_station}&findGD=false’.format(to_station=query_args[‘to_station’],

37 source_station=query_args[‘source_station’],

38 date=query_args[‘date’])

39 row_ret = requests.get(url)

40 return row_ret.json()

41

42 # 解析获取到的结果

43 def paser_ret(self, row_ret):

44 trains_info = row_ret[‘data’][‘trainInfos’]

45 for info in trains_info:

46 row_info = []

47 # 获取车次信息

48 row_info.append(’\n’ + info[‘trainCode’])

49

50 # 获取车次到站时间信息

51 row_info.append(’\n’ + ‘\n’.join([Fore.GREEN + info[‘deptTime’]+ Fore.RESET,

52 Fore.RED + info[‘arrTime’]+ Fore.RESET]))

53

54 # 获取车次站点名称

55 row_info.append(’\n’ + ‘\n’.join([Fore.GREEN + info[‘deptStationName’] + Fore.RESET,

56 Fore.RED + info[‘arrStationName’]+ Fore.RESET]))

57

58 # 获取车次到达站点所需时间

59 row_info.append(’\n’ + info[‘runTime’])

60

61 # 获取票价以及余票信息

62 seat_price = []

63 seat_num = []

64 for seat in info[‘seatList’]:

65 seat_price.append(seat[‘seatName’] + ‘:’ + seat[‘seatPrice’])

66 if int(seat[‘seatNum’]) > 10:

67 ticknum = Fore.GREEN + seat[‘seatNum’] + Fore.RESET

68 else:

69 ticknum = seat[‘seatNum’]

70 seat_num.append(ticknum)

71 row_info.append(’\n’.join(seat_price))

72 row_info.append(’\n’.join(seat_num))

73 self.qurey_ret.append(row_info)

74 self.qurey_ret.append([’ ', ’ ', ’ ', ’ ', ’ ', ’ '])

75

76 return self.qurey_ret

77

78 def show_with_table(self):

79 ticket_table = prettytable.PrettyTable()

80

81 ticket_table.field_names = self.header

82

83 for row in self.qurey_ret:

84 if len(row) == 0:

85 continue

86 ticket_table.add_row(row)

87 return ticket_table

88

89

90 def main():

91 arguments = docopt(doc)

92 query_args = {}

93 init()

94

95 # 获取所有站点信息(stations.txt信息通过 函数获取)

96 # https: // kyfw.12306.cn / otn / resources / js / framework / station_name.js?station_version = 1.8971

97 f = open(‘stations.txt’, ‘r’)

98 info = f.read()

99 stations_info = json.loads(info)

100

101 # 从所有站点信息中获取所要查询站点的代码信息

102 query_args[‘to_station’] = stations_info[arguments[’’]]

103 query_args[‘source_station’] = stations_info[arguments[’’]]

104 query_args[‘date’] = arguments[’’]

105

106 # 向12306查询,得到跟车次相关的所有信息

107 collect_train = CollectInfo()

108 row_ret = collect_train.query_html_ret(query_args)

109

110 collect_train.paser_ret(row_ret)

111 table = collect_train.show_with_table()

112 print(table)

113

114

115 if name == ‘main’:

116 main()

使用python制作查询火车票工具

上一篇:实训三#3.9占位置


下一篇:洛谷 P1607 [USACO09FEB]Fair Shuttle G(贪心+信心)