12306 Train Query
Query train schedules and remaining tickets from China Railway 12306. Output is an HTML file.
Query Tickets
node {baseDir}/scripts/query.mjs <from> <to> [options]
The command prints the output file path to stdout and query info to stderr.
Examples
# All trains from Beijing to Shanghai (defaults to today)
node {baseDir}/scripts/query.mjs 北京 上海
# Specify a date
node {baseDir}/scripts/query.mjs 北京 上海 -d 2026-03-01
# Only high-speed trains (G)
node {baseDir}/scripts/query.mjs 北京 上海 -t G
# Morning departures, 2h max, with second class available
node {baseDir}/scripts/query.mjs 上海 杭州 -t G --depart 06:00-12:00 --max-duration 1h --seat ze
# Only bookable trains arriving before 6pm
node {baseDir}/scripts/query.mjs 深圳 长沙 --available --arrive -18:00
# Custom output path
node {baseDir}/scripts/query.mjs 广州 武汉 -o /tmp/tickets.html
# JSON output (to stdout)
node {baseDir}/scripts/query.mjs 广州 武汉 --json
Options
-d, --date <YYYY-MM-DD>: Travel date (default: today)
-t, --type <G|D|Z|T|K>: Filter train types (combinable, e.g. GD)
--depart <HH:MM-HH:MM>: Depart time range (e.g. 08:00-12:00, 18:00-)
--arrive <HH:MM-HH:MM>: Arrive time range (e.g. -18:00, 14:00-20:00)
--max-duration <duration>: Max travel time (e.g. 2h, 90m, 1h30m)
--available: Only show bookable trains
--seat <types>: Only show trains with tickets for given seat types (comma-separated: swz,zy,ze,rw,dw,yw,yz,wz)
-o, --output <path>: Output HTML file path (default: {baseDir}/data/<from>-<to>-<date>.html)
--json: Output raw JSON to stdout
Output Columns
| Column |
Meaning |
| 商务/特等 |
Business class / Premium (swz) |
| 一等座 |
First class (zy) |
| 二等座 |
Second class (ze) |
| 软卧/动卧 |
Soft sleeper / Bullet sleeper (rw/dw) |
| 硬卧 |
Hard sleeper (yw) |
| 硬座 |
Hard seat (yz) |
| 无座 |
Standing (wz) |
Values: number = remaining seats, 有 = available (qty unknown), — = not applicable
Station Lookup
node {baseDir}/scripts/stations.mjs 杭州
node {baseDir}/scripts/stations.mjs 香港西九龙
Notes
- Data comes directly from 12306 official API (no key needed)
- Station data is cached for 7 days in
{baseDir}/data/stations.json
- Supports city names (resolves to main station) or exact station names
- Works for all train types: G (高铁), D (动车), Z (直达), T (特快), K (快速)
1---2name: 123063description: Query China Railway 12306 for train schedules, remaining tickets, and station info. Use when user asks about train/高铁/火车 tickets, schedules, or availability within China.4---5
6
7# 12306 Train Query
8
9Query train schedules and remaining tickets from China Railway 12306. Output is an HTML file.
10
11## Query Tickets
12
13```bash
14node {baseDir}/scripts/query.mjs <from> <to> [options]
15```
16
17The command prints the output file path to stdout and query info to stderr.
18
19### Examples
20
21```bash
22# All trains from Beijing to Shanghai (defaults to today)
23node {baseDir}/scripts/query.mjs 北京 上海
24
25# Specify a date
26node {baseDir}/scripts/query.mjs 北京 上海 -d 2026-03-01
27
28# Only high-speed trains (G)
29node {baseDir}/scripts/query.mjs 北京 上海 -t G
30
31# Morning departures, 2h max, with second class available
32node {baseDir}/scripts/query.mjs 上海 杭州 -t G --depart 06:00-12:00 --max-duration 1h --seat ze
33
34# Only bookable trains arriving before 6pm
35node {baseDir}/scripts/query.mjs 深圳 长沙 --available --arrive -18:00
36
37# Custom output path
38node {baseDir}/scripts/query.mjs 广州 武汉 -o /tmp/tickets.html
39
40# JSON output (to stdout)
41node {baseDir}/scripts/query.mjs 广州 武汉 --json
42```
43
44### Options
45
46- `-d, --date <YYYY-MM-DD>`: Travel date (default: today)
47- `-t, --type <G|D|Z|T|K>`: Filter train types (combinable, e.g. `GD`)
48- `--depart <HH:MM-HH:MM>`: Depart time range (e.g. `08:00-12:00`, `18:00-`)
49- `--arrive <HH:MM-HH:MM>`: Arrive time range (e.g. `-18:00`, `14:00-20:00`)
50- `--max-duration <duration>`: Max travel time (e.g. `2h`, `90m`, `1h30m`)
51- `--available`: Only show bookable trains
52- `--seat <types>`: Only show trains with tickets for given seat types (comma-separated: `swz,zy,ze,rw,dw,yw,yz,wz`)
53- `-o, --output <path>`: Output HTML file path (default: `{baseDir}/data/<from>-<to>-<date>.html`)
54- `--json`: Output raw JSON to stdout
55
56### Output Columns
57
58| Column | Meaning |
59|--------|---------|
60| 商务/特等 | Business class / Premium (swz) |
61| 一等座 | First class (zy) |
62| 二等座 | Second class (ze) |
63| 软卧/动卧 | Soft sleeper / Bullet sleeper (rw/dw) |
64| 硬卧 | Hard sleeper (yw) |
65| 硬座 | Hard seat (yz) |
66| 无座 | Standing (wz) |
67
68Values: number = remaining seats, `有` = available (qty unknown), `—` = not applicable
69
70## Station Lookup
71
72```bash
73node {baseDir}/scripts/stations.mjs 杭州
74node {baseDir}/scripts/stations.mjs 香港西九龙
75```
76
77## Notes
78
79- Data comes directly from 12306 official API (no key needed)
80- Station data is cached for 7 days in `{baseDir}/data/stations.json`
81- Supports city names (resolves to main station) or exact station names
82- Works for all train types: G (高铁), D (动车), Z (直达), T (特快), K (快速)