Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
py12306
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
python
py12306
Commits
f93fdcfd
Commit
f93fdcfd
authored
Jan 10, 2019
by
Jalin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加 docker 支持
parent
b323e3d9
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
147 additions
and
2 deletions
+147
-2
.gitignore
.gitignore
+2
-1
Dockerfile
Dockerfile
+19
-0
env.docker.py.example
env.docker.py.example
+118
-0
app.py
py12306/app.py
+8
-1
No files found.
.gitignore
View file @
f93fdcfd
...
@@ -3,4 +3,5 @@
...
@@ -3,4 +3,5 @@
venv
venv
__pycache__
__pycache__
env.py
env.py
env.slave.py
env.slave.py
\ No newline at end of file
env.docker.py
\ No newline at end of file
Dockerfile
0 → 100644
View file @
f93fdcfd
FROM
python:3.6.6-slim
MAINTAINER
<pjialin admin@pjialin.com>
WORKDIR
/code
COPY
requirements.txt .
RUN
pip
install
--no-cache-dir
-r
requirements.txt
RUN
mkdir
/data
RUN
mkdir
-p
/data/query /data/user
VOLUME
/data
COPY
. .
COPY
env.docker.py.example /config/env.py
CMD
[ "python", "main.py" , "-c", "/config/env.py"]
env.docker.py.example
0 → 100644
View file @
f93fdcfd
# encoding=utf8
# 12306 账号
USER_ACCOUNTS = [
# 目前已支持仅查询,不下单,屏蔽掉下面的账号即可
{
'key': 0, # 如使用多个账号 key 不能重复
'user_name': 'your user name',
'password': 'your password'
},
# {
# 'key': 'wangwu',
# 'user_name': 'wangwu@qq.com',
# 'password': 'wangwu'
# }
]
# 查询间隔(指每一个任务中每一个日期的间隔 / 单位秒)
# 默认取间隔/2 到 间隔之间的随机数 如设置为 1 间隔则为 0.5 ~ 1 之间的随机数
# 接受字典形式 格式: {'min': 0.5, 'max': 1}
QUERY_INTERVAL = 1
# 用户心跳检测间隔 格式同上
USER_HEARTBEAT_INTERVAL = 120
# 多线程查询
QUERY_JOB_THREAD_ENABLED = 0 # 是否开启多线程查询,开启后第个任务会单独分配线程处理
# 打码平台账号
# 目前只支持若快打码,注册地址:http://www.ruokuai.com/login
AUTO_CODE_ACCOUNT = {
'user': 'your user name',
'pwd': 'your password'
}
# 语音验证码
# 没找到比较好用的,现在用的这个是阿里云 API 市场上的,基本满足要求,价格也便宜
# 购买成功后到控制台找到 APPCODE 放在下面就可以了
# 地址:https://market.aliyun.com/products/57126001/cmapi019902.html
NOTIFICATION_BY_VOICE_CODE = 1 # 开启语音验证码
NOTIFICATION_API_APP_CODE = 'your app code'
NOTIFICATION_VOICE_CODE_PHONE = 'your phone' # 接受通知的手机号
# 输出日志到文件 (Docker 中不建议修改此组配置项)
OUT_PUT_LOG_TO_FILE_ENABLED = 1
OUT_PUT_LOG_TO_FILE_PATH = '/config/12306.log' # 日志目录
RUNTIME_DIR = '/data/'
QUERY_DATA_DIR = '/data/query/'
USER_DATA_DIR = '/data/user/'
# 分布式集群配置
CLUSTER_ENABLED = 0 # 集群状态
NODE_IS_MASTER = 1 # 是否是主节点 同时只能启用 1 个主节点
NODE_SLAVE_CAN_BE_MASTER = 1 # 主节点宕机后,子节点是否可以自动提升为主节点(建议打开)
NODE_NAME = 'master' # 节点名称,不能重复
REDIS_HOST = 'localhost' # Redis host
REDIS_PORT = '6379' # Redis post
REDIS_PASSWORD = '' # # Redis 密码 没有可以留空
# 查询任务
QUERY_JOBS = [
{
# 'job_name': 'bj -> sz', # 任务名称,不填默认会以车站名命名,不可重复
'account_key': 0, # 将会使用指定账号下单
'left_dates': [ # 出发日期 :Array
"2019-01-25",
"2019-01-26",
],
'stations': { # 车站 支持多个车站同时查询 :Dict or :List
'left': '北京',
'arrive': '深圳',
},
# # 多个车站示例 (建议添加多个,有时多买几站成功率会高一点)
# 'stations': [{
# 'left': '北京',
# 'arrive': '深圳',
# },{ # 多个车站示例
# 'left': '北京',
# 'arrive': '广州',
# }],
'members': [ # 乘客姓名,会根据当前账号自动识别乘客类型 购买儿童票 设置两个相同的姓名即可,程序会自动识别 如 ['张三', '张三']
"张三",
"王五",
],
'allow_less_member': 0, # 是否允许余票不足时提交部分乘客
'seats': [ # 筛选座位 有先后顺序 :Array
# 可用值: 特等座, 商务座, 一等座, 二等座, 软卧, 硬卧, 动卧, 硬座, 无座
'硬卧',
'硬座'
],
'train_numbers': [ # 筛选车次 可以为空,为空则所有车次都可以提交
"K356",
"K1172",
"K4184"
]
},
# {
# 'job_name': 'cd -> gz', # 任务名称,不填默认会以车站名命名,不可重复
# 'account_key': 0, # 将会使用指定账号下单
# 'left_dates': [
# "2019-01-27",
# "2019-01-28"
# ],
# 'stations': {
# 'left': '成都',
# 'arrive': '广州',
# },
# 'members': [
# "小王",
# ],
# 'allow_less_member': 0,
# 'seats': [
# '硬卧',
# ],
# 'train_numbers': []
# }
]
py12306/app.py
View file @
f93fdcfd
import
os
import
signal
import
signal
import
sys
import
sys
...
@@ -41,7 +42,7 @@ class App:
...
@@ -41,7 +42,7 @@ class App:
def
did_start
(
cls
):
def
did_start
(
cls
):
self
=
cls
()
self
=
cls
()
from
py12306.helpers.station
import
Station
from
py12306.helpers.station
import
Station
Station
()
# 防止多线程时初始化出现问题
Station
()
# 防止多线程时初始化出现问题
# if Config.is_cluster_enabled():
# if Config.is_cluster_enabled():
# from py12306.cluster.cluster import Cluster
# from py12306.cluster.cluster import Cluster
# Cluster().run()
# Cluster().run()
...
@@ -78,6 +79,11 @@ class App:
...
@@ -78,6 +79,11 @@ class App:
return
False
return
False
return
True
return
True
@
staticmethod
def
check_data_dir_exists
():
os
.
makedirs
(
Config
()
.
QUERY_DATA_DIR
,
exist_ok
=
True
)
os
.
makedirs
(
Config
()
.
USER_DATA_DIR
,
exist_ok
=
True
)
@
classmethod
@
classmethod
def
test_send_notifications
(
cls
):
def
test_send_notifications
(
cls
):
if
Config
()
.
NOTIFICATION_BY_VOICE_CODE
:
# 语音通知
if
Config
()
.
NOTIFICATION_BY_VOICE_CODE
:
# 语音通知
...
@@ -92,6 +98,7 @@ class App:
...
@@ -92,6 +98,7 @@ class App:
待优化
待优化
:return:
:return:
"""
"""
cls
.
check_data_dir_exists
()
if
not
cls
.
check_user_account_is_empty
():
if
not
cls
.
check_user_account_is_empty
():
# CommonLog.add_quick_log(CommonLog.MESSAGE_CHECK_EMPTY_USER_ACCOUNT).flush(exit=True, publish=False) # 不填写用户则不自动下单
# CommonLog.add_quick_log(CommonLog.MESSAGE_CHECK_EMPTY_USER_ACCOUNT).flush(exit=True, publish=False) # 不填写用户则不自动下单
if
not
cls
.
check_auto_code
():
if
not
cls
.
check_auto_code
():
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment