# 🚂 py12306 购票助手
分布式,多账号,多任务购票
## Features
- [x] 多日期查询余票
- [x] 自动打码下单
- [x] 用户状态恢复
- [x] 电话语音通知
- [x] 多账号、多任务、多线程支持
- [x] 单个任务多站点查询
- [x] 分布式运行
- [x] Docker 支持
- [x] 动态修改配置文件
- [x] 邮件通知
- [x] Web 管理页面
- [x] 微信消息通知
- [ ] 代理池支持 ([pyproxy-async](https://github.com/pjialin/pyproxy-async))
## 使用
py12306 需要运行在 python 3.6 以上版本(其它版本暂未测试)
**1. 安装依赖**
```bash
git clone https://github.com/pjialin/py12306
pip install -r requirements.txt
```
**2. 配置程序**
```bash
cp env.py.example env.py
```
自动打码
(若快已停止服务,目前只能设置**free**打码模式)
free 已对接到打码共享平台,[https://py12306-helper.pjialin.com](https://py12306-helper.pjialin.com/),欢迎参与分享
语音通知
语音验证码使用的是阿里云 API 市场上的一个服务商,需要到 [https://market.aliyun.com/products/56928004/cmapi026600.html](https://market.aliyun.com/products/56928004/cmapi026600.html) 购买后将 appcode 填写到配置中
**3. 启动前测试**
目前提供了一些简单的测试,包括用户账号检测,乘客信息检测,车站检测等
开始测试 -t
```bash
python main.py -t
```
测试通知消息 (语音, 邮件) -t -n
```bash
# 默认不会进行通知测试,要对通知进行测试需要加上 -n 参数
python main.py -t -n
```
**4. 运行程序**
```bash
python main.py
```
### 参数列表
- -t 测试配置信息
- -t -n 测试配置信息以及通知消息
- -c 指定自定义配置文件位置
### 分布式集群
集群依赖于 redis,目前支持情况
- 单台主节点多个子节点同时运行
- 主节点宕机后自动切换提升子节点为主节点
- 主节点恢复后自动恢复为真实主节点
- 配置通过主节点同步到所有子节点
- 主节点配置修改后无需重启子节点,支持自动更新
- 子节点消息实时同步到主节点
**使用**
将配置文件的中 `CLUSTER_ENABLED` 打开即开启分布式
目前提供了一个单独的子节点配置文件 `env.slave.py.example` 将文件修改为 `env.slave.py`, 通过 `python main.py -c env.slave.py` 即可快速启动
## Docker 使用
**1. 将配置文件下载到本地**
```bash
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. 修改好配置后运行**
```bash
docker run --rm --name py12306 -p 8008:8008 -d -v $(pwd):/config -v py12306:/data pjialin/py12306
```
当前目录会多一个 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 管理页面
目前支持用户和任务以及实时日志查看,更多功能后续会不断加入
**使用**
打开 Web 功能需要将配置中的 `WEB_ENABLE` 打开,启动程序后访问当前主机地址 + 端口号 (默认 8008) 即可,如 http://127.0.0.1:8008
## 更新
- 19-01-10
- 支持分布式集群
- 19-01-11
- 配置文件支持动态修改
- 19-01-12
- 新增免费打码
- 19-01-14
- 新增 Web 页面支持
- 19-01-15
- 新增 钉钉通知
- 新增 Telegram 通知
- 新增 ServerChan 和 PushBear 微信推送
- 19-01-18
- 新增 CDN 查询
## 截图
### Web 管理页面
![Web 管理页面图片](https://github.com/pjialin/py12306/blob/master/data/images/web.png)
### 下单成功
![下单成功图片](https://github.com/pjialin/py12306/blob/master/data/images/order_success.png)
### 关于防封
目前查询和登录操作是分开的,查询是不依赖用户是否登录,放在 A 云 T 云容易被限制 ip,建议在其它网络环境下运行
QQ 交流群 [780289875](https://jq.qq.com/?_wv=1027&k=5PgzDwV),TG 群 [Py12306 交流](https://t.me/joinchat/F3sSegrF3x8KAmsd1mTu7w)
### Online IDE
[![在 Gitpod 中打开](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io#https://github.com/pjialin/py12306)
## Thanks
- 感谢大佬 [testerSunshine](https://github.com/testerSunshine/12306),借鉴了部分实现
- 感谢所有提供 pr 的大佬
- 感谢大佬 [zhaipro](https://github.com/zhaipro/easy12306) 的验证码本地识别模型与算法
## License
[Apache License.](https://github.com/pjialin/py12306/blob/master/LICENSE)
没有合适的资源?快使用搜索试试~ 我知道了~
py12306抢票开源库,假期抢票难,加脚本直接上强度!
共91个文件
py:44个
js:7个
txt:5个
需积分: 1 0 下载量 150 浏览量
2024-04-28
21:41:13
上传
评论
收藏 2.7MB ZIP 举报
温馨提示
随着互联网时代的到来,越来越多的人选择通过网络购买火车票。 然而,面对庞大的用户群体和高并发的购票请求,传统的购票系统可能会遇到一系列的挑战,例如系统崩溃、购票失败等问题。 为了解决这些问题,一款名为py12306的高效分布式多账号、多任务购票系统应运而生。 本文讲讲py12306开源库的特性、使用方法以及其在分布式环境下的运行方式,帮助你更好地理解和应用这一工具。 特性介绍 py12306具有以下特性: 多日期查询余票:能够同时查询多个日期的火车余票信息,提高查询效率。 自动打码下单:支持自动识别验证码并完成购票流程。 用户状态恢复:能够保存用户状态,避免重复登录和重复填写乘客信息。 电话语音通知:支持通过电话语音通知用户购票结果。 多账号、多任务、多线程支持:能够同时运行多个账号、多个购票任务,并支持多线程处理购票请求。 单个任务多站点查询:能够同时查询多个车站的余票信息。 分布式运行:支持分布式集群部署,提高系统的稳定性和扩展性。 Docker支持:提供Docker镜像,方便部署和管理。 动态修改配置文件:支持在运行时动态修改配置信息。 邮件通知:支持
资源推荐
资源详情
资源评论
收起资源包目录
py12306-master.zip (91个子文件)
py12306-master
py12306
__init__.py 0B
exceptions
__init__.py 0B
app.py 6KB
order
order.py 27KB
web
__init__.py 0B
web.py 2KB
handler
__init__.py 0B
app.py 2KB
stat.py 1KB
user.py 2KB
query.py 959B
log.py 2KB
static
js
app.7d7d65cccfbfa339beba.js 26KB
app.96ef02c9e5601eb5ebcb.js 24KB
vendor.532ecf213e49d36e5e9e.js 1.18MB
vendor.aebd1de04bf90e88d9c7.js 828KB
manifest.82f431004cf9bb6ad2cb.js 804B
app.cdb00779aeb087dabd94.js 26KB
app.680b1bbd04444c6d9d3a.js 24KB
img
fa-brands-400.27183da.svg 729KB
avatar_default.svg 11KB
fa-regular-400.1e51c39.svg 137KB
fa-solid-900.a868400.svg 775KB
css
app.35e2fbd94557d71d1e2bfa0d4bb44d13.css 282KB
app.7dba7f569524413218fde54c298188f4.css 282KB
app.dfb5ffed622907edd7c5f81709f2b782.css 282KB
index.html 630B
fonts
fa-regular-400.b4cfd51.woff 18KB
fa-solid-900.3b921c2.eot 204KB
fa-brands-400.87b76b9.woff2 72KB
fa-solid-900.bed3b0a.woff2 77KB
fa-regular-400.732726c.woff2 15KB
fa-solid-900.e0c419c.woff 100KB
fa-brands-400.f902692.eot 131KB
fa-solid-900.d751e66.ttf 204KB
fa-brands-400.f83bc05.ttf 131KB
element-icons.6f0a763.ttf 11KB
fa-regular-400.d1ce381.eot 39KB
fa-regular-400.abde9e5.ttf 39KB
fa-brands-400.292a564.woff 85KB
cluster
__init__.py 0B
redis.py 2KB
cluster.py 10KB
helpers
__init__.py 0B
func.py 5KB
cdn.py 8KB
request.py 3KB
api.py 2KB
station.py 1KB
qrcode.py 3KB
event.py 2KB
type.py 861B
auth_code.py 3KB
notification.py 10KB
OCR.py 2KB
user
__init__.py 0B
job.py 25KB
user.py 3KB
query
__init__.py 0B
job.py 15KB
query.py 8KB
log
__init__.py 0B
common_log.py 7KB
redis_log.py 304B
user_log.py 3KB
query_log.py 8KB
order_log.py 4KB
cluster_log.py 1KB
base.py 3KB
config.py 7KB
vender
ruokuai
main.py 1KB
main.py 1KB
data
images
order_success.png 384KB
web.png 220KB
stations.txt 97KB
cdn.txt 41KB
LICENSE 11KB
说明.txt 100B
env.slave.py.example 401B
docker-compose.yml.example 252B
Dockerfile 332B
runtime
user
.gitignore 14B
.gitignore 26B
query
.gitignore 14B
env.py.example 7KB
requirements.txt 569B
env.docker.py.example 7KB
depdencies.txt 4KB
.gitignore 93B
.gitpod.yml 147B
README.md 5KB
共 91 条
- 1
资源评论
程序员的成长之路
- 粉丝: 1849
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功