用途:根据出发站与返程站(返程可省略)生成 12306 节假日抢票日历,帮助确定各法定节假日去程与返程的抢票日期。
主要能力:从 12306 官方接口获取全国车站代码并模糊匹配站名(支持常见错字);分别查询出发站、返程站起售时间;用 chinesecalendar 识别指定年份各法定节假日放假区间;生成自包含单文件 HTML 抢票日历页,内嵌 ICS/CSV 生成逻辑,在浏览器中可切换出发/返程、忽略不出行的节日、设置提醒方式(当天或提前 1/2/3 天,起售前分钟数默认 15),并下载 ICS 或 CSV。去程按假期首日乘车、抢票日为假期首日减 15 天;返程按假期末日乘车、抢票日为末日减 15 天,预售期以 12306 官方为准。
使用方式:依赖 Python 包,安装命令为 pip install esflow requests chinesecalendar。运行示例:python3 scripts/run.py 北京南 天津西 2026(去程+返程);python3 scripts/run.py 北京南 2026(仅去程);python3 scripts/run.py --update(仅同步节假日库并自检)。默认写入 ~/Downloads/ticket-calendar/ticket-calendar-{出发站}-{返程站}-{年}.html 并自动打开浏览器。服务器/容器/headless 环境请加 --out <dir> 与 --no-open。其他参数包括 --skip-update、--job-dir、--schema。退出码 0 ok / 1 runtime / 3 validation。成功时 stdout 输出一行 JSON envelope,含 html_path、departure、return、year、festivals 等字段;失败时 ok=false,error 含 code、message、retryable。
适用场景:用户提及「节假日购票」「12306 起售时间」「抢票日历」时使用,用于规划节假日火车票抢票时间。
限制:ICS/CSV 无独立文件产物,需在浏览器打开 HTML 后点击按钮生成,headless 环境无法获取;车站匹配失败抛 station_error 并列出候选;起售时间查询失败回落 14:00 并标注;节假日数据缺失或年份超库支持范围抛 holiday_error;无返程站时不生成返程条目。其余细节暂未提供。