36

决战春运之巅,我们用这个项目抢到了火车票

 5 years ago
source link: https://www.jiqizhixin.com/articles/2019-12-26-3
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

uYjyaiR.jpg!web

对于程序员来说,抢票可不止这两种「常规操作」。最近几天在 GitHub 全球趋势榜上,几个火车抢票项目一直名列前茅。

v22AZru.jpg!web 国人占领 GitHub 趋势榜: 在 12306 上自动抢票的 Python 项目最近几天 star 量飞涨。

目前在 GitHub 上最火的两个 12306 抢票项目是:

  • 12306 购票小助手(约 23200 Star):https://github.com/testerSunshine/12306

  • py12306 购票助手(约 9000 Star):https://github.com/pjialin/py12306

此外还有两个 12306 网站验证码识别工具:

  • https://github.com/YinAoXiong/12306_code_server

  • https://github.com/zhaipro/easy12306

这些项目其实并不是刚刚出现的,它们已经经过了去年春节抢票,以及五一、十一抢票的考验。就其中 star 量最高的那两个来说——自去年春节之后,「12306 购票小助手」更新了图形界面,加入了购票成功信息推送,增加了候补订单/捡漏功能等等。

为什么用工具抢票几率更高?因为这种方法可以 免去输入验证码、并略过网页刷新等待的时间。

由于 Python 官方对于 2.X 版本支持的结束,目前项目仅支持 Python 3.6 以上版本。机器之心选择了「py12306 购票助手」项目进行了测(qiang)试(piao)。

抢票效果很惊人

这一工具能否抢到票?其实,机器之心小编也正饱受春节回老家抢不到票的困扰,所以编辑部用了这个神奇的项目,结果 成功抢到了车票

不要被 GitHub 上的代码吓到了,这些工具使用起来非常简单。

你看,小编刚开始刷票就抢到了一张从北京到长沙的高铁票,我们再登陆 12306 的官方网站就可以直接付款了。

N3imQvi.jpg!web

总体而言,py12306 购票助手使用非常便捷,体验也是非常好的。毕竟有什么报错,大家都可以在 Issue 中找到解答。这样的流行项目,很多开发者已经帮我们试过水了。

使用流程如下:

  1. 下载项目并安装相关依赖库;

  2. 打开参数文档,输入自己的用户名、密码、起止城市(支持多个车站)、发车时间段、座位信息;

  3. 启动程序,搜索车次;

  4. 如果发现了合适的车票,会自动下单,并通过邮件、微信等工具提醒。

  5. 最后,登录 12306 付款~

值得注意的是,每次重新启动,程序都会从历史进程中获取信息,并尝试直接恢复用户的登录等状态。如下是启动抢票功能后的初始化界面:

2mQreeJ.jpg!web

当然,如果当前车次或车站没有多余的火车票,那么程序会一直刷票,并且当存在余票时能立即占用票务资源。

iEVR32J.gif

比较有意思的是,Py12306 还提供了一个可视化网页端,这能让不了解开发的同学直观看到程序的运行结果。

JvUzayJ.png!web

使用指南

首先,你需要将项目克隆到自己的电脑上(需要 Python 3.6):

git clone https://github.com/pjialin/py12306

cd py12306

pip install -r requirements.txt

然后配置程序:

cp env.py.example env.py

配置之后,你需要输入相关信息,如用户名和密码、查询条件等。这时候,你需要打开安装目录里面的 env.py 文件,不论是用 Vim、SubLime 这些纯文本编辑器,还是电脑自带的「记事本」、「文本编辑」,只要能打开纯文本并编辑就 OK 了。

出现在你眼前的文档看上去非常复杂,但每一行代码都有很多中文注释,相信小白也能看懂所有配置选项。首先是参数USER_ACCOUNTS,这里可以将示例改成自己的用户名和密码,如:

UBRnimU.png!web

如果你对心跳查询、免费大码之类的参数不感兴趣,请尽管跳过,这是一个初学者教程。

接下来是查询任务参数QUERY_JOBS,这里可以输入出发和到达的城市。此处只需要修改 left_dates 和 stations 两个参数。注意,如果一行代码前面有井号,表示修改这行文字只是一个注释。

如下图所示,我们只需要修改第一个 left_dates 和第一个 stations 即可。left_dates 可以输入多个,每个都需要按照图中的格式,使用引号括住日期,每个日期用英文逗号隔开。

YB7RFrR.jpg!web

在这里还有一个重要参数:旅客姓名,参数名称为 members。这里注意,如果以前是学生,现在是成人或者是需要购买成人票,写姓名的时候前面需要一个「*」号。

Ir6j2mI.png!web

最后是出发日的时间段和座位类型,这里会按照输入的顺序优先购买有票的:

n2UBbav.jpg!web

当修改完这些信息后,保存并退出编辑界面。

然后你就可以抢票了,只需要运行 main.py 文件即可。

python main.py

准备妥当,好了,是时候抢票了!


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK