前言
17年的春节即将临近的时候,跟大多数人一样都需要抢一下回家的票,庆幸我买到了回家的票,因为目的地离家还有一段距离,所以需要知道到达的时间,然后安排下中转回家的行程。就想到如果再terminal中直接可以查就好了,接着就是google了一下,果然网上有很多类似的东西,但是查询火车时刻表的功能好像没有,那就自己写吧。
环境
- chrome
- mac
项目地址
旅途
从12306官网开始
查找火车时刻表api
登陆12306输入出发地和目的地,会出来很多车子,然后选择你已经买到的那趟。见下图。
打开调试工具command+shift+j),查看网络,可以看到请求的url,点击这个url可以看到返回一个json,包含了这趟车的时刻信息和其他的一些状态信息
时刻表url--》https://kyfw.12306.cn/otn/czxx/queryByTrainNo?train_no=5l000G138920&from_station_telecode=AOH&to_station_telecode=NXG&depart_date=2017-01-25,可以看到中间有train_no车次编号from_station_telecode出发站(代号) to_station_telecode到达站(代号) depart_date出发日期,重点看一下车次编号是一个经过了处理的数据,这趟车是G1389后面还带了两个数,出发城市和到达城市也是一个映射关系。google一下发现城市的映射关系保存在https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8968,这样我们通过一些简单的处理就能得到城市和相对应的代码,很容易想到把他们放在一个map里面是再好不过的。 下面是完整的处理:
{ "2017-01-03": { "1095": { "Train_no": "270000109500", "From": "太原", "To": "兰州西" } // 省略很多 }
``` 可以看到这个结构包含一趟车的时间,车次,车次编号,出发地和终点。
渲染数据
terminal中显示表格的包有很多,我用了github上的tablewriter,他的使用是很简单。你也可以加一些自己的序列化控制符,事实上我也是这样干的。
最终效果
查询火车时刻表:
查询火车余票