15 分钟查一次价3 条命令搭好机票价格监控低价出现时邮件提醒你【免费下载链接】flight-spyLooking for the cheapest flights and dont have enough time to track all the prices?项目地址: https://gitcode.com/gh_mirrors/fl/flight-spy凌晨一点你第三次刷开比价页北京飞东京的往返价从 2180 涨到了 2224。手动刷页这种活儿交给 FlightSpy 就行——这是个开源的机票价格监控系统每 15 分钟自动查一次 Skyscanner 实时价跌破你的预算就发邮件或 Slack 通知。按本文操作3 条命令就能跑起来再花 5 分钟填两个配置文件睡前它就开始替你盯价了。它替你做了三件事FlightSpy 的定位一句话你把航线和预算写进一个 JSON 文件剩下的查价、记账、提醒它全干。定时查价。容器里的 crontab 每 15 分钟调一次查价任务扫 watch.json 里所有航线。这意味着你不用再盯着浏览器夜里出的低价它替你接得住。价格记账。每次查到的价都写进 Elasticsearch按航线归档成时间序列。这意味着跑上两周你就有了一条价格基线能分清真便宜和常态价。越线提醒。最低价跌破你设的 max-price就走邮件或 Slack 推给你。这意味着你只需要在消息弹出来的那一刻做决定买不买两秒钟的事。从零跑起来3 条命令 2 个配置文件拉代码一条命令启动git clone https://gitcode.com/gh_mirrors/fl/flight-spy cd flight-spy docker-compose up -d跑完你会看到三个容器app、elasticsearch、kibana分别跑监控逻辑、存价格、出图表。填 2 个配置文件启动前或启动后改完重启把两个模板文件改名填值cp src/Resources/parameters.yml.dist src/Resources/parameters.yml cp docker/volume/watch.json.dist docker/volume/watch.jsonparameters.yml里填 4 样东西Skyscanner 的免费 API key、Slack 的 webhook 地址、Postmark 的 key 和收信邮箱。Slack 和邮件二选一或都配都行填哪个哪个就生效。watch.json写你盯的航线一条航线一个对象[ { from: PEK-sky, // 出发地城市代码加 -sky to: NRT-sky, // 目的地 search-period-from: 2026-09-01, // 搜索窗口起 search-period-to: 2026-10-31, // 搜索窗口止 search-period-travel-days: 12, // 单程玩几天 max-price: 2500, // 预算线跌破才提醒 currency: CNY, country: CN, locale: zh-CN, adults: 1 } ]建索引、导仪表盘价格得有个家在 Elasticsearch 里建一个flightspy索引字段映射用仓库自带的那个 mappings 文件。然后打开 Kibana默认 5601 端口把索引模式指向flightspy再到对象管理里导入src/Resources/kibana/Dashboard.json。做完这两步图表就有了。参数速查写 watch.json 时对着抄字段填什么from/to机场代码 -sky城市级就用城市名-skydeparture/arrival固定出发、返程日期YYYY-MM-DDsearch-period-from/to不固定日期时给一段搜索窗口search-period-travel-days配合上两项用玩多少天max-price预算上限只在这个数以下才通知adults/children大人、小孩人数打开仪表盘后先盯这三块访问http://localhost:5601导入的仪表盘上有两块图先看它们航空公司价格对比表。各航司当前报价横排摆着最低的那家一眼可见。看到哪家连续几次都垫底订票时直接从这家看起省得再比一轮。每日平均价格曲线。这是你判断现在买还是再等等的依据。曲线往下走且低于前 14 天均值就是出手窗口贴着均值晃就让它继续记着。拿它做个决定假设 9 月 3 日那条线显示均价 23009 月 10 日掉到 2050明显低于前 14 天均值。这时你可以把 max-price 从 2200 再压到 2000等 Slack 弹消息——弹了说明 2000 以下的价真出现了出手不亏不弹说明 2050 已经是近期低点也可以直接买 2050 这档。按你的出行节奏调参数两周内的短途日期基本定了直接用departure/arrival锁死出发和返程搜索窗口开 7 到 14 天max-price 按近期均价往下压 5% 到 10%。窗口短价格波动小盯得越紧越容易抓到回落到均价的时段。半年后的长途日期还浮动用search-period-from/to把窗口拉大到 30 到 60 天配search-period-travel-days写清玩几天。max-price 前两周先放宽松等 Kibana 上有了 10 天以上的均价曲线再按均值往下收紧——有基线了才敢压。旺季抢票黄金周、圣诞这种窗口max-price 别低于历史均价的 95%宁可少省也要保证能买到淡季反过来压到均价的 80%蹲一个真低价。watch.json 是个数组想同时盯 5 条线就放 5 个对象任务会一起跑不用改别的。通知渠道在src/Resources/config/notifiers.xml里声明邮件走 Postmark、Slack 走 webhookkey 都在 parameters.yml 里配。谁该用、怎么用个人旅行者。盯一条常飞的线最该改的只有 max-price 这一个数先用 Kibana 看一周均价把线画在均价和最低价中间提醒来了就有参考系。查航线的代理人或小组。最该改的是 watch.json 的规模——一次塞进十几条热门线每条线的 max-price 按各自的预算写通知邮箱填团队的公共邮箱谁看到的谁报价。留学生家庭。把 search-period-to 拉到整个学年结束通知开邮件而不是 Slack父母和你都能收到价格低谷出现时全家有同一份数据可商量。部署前先看这几个问题Q查询频率 15 分钟能改吗 节奏由docker/volume/crontab里的*/15 * * * *决定改数字就行但先确认 Skyscanner API 账户的调用额度超了会被限流。Q资源占多大能跑在树莓派上吗 大头是 Elasticsearch 5.1.2默认 JVM 堆 1GB加上 Kibana 和 PHP 容器4GB 内存的机器才舒服。端口和镜像都写在docker-compose.yml内存紧张可以先把 Kibana 拆出来单独跑。Q历史价格会一直存吗 会。Elasticsearch 这边默认不做清理保留策略在src/Service/ElasticSearch/下调整。航线盯得久、航线又多建议定期把老数据导出去。Q价格明明跌了通知为什么没响 先查parameters.ymlSlack 的 webhook URL 和 Postmark key 是不是还是模板里的占位值。再确认 max-price 设在了实际价上方低于它才触发。QKibana 5601 端口打不开 看docker-compose.yml里的5601:5601宿主机端口被占了就把左边那个换掉记得同步改你浏览器里访问的地址。现在就可以做的第一步3 条命令把容器跑起来15 分钟后 watch.json 里的航线就有第一条价格记录。每多跑一晚均价基线多攒一晚判断真便宜的依据越来越硬。价格跌破 max-price 的那一刻邮件或 Slack 自己弹到你脸上你只需要决定买不买。先拿你最常飞的那条线配上跑一整晚第二天早上打开 Kibana 看那条均价曲线再回来定 max-price。【免费下载链接】flight-spyLooking for the cheapest flights and dont have enough time to track all the prices?项目地址: https://gitcode.com/gh_mirrors/fl/flight-spy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考