一、背景
每当节假日或者过年期间,在12306想抢到票是一件很困难得事情。
这里介绍一种在12306查询出没票的情况下,还能够出行的方案。
假设你要从A去B,在12306查询从A到B的车票都售罄了,一般情况就觉得没票了。选择候补或者修改出行日期。其实我们还可以查询A到中间站点C(C是A到B车次的中间站点)的余票情况,如果有A到C有票,那可以先买票上车,再从C补票到B,也实现了从A到B的出行方式。
原理
从A到B可能存在很多中间站C到B的票被别人买走了,导致你查询出的A到B车票很少。但是A到C的票还在,你还可以购买。只要你上了火车,那么想补票去哪都可以了,你要做的就是合法的混上你想要的车次。
难点
A到B存在很多车次,车次不同,中间站点也不同,想通过人工的方式去统计出这些中间站点,并且去一一查询余票情况,显然是不太可行。因此借助程序自动化的方式去实现。
二、方案设计
整体方案分三个流程
- 查询出A到B所有符合要求的车次信息,统计出有余票和没余票的车次
- 对没余票的车次,提取出所有中间站点C信息,并且关联映射到对应车次
- 拿到所有中间站点,查询A到任意中间站点C的车次余票信息,找出有余票并且车次和步骤一没余票匹配的车次。
三、实现
3.1 查询车次
这里可以去12306官网查询车票情况,浏览器F12观察车次接口请求信息。实际12306通过otn/leftTicket/queryZ接口实现了车票查询,返回json中有完整车票信息。提取出其中满足要求的车次。并且将车次分成有余票,没余票两部分。
3.2 查询中间站
对没余票的车次,提取出所有中间站点C信息,这里也是有官方接口otn/czxx/queryByTrainNo,浏览器F12自行观察,并且找出所有中间站点和对应车次映射关系
3.3 找有余票的中间站
对上一步得到的中间站点,对每个中间站点C都查询A到C的车次信息,找出有余票并且在步骤一种属于没余票部分的车次。
四、结果总结
实际效果:
查询A(南昌)到B(上海)都没票了
通过上面流程获取的结果:
结果解读,第一条内容表示A(南昌)到B(上海)有中间站C(德安),车次G2790 在A到B无票,A到C有票,A点发车时间10:38,到C历时00:31,到B历时05:45
补票还要站五个多小时,也是蛮痛苦的!
去网站查下南昌到德安的票:
果然是有票的,可以混上车了!
总结
本文介绍了一种另类的12306出行购票方式。
在实在买不到票但又很想出行的情况下,通过这种方式能帮你找出一些车票先上车,然后再补票去你想去的目的地。