实现的代码:
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