The China Railway Toolbox with Python & SQL Interpreters
用 Python 3 来检索中国铁路客户服务中心提供的各项数据。
provinces.py
依赖 mwclient 来读取维基百科上的条目。hyfw.py
交互式查询车站的电报码、TMIS 代码、所属省级行政区等。
GLDS
{ZMHZ: 嘎拉德斯汰, TMIS: 13188, DBM: GLC, PYM: GLDST, SSJC: 蒙, LJDM: 00004}
kyfw.py
解析客运车站的电报码、拼音码、拼音等。
tmis.py
交互式查询车站的 TMIS 代码。
津沪
津沪所 10348
dump.py
从以上三个接口分别读取数据,合并重复数据,并保存于本地的 station_name.js
。
station_name.js
相同,即以 @
|
作为分隔符。provinces.py
读取中文维基百科各车站条目中的信息框,查询车站所属的省级行政区,以填补 station_name.js
中的对应字段。
stations.py
启动一个 Shell,用于交互式查询上述 station_name.js
(以及其他类似格式的文件)。
sorted(s, key=lambda i: len(i[1]))[0]
SELECT * FROM s
ORDER BY LENGTH(b) ASC
LIMIT 1;
('son', '宋', 'SOB', '57368', '黑')
利国
布强格
万年
马三家
李旺
宋城路
东通化
百子湾
创业村
兴隆店
wifi12306.py
查询客运列车的运行时刻、交路、编组、动车组列车当日使用车底。
tracking.py
查询货运车辆的类别型号、编入列车车次、当前位置、装载货物类型、发站到站等。亦可查询经由铁路运输的集装箱。
tickets.py
启动 Python 解释器,查询两座车站之间的客运列车车次及确切的余票数量。需要登录 12306 账户。
trains.py
启动一个 Shell,用于交互式查询 train_list.js
中记录的车次。
{'Z%d' % i for i in range(1, 101)}.difference(i[1] for i in t)
WITH range AS (SELECT 1 i UNION SELECT i + 1 FROM range WHERE i < 100)
SELECT 'Z' || i FROM range
EXCEPT SELECT b FROM t;
{'Z73', 'Z74', 'Z83', 'Z84'}
from collections import Counter
distinct_trains = {i[0]: i[2] for i in t}
Counter(distinct_trains.values()).most_common(10)
SELECT c, COUNT(*) AS n
FROM (SELECT DISTINCT a, c FROM t)
GROUP BY c
ORDER BY n DESC
LIMIT 10;
('广州南', 384)
('上海虹桥', 335)
('北京西', 242)
('北京南', 242)
('上海', 193)
('深圳北', 187)
('西安北', 180)
('北京', 175)
('成都东', 161)
('武汉', 132)
otp.py
交互式查询某车次的正晚点信息。
6419 张辛 顺义 庙城 怀柔 统军庄 密云北
交路数据来自于新浪微博用户「CRH380AL动车组」编写的动车组交路查询软件。
截图功能依赖 Pillow。
mask.png
。文字的提取依赖早期版本 Windows 的特定内存结构,参见 internals.c
。
批量查询功能依赖 12306 提供的车次数据 train_list.js。
shot.py
对单个车次进行查询,包括对动车组型号的提取及对整个窗口的截图。
cache.py
对 12306 上列出的所有车次进行批量查询。
group.py
对批量查询的文本输出按照车型进行分组,并转存为 JSON 格式。
web.py
基于 Flask 框架编写,响应浏览器的 HTTP 请求,动态返回截图。