1- # 飞票监控
1+ # 票价哨兵
22
3- 飞票监控是一个本地运行的机票监控工作台 。它可以搜索携程国内单程机票,保存目标价监控任务,并在价格达到目标时通过本机提醒、页面高亮和声音提示把你叫回来。
3+ 票价哨兵是一个本地运行的机票监控工作台 。它可以搜索携程国内单程机票,保存目标价监控任务,并在价格达到目标时通过本机提醒、页面高亮和声音提示把你叫回来。
44
55它适合这些场景:
66
1111
1212## 普通用户路径
1313
14- 从 GitHub Release 下载:
14+ 你可以直接从 GitHub 项目页下载源码:
15+
16+ 1 . 点击 ` Code → Download ZIP ` 。
17+ 2 . 解压下载到的 zip。
18+ 3 . 双击根目录里的 ` start_fly_ticket.bat ` 。
19+
20+ 首次运行会联网下载内置 Python、安装运行依赖和 Playwright Chromium,不需要提前安装 Python。之后再次双击会复用本地 ` runtime/ ` 和 ` .env ` ,启动会更快。
21+
22+ 也可以从 GitHub Release 下载已经打包好的便携版:
1523
1624` FlyTicket-Windows-<version>.zip `
1725
1826解压后双击:
1927
2028` 启动机票监控.bat `
2129
22- 发布包自带 Python 运行环境、依赖和 Playwright Chromium。普通用户不需要手动安装 Python、pip 依赖或浏览器组件。
30+ Release 发布包自带 Python 运行环境、依赖和 Playwright Chromium。普通用户不需要手动安装 Python、pip 依赖或浏览器组件。压缩包体积较大是因为内置了这些运行环境 。
2331
2432启动后按这个顺序使用:
2533
8088- 如果价格继续下降,会再次提醒
8189- 如果价格一直命中但没有更低,会在冷却时间后再次提醒
8290
83- 默认冷却时间是 6 小时,可通过 ` .env ` 调整:
91+ 默认开启重复提醒冷却,冷却时间是 6 小时,可通过 ` .env ` 调整:
8492
8593``` env
94+ MONITOR_REALERT_COOLDOWN_ENABLED=1
8695MONITOR_REALERT_COOLDOWN_HOURS=6
8796```
8897
89- 即使桌面通知没有弹出,命中记录仍会写入本地数据库,你可以在网页里查看。
98+ 如果希望每次检查到目标价都提醒,把冷却开关关掉:
99+
100+ ``` env
101+ MONITOR_REALERT_COOLDOWN_ENABLED=0
102+ ```
103+
104+ 关闭后,重复提醒频率会跟监控任务的检查间隔一致。例如任务每 30 分钟检查一次,只要每次检查仍命中目标价,就会约每 30 分钟提醒一次。
105+
106+ 即使桌面通知没有弹出,命中记录仍会写入本地数据库,你可以在网页里查看。任务栏提醒依赖系统通知能力,当前以页面高亮、桌面通知和声音提示为主。
90107
91108## 开发者路径
92109
@@ -96,19 +113,28 @@ MONITOR_REALERT_COOLDOWN_HOURS=6
96113
97114它会自动尝试:
98115
99- 1 . 检查 Python
100- 2 . 创建 ` .venv `
101- 3 . 安装依赖
102- 4 . 安装 Playwright Chromium
103- 5 . 从 ` .env.example ` 生成 ` .env `
104- 6 . 启动本地网页服务
105- 7 . 自动打开浏览器
116+ 1 . 使用已有 Python 3.10+ 创建 ` .venv ` ,或在没有 Python 时下载内置 Python
117+ 2 . 安装运行依赖
118+ 3 . 安装 Playwright Chromium
119+ 4 . 从 ` .env.example ` 生成 ` .env `
120+ 5 . 启动本地网页服务
121+ 6 . 自动打开浏览器
106122
107- 手动运行方式:
123+ 手动运行方式(Windows PowerShell):
124+
125+ ``` powershell
126+ py -3 -m venv .venv
127+ .\.venv\Scripts\python.exe -m pip install -r requirements-dev.txt
128+ .\.venv\Scripts\python.exe -m playwright install chromium
129+ Copy-Item .env.example .env
130+ .\.venv\Scripts\python.exe -m uvicorn app.main:app --host 127.0.0.1 --port 8000
131+ ```
132+
133+ 手动运行方式(macOS / Linux):
108134
109135``` bash
110136python -m venv .venv
111- .venv/bin/pip install -r requirements.txt -r requirements-dev.txt
137+ .venv/bin/python -m pip install -r requirements-dev.txt
112138.venv/bin/python -m playwright install chromium
113139cp .env.example .env
114140.venv/bin/python -m uvicorn app.main:app --host 127.0.0.1 --port 8000
@@ -133,6 +159,8 @@ powershell -ExecutionPolicy Bypass -File scripts/build_windows_portable.ps1 -Ver
133159- ` dist/FlyTicket-Windows/ `
134160- ` dist/FlyTicket-Windows-dev.zip `
135161
162+ 发布 GitHub Release 时,建议同时在 Release 说明里提供压缩包 SHA256,方便用户确认文件没有损坏或被替换。
163+
136164## 配置说明
137165
138166项目读取根目录下的 ` .env ` 。
@@ -143,10 +171,13 @@ powershell -ExecutionPolicy Bypass -File scripts/build_windows_portable.ps1 -Ver
143171APP_DB_PATH=data/app.db
144172PLAYWRIGHT_PROFILE_DIR=data/playwright-profile
145173PLAYWRIGHT_BROWSERS_PATH=runtime/ms-playwright
146- CTRIP_SNAPSHOT_DIR=tests/fixtures
174+ CTRIP_SNAPSHOT_DIR=data/debug
175+ CTRIP_SAVE_DEBUG_SNAPSHOT=0
176+ CTRIP_DEBUG_SNAPSHOT_DIR=data/debug
147177CTRIP_SEARCH_URL_TEMPLATE=
148178CTRIP_SESSION_URL=
149179APP_BASE_URL=http://127.0.0.1:8000
180+ MONITOR_REALERT_COOLDOWN_ENABLED=1
150181MONITOR_REALERT_COOLDOWN_HOURS=6
151182```
152183
@@ -167,6 +198,45 @@ CTRIP_SESSION_URL=https://flights.ctrip.com/online/channel/domestic
167198
168199升级新版本时,保留 ` data/ ` 和 ` .env ` 即可继续使用原来的数据。
169200
201+ ## 隐私和本地数据
202+
203+ 本项目默认只在本机保存数据,不会把你的搜索历史、监控任务或携程登录状态上传到项目作者的服务器。
204+
205+ 但是请注意:
206+
207+ - ` data/playwright-profile/ ` 可能包含携程登录态、Cookie、浏览历史、Local Storage 等敏感信息。
208+ - ` data/app.db ` 可能包含你的搜索历史、监控任务、目标价和命中记录。
209+ - ` .env ` 可能包含你的本地配置。
210+ - 如果开启 ` CTRIP_SAVE_DEBUG_SNAPSHOT=1 ` ,` data/debug/ ` 里可能保存携程页面 HTML,里面可能包含个人化内容。
211+
212+ 不要把这些文件上传到 GitHub、网盘、论坛、Issue 或发给别人:
213+
214+ ``` text
215+ .env
216+ data/
217+ runtime/
218+ dist/
219+ .venv/
220+ *.log
221+ *.err.log
222+ ```
223+
224+ ## 安全边界
225+
226+ 票价哨兵是本地工具,默认只监听 ` 127.0.0.1 ` 。
227+
228+ 请不要把服务改成 ` 0.0.0.0 ` 后暴露到公网或局域网。如果你确实需要远程访问,请自行增加登录认证、防火墙和网络安全措施。
229+
230+ ## 免责声明
231+
232+ 本项目仅供个人本地学习和自用。
233+
234+ - 不提供自动购票、抢票、下单功能。
235+ - 不提供绕过验证码、绕过风控或批量抓取能力。
236+ - 用户应自行遵守相关网站的服务条款以及所在地法律法规。
237+ - 携程页面结构、登录策略或风控策略变化时,本工具可能无法正常搜索。
238+ - 使用本项目产生的账号、网络、数据或法律风险由使用者自行承担。
239+
170240## 问题排查
171241
172242### 双击后页面没打开
@@ -194,11 +264,15 @@ CTRIP_SESSION_URL=https://flights.ctrip.com/online/channel/domestic
194264
195265不同系统环境的桌面通知后端表现不完全一致。即使通知没弹出,命中记录仍会保存,页面里也会显示最近命中。
196266
267+ ### Windows 或杀毒软件提示风险
268+
269+ 请确认压缩包来自你信任的 GitHub Release,并优先核对 Release 页面提供的 SHA256。便携版内置 Python 和浏览器运行环境,部分安全软件可能对未知压缩包或脚本启动器给出提示。
270+
197271## 目录说明
198272
199273- ` app/ ` :后端代码、模板、静态资源
200274- ` tests/ ` :自动化测试
201- - ` data/ ` :本地数据库和浏览器登录状态
275+ - ` data/ ` :本地数据库和浏览器登录状态,默认不应提交
202276- ` scripts/ ` :启动和构建脚本
203277- ` docs/superpowers/ ` :设计和实现计划文档
204278
@@ -209,3 +283,7 @@ CTRIP_SESSION_URL=https://flights.ctrip.com/online/channel/domestic
209283- 不做自动购票或自动下单
210284- 不接入邮件、微信、Telegram 等外部通知
211285- 不做云端长期运行;程序关闭后不会继续监控
286+
287+ ## 许可证
288+
289+ 本项目使用 MIT License,详见 ` LICENSE ` 。
0 commit comments