API 文档

按车站读取当日站内时刻表

返回指定车站当日的计划车次列表,按列车到站时间升序排列,并附上每趟车的参考车型。适合做车站查询页。

返回 API 列表
get/api/v2/timetable/station/{stationName}
可匿名访问api.timetable.station.read

场景

适用场景

这个接口适合用在什么地方?下面的场景可以帮你判断它是不是你要找的那个。

  • 做一个车站查询页,展示某站今天所有经停车次及时间。
  • 配合站点搜索,让用户从搜索结果直接跳到车站时刻表。

问答

常见问题

接入时最常遇到的疑问,先看看这里能不能解答。

同一趟车在 stationName 里为什么会有多个 allCodes?

allCodes 表示该趟车当天可能使用的全部车次号(例如中途换号),列表里的第一个通常就是当前显示的车次号。

列表按什么顺序排列?

按列车到站时间升序排列。始发站没有到站时间时,会按发车时间参与排序。

扣费

扣费规则

items 表示本次响应实际返回的记录条数,按记录数计算后再应用最低扣费。

按本页返回条数计费,0.08 额度/条,向上取整,最低扣费额度为 1

实际扣费以响应头 x-api-cost 为准;请求失败时也可能触发最低扣费。

请求说明

参数

路径参数

stationNamestring 必填

要查询的车站名,例如 北京南。中文站名在请求时会被自动做 URL 编码,调试器里直接填中文即可。

示例:北京南

查询参数

limitinteger

每一页最多返回多少条记录。不传时使用默认值 20;超过服务端配置上限(当前为 200)时会被自动截断。

示例:20

cursorstring

分页游标,格式为 serviceDay:id(例如 20679:6292081551810740)。第一页不需要传,翻页时直接复用上一页响应里的 nextCursor。serviceDay 是按上海时间自 1970-01-01 起的天数(epoch day),不是日期字符串。

示例:20679:6292081551810740

响应说明

状态码与响应格式

200

指定车站的当日站内时刻表分页结果。

响应头

x-api-remainx-api-costRetry-After
application/jsonobject

响应结构

{
    "type": "object",
    "required": [
        "meta",
        "data"
    ],
    "properties": {
        "meta": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "remain",
                    "cost"
                ],
                "properties": {
                    "remain": {
                        "type": "integer",
                        "required": true
                    },
                    "cost": {
                        "type": "integer",
                        "required": true
                    },
                    "retryAfter": {
                        "type": "integer"
                    }
                }
            }
        },
        "data": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "stationName",
                    "cursor",
                    "limit",
                    "nextCursor",
                    "items"
                ],
                "properties": {
                    "stationName": {
                        "type": "string",
                        "required": true
                    },
                    "cursor": {
                        "type": "string",
                        "required": true
                    },
                    "limit": {
                        "type": "integer",
                        "required": true
                    },
                    "nextCursor": {
                        "type": "string",
                        "required": true
                    },
                    "items": {
                        "type": "array<object>",
                        "required": true,
                        "shape": {
                            "type": "array",
                            "items": {
                                "type": "object",
                                "required": [
                                    "allCodes",
                                    "startStation",
                                    "endStation",
                                    "referenceModels"
                                ],
                                "properties": {
                                    "trainCode": {
                                        "type": "object",
                                        "shape": {
                                            "type": "object",
                                            "required": [
                                                "prefix",
                                                "number"
                                            ],
                                            "properties": {
                                                "prefix": {
                                                    "type": "string",
                                                    "required": true
                                                },
                                                "number": {
                                                    "type": "integer",
                                                    "required": true
                                                }
                                            }
                                        }
                                    },
                                    "allCodes": {
                                        "type": "array<object>",
                                        "required": true,
                                        "shape": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "required": [
                                                    "prefix",
                                                    "number"
                                                ],
                                                "properties": {
                                                    "prefix": {
                                                        "type": "string",
                                                        "required": true
                                                    },
                                                    "number": {
                                                        "type": "integer",
                                                        "required": true
                                                    }
                                                }
                                            }
                                        }
                                    },
                                    "arriveAt": {
                                        "type": "integer"
                                    },
                                    "departAt": {
                                        "type": "integer"
                                    },
                                    "platformNo": {
                                        "type": "integer"
                                    },
                                    "startStation": {
                                        "type": "string",
                                        "required": true
                                    },
                                    "endStation": {
                                        "type": "string",
                                        "required": true
                                    },
                                    "updatedAt": {
                                        "type": "integer"
                                    },
                                    "referenceModels": {
                                        "type": "array<object>",
                                        "required": true,
                                        "shape": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "required": [
                                                    "model",
                                                    "weightedShare"
                                                ],
                                                "properties": {
                                                    "model": {
                                                        "type": "string",
                                                        "required": true
                                                    },
                                                    "weightedShare": {
                                                        "type": "number",
                                                        "required": true
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

示例响应

{
    "ok": true,
    "data": {
        "stationName": "北京南",
        "cursor": "",
        "limit": 1,
        "nextCursor": "20679:6292081551810740",
        "items": [
            {
                "trainCode": {
                    "prefix": "G",
                    "number": 9418
                },
                "allCodes": [
                    {
                        "prefix": "G",
                        "number": 9418
                    }
                ],
                "arriveAt": 1786723260,
                "startStation": "天津西",
                "endStation": "北京南",
                "updatedAt": 1786717003,
                "referenceModels": [
                    {
                        "model": "CR400AF-B",
                        "weightedShare": 1
                    }
                ]
            }
        ]
    },
    "error": ""
}
400

请求参数不合法:可能是日期格式、游标格式或 limit 不符合要求。

响应头

x-api-remainx-api-costRetry-After
application/jsonobject

响应结构

{
    "type": "object",
    "required": [
        "meta",
        "error"
    ],
    "properties": {
        "meta": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "remain",
                    "cost"
                ],
                "properties": {
                    "remain": {
                        "type": "integer",
                        "required": true
                    },
                    "cost": {
                        "type": "integer",
                        "required": true
                    },
                    "retryAfter": {
                        "type": "integer"
                    }
                }
            }
        },
        "error": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "code",
                    "message"
                ],
                "properties": {
                    "code": {
                        "type": "string",
                        "required": true
                    },
                    "message": {
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    }
}

示例响应

{
    "meta": {
        "remain": 159,
        "cost": 1
    },
    "error": {
        "code": "invalid_param",
        "message": "date 必须使用 YYYYMMDD 格式。"
    }
}
401

请求未携带有效的认证信息,或提供的 API Key 已失效。

响应头

x-api-remainx-api-costRetry-After
application/jsonobject

响应结构

{
    "type": "object",
    "required": [
        "meta",
        "error"
    ],
    "properties": {
        "meta": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "remain",
                    "cost"
                ],
                "properties": {
                    "remain": {
                        "type": "integer",
                        "required": true
                    },
                    "cost": {
                        "type": "integer",
                        "required": true
                    },
                    "retryAfter": {
                        "type": "integer"
                    }
                }
            }
        },
        "error": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "code",
                    "message"
                ],
                "properties": {
                    "code": {
                        "type": "string",
                        "required": true
                    },
                    "message": {
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    }
}

示例响应

{
    "meta": {
        "remain": 159,
        "cost": 1
    },
    "error": {
        "code": "invalid_api_key",
        "message": "API Key 无效或已过期。"
    }
}
403

当前凭证缺少调用该接口所需的 scope。

响应头

x-api-remainx-api-costRetry-After
application/jsonobject

响应结构

{
    "type": "object",
    "required": [
        "meta",
        "error"
    ],
    "properties": {
        "meta": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "remain",
                    "cost"
                ],
                "properties": {
                    "remain": {
                        "type": "integer",
                        "required": true
                    },
                    "cost": {
                        "type": "integer",
                        "required": true
                    },
                    "retryAfter": {
                        "type": "integer"
                    }
                }
            }
        },
        "error": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "code",
                    "message"
                ],
                "properties": {
                    "code": {
                        "type": "string",
                        "required": true
                    },
                    "message": {
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    }
}

示例响应

{
    "meta": {
        "remain": 159,
        "cost": 1
    },
    "error": {
        "code": "forbidden",
        "message": "缺少调用该接口所需的权限。"
    }
}
404

指定车站暂无当日时刻表数据。

响应头

x-api-remainx-api-costRetry-After
application/jsonobject

响应结构

{
    "type": "object",
    "required": [
        "meta",
        "error"
    ],
    "properties": {
        "meta": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "remain",
                    "cost"
                ],
                "properties": {
                    "remain": {
                        "type": "integer",
                        "required": true
                    },
                    "cost": {
                        "type": "integer",
                        "required": true
                    },
                    "retryAfter": {
                        "type": "integer"
                    }
                }
            }
        },
        "error": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "code",
                    "message"
                ],
                "properties": {
                    "code": {
                        "type": "string",
                        "required": true
                    },
                    "message": {
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    }
}

示例响应

{
    "meta": {
        "remain": 159,
        "cost": 1
    },
    "error": {
        "code": "not_found",
        "message": "当前暂无该车站的时刻表。"
    }
}
429

额度不足或请求过于频繁,建议等 Retry-After 提示的时间后再试。

响应头

x-api-remainx-api-costRetry-After
application/jsonobject

响应结构

{
    "type": "object",
    "required": [
        "meta",
        "error"
    ],
    "properties": {
        "meta": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "remain",
                    "cost"
                ],
                "properties": {
                    "remain": {
                        "type": "integer",
                        "required": true
                    },
                    "cost": {
                        "type": "integer",
                        "required": true
                    },
                    "retryAfter": {
                        "type": "integer"
                    }
                }
            }
        },
        "error": {
            "type": "object",
            "required": true,
            "shape": {
                "type": "object",
                "required": [
                    "code",
                    "message"
                ],
                "properties": {
                    "code": {
                        "type": "string",
                        "required": true
                    },
                    "message": {
                        "type": "string",
                        "required": true
                    }
                }
            }
        }
    }
}

示例响应

{
    "meta": {
        "remain": 159,
        "cost": 1
    },
    "error": {
        "code": "rate_limited",
        "message": "额度不足,请稍后再试。"
    }
}