春运买不到票.码农喊你来Git 看牛哄哄的抢票神器

春运买不到票.码农喊你来Git

春运买不到票?程⭐序员喊你来GitHub看牛哄:satisfied:哄的抢票神器

来自:🐖量子位

前言

想要春⭐节回家的小伙伴们,💙想必前几天刚经历⭐了一波抢票大战。顺:satisfied:便把一个 Python 抢票工具,⭐送到了 GitHub 趋势榜第一。

💙春运买不到票?程序🐖员喊你来GitHub看牛哄哄🐒的抢票神器

这个项💙目名很干脆,就是“12306”,目🐂前标星超过 2.2W+。项目发🔥起者是一名叫文贤⭐平的程序员。

春运买:satisfied:不到票?程序员喊你⭐来GitHub看牛哄哄的抢票🐂神器

这很可能是全 GitHub 🐂最德高望重的购票🐂小助手了,现在功能👅一直在更新,且已支:satisfied:持 Python 3.6 以上版本。

一些后🎲起之秀也是在它的🐻基础上开发出来,然🔥后广受欢迎:

春运买🐕不到票?程序员喊你:satisfied:来GitHub看牛哄哄的抢票🐖神器

标星超 8K 的“py12306”便是🐻其中之一,它支持分🐖布式抢票。春运后面,🐖如果需要抢票,可以🐒试一下这些 Python 工具。已⭐经有许多人亲测成:satisfied:功抢到票了。

两个 GitHub 上🔥高星抢票项目

12306 购票🎲小助手

文贤平/文先:satisfied:森 (testerSunshine) 的抢票小助手“12306”,虽🔥然诞生在 2018 年初,但最🐖近一次提交代码,是🐒在今年 12 月 21
日,现在还🐂十分新鲜。

这只得力⭐的小助手,思路清晰🐂又紧凑:

春运买不到🐻票?程序员喊你来GitHub看🐒牛哄哄的抢票神器

💙从查询余票开始,到👅付款完成,最后获取🐖订单号。一气呵成,不💙怕人类手速太慢。

有🐖了它,文先森去年就👅丝滑地抢到了回家🐒的票。而后,便努力帮💙助抢票助手继续进🐂化。

到目前为止,文先:satisfied:森与一众贡献者,已👅经在项目里提交了 361 🎲次代码,实现的功能💙有这些:

春运买不到🐖票?程序员喊你来GitHub看🐕牛哄哄的抢票神器

⭐从更新日志看来,最👅近加入的重要功能👅是候补订单。所谓候🔥补,就是在票卖完的🐻情况下预先付款,等🐖其他人退票之后自💙动补上,是我国 2019 年春🐻运才出现的新机制。

🐖但文先森也还不清🐂楚,这项功能在抢票🐒助手里的需求是怎:satisfied:样的,所以正在密集💙地尝试和调整:

春运🔥买不到票?程序员喊🐻你来GitHub看牛哄哄的抢🐕票神器

在实现新功🐂能的同时,已有的功:satisfied:能也在不断优化。这⭐个抢票工具越来越🐖强大,已具备自动打💙码、自动登陆、准点预🐕售和捡漏、智能候补、🐂邮件通知、 pushbear
通知等功🎲能。GitHub 标星数量比起年🎲初的 4K,也已经翻了两🔥番。

随着项目的成长,:satisfied:文先森在 8 月 31 日宣布🐒了一件重要的事:放🐻弃支持 Python 2.7,只支持 3.6 以上:satisfied:版本。

下面让我们具🐕体看看这个项目:

(1)依👅赖库

####

git仓库下载:https://github.com/testerSunshine/12306model.git

项目🐖依赖包查看 requirements.txt:

https://github.com/testerSunshine/12306/blob/master/requirements.txt

安装方🐕法 x:

  • root 用户(避免多 Python 环境🐂产生问题): pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
  • 非 root 用户(避🎲免安装和运行时使🔥用了不同环境): pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

(2)项目:satisfied:使用说明

服务器启:satisfied:动:

  • 修改配置文件, 可:satisfied:以配置邮箱,配置邮💙箱的格式在配置里🐒面可以看到 ex,可以配⭐置 Server 酱提醒(推荐)配置🐻教程,配置配置文件🐂的时候,需注意空格👅和遵循 Python 语法格式。
  • 运🐻行根目录 sudo python run.py,即可开始。

🐖如果你的服务器安🔥装了 Docker 与 Docker-Compose, 那么就可以🐻通过 Docker-Compose 进行启动。

docker.sh 脚本👅对此进行了封装,可🐖以通过如下命令进⭐行启动:

  • sudo ./docker.sh run #创建一个镜💙像并启动容器,如果💙镜像已经创建过了💙会直接启动容器。
  • sudo ./docker.sh restart #修⭐改配置文件后,通过👅此名命令可重新加👅载容器运行。
  • sudo ./docker.sh rm #删除容🐒器。
  • sudo ./docker.sh drun #后台运行容器。
  • sudo ./docker.sh logs #在🐻后台运行时,通过此🐖命令查看运行的内:satisfied:容。
  • 注:针对没有 Docker 环境:satisfied:的同学提供了 Docker 安装🎲脚本(Centos7)- sudo ./docker_install_centos.sh。

(3)目录对应说明

💙目录对应说明如下:

  • agency-cdn 🐖代理
  • config-项目配置
  • verify-自动🐕打码
  • init-项目主运行目:satisfied:录
  • inter-接口
  • myException-异常
  • myUrllib request 网络请🐕求库

(4)日志例子

成功 log,🐒如果是购票失败的,🐒请带上失败的 log 给我,:satisfied:我尽力帮你调,也可🐻加群一起交流,程序⭐只是加速买票的过🐂程,并不一定能买到⭐票:

车次: G4741 始发车站: 上🐻海 终点站: 邵阳 二等:satisfied:座:有
正在尝试提交:satisfied:订票...
尝试提交订单...
:satisfied:出票成功
排队成功, 🐂当前余票还剩余: 359 张
⭐正在使用自动识别🐻验证码功能
验证码🎲通过,正在提交订单
:satisfied:提交订单成功!
排队🐒等待时间预计还剩 -12 ms
🎲排队等待时间预计🔥还剩 -6 ms
排队等待时间🐖预计还剩 -7 ms
排队等待🔥时间预计还剩 -4 ms
排队🐂等待时间预计还剩 -4 ms
🐒恭喜您订票成功,订🐂单号为:EB52743573, 请立即打开⭐浏览器登录12306,访问‘未🐖完成订单’,在30分钟内🐒完成支付!

推荐有动🎲手能力的朋友使用,🎲抢票事半功倍。所以,🎲多试几种工具也是⭐好的,尤其是可以同🐻时进行多个任务的🐖那种。

py12306 购票助手

一位🐻名叫 pjialin 的程序员,借鉴🐖了文先森的部分代⭐码实现,开发了一个🔥分布式工具,名叫 py12306 购:satisfied:票助手。

就是说,一台🐂机器抢不到,可以让🐒许多硬件一起跑。它🐻还支持多任务 (多班🐖列车) 、多日期、多账号🐻一起查。另一个机智🎲的功能是,同时观察🐻多个始发站和到达🔥站的组合。

比如,北京💙出发的票没有了,就⭐跑去下一站上车;或🔥者家门口买不到,就💙直接买到终点:愿意:satisfied:妥协但限于手速的👅小伙伴,也能交给工🐂具自动查看了。

用上⭐这个新工具,他一下🐂子抢到了好几张票:

:satisfied:春运买不到票?程序🐂员喊你来GitHub看牛哄哄🔥的抢票神器

同样是💙支持 Python 3.6 以上版本,这个🐂项目现在也有 8K 标星🔥了。

春运买不到票?程🐻序员喊你来GitHub看牛哄🐕哄的抢票神器

下面🔥我们来看看使用方💙法:PS:py12306 需要运行在 python 3.6 以上🐂版本(其他版本暂未🐒测试)。

(1)安装依赖

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

pip install -r requirements.txt

(2)配置⭐程序

cp env.py.example env.py

自动打码: 验证🐕码可以本地识别,所🐕用的模型和算法均🐻来自:

https://github.com/zhaipro/easy12306

语音通知: 语音🐻验证码使用的是阿🐂里云 API 市场上的一个:satisfied:服务商,需要购买后:satisfied:将 appcode 填写到配置中:

https://market.aliyun.com/products/56928004/cmapi026600.html 

(3)启🐒动前测试

目前提供🔥了一些简单的测试,🐻包括用户账号检测,:satisfied:乘客信息检测,车站🐂检测等。

开始测试 -t:

python main.py -t

测🐒试通知消息 (语音,邮🐖件) -t -n:

# 默认不会进行通⭐知测试,要对通知进⭐行测试需要加上 -n 参👅数 
python main.py -t -n

(4)运行程序

python main.py

参数列💙表如下:

  • -t: 测试配置信🐂息
  • -t -n: 测试配置信息以🐒及通知消息
  • -c: 指定自🎲定义配置文件位置

    :satisfied:分布式集群依赖于 Redis,🐂目前支持情况:

  • 单台🐒主节点多个子节点🐻同时运行。

  • 主节点宕🐖机后自动切换提升💙子节点为主节点。
  • 主🐻节点恢复后自动恢🐻复为真实主节点。
  • 配🔥置通过主节点同步:satisfied:到所有子节点。
  • 主节👅点配置修改后无需🐖重启子节点,支持自🔥动更新。
  • 子节点消息🐂实时同步到主节点。

    👅使用: 将配置文件的🔥中 CLUSTER_ENABLED 打开即开启分布🐖式。

目前提供了一个🐂单独的子节点配置:satisfied:文件 env.slave.py.example 将文件修改为 env.slave.py,:satisfied:通过 python main.py
-c env.slave.py 即可快速启动。

**
Docker 🐒使用**

(1)将配置文件下💙载到本地

docker run --rm pjialin/py12306 cat /config/env.py > env.py
# 或
curl https://raw.githubusercontent.com/pjialin/py12306/master/env.docker.py.example -o env.py

(2)修改好🐂配置后运行

docker run --rm --name py12306 -p 8008:8008 -d -v $(pwd):/config -v py12306:/data pjialin/py12306

当前目:satisfied:录会多一个 12306.log 的日志💙文件,tail -f 12306.log。

Docker-Compose 中使用如下:

(1)复🐕制配置文件

cp docker-compose.yml.example docker-compose.yml

(2)从 Docker-Compose 运行

💙在 docker-compose.yml 所在的目录使用🐻命令:

docker-compose up -d

Web 管理页面

目前🔥支持用户和任务以🐂及实时日志查看,更🐻多功能后续会不断:satisfied:加入。

春运买不到票?💙程序员喊你来GitHub看牛🎲哄哄的抢票神器

打🎲开 Web 功能需要将配置🐖中的 WEB_ENABLE 打开,启动程序🐒后访问当前主机地🐒址 + 端口号 (默认 8008) 即可,🐖如
http://127.0.0.1:8008。

春运买不到票?程🎲序员喊你来GitHub看牛哄🐻哄的抢票神器

关于🔥防封:目前查询和登💙录操作是分开的,查👅询是不依赖用户是:satisfied:否登录,放在 A 云 T 云容🐒易被限制 IP,建议在其:satisfied:他网络环境下运行。

⭐春运买不到票?程序:satisfied:员喊你来GitHub看牛哄哄⭐的抢票神器

最后,祝🐒小伙伴们春节都能🐒顺利回家!

春运买不🐖到票?程序员喊你来GitHub🎲看牛哄哄的抢票神👅器

9808e7dd7?from=pc)

未经允许不得转载:来笔趣阁 » 春运买不到票.码农喊你来Git 看牛哄哄的抢票神器