12306 API 研究
来源:互联网 发布:c语言改文件名 编辑:程序博客网 时间:2024/05/18 02:25
引子
本篇记录 12306 对外暴露的 API 信息, 具有时效性, 仅供学习.
APIs
1.
https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-08-20&from_station=WHN&to_station=SNH
余票查询
import requestsimport osfrom pprint import pprintfrom requests.packages.urllib3.exceptions import InsecureRequestWarningclass Train: ticket_hash = { '商务座': 'swz_num', '特等座': 'tz_num', '一等座': 'zy_num', '二等座': 'ze_num', '高级软卧': 'gr_num', '软卧': 'rw_num', '硬卧': 'yw_num', '软座': 'rz_num', '硬座': 'yz_num', '无座': 'wz_num', '其它': 'qt_num' } def __init__(self, date, from_station, to_station, train_code=None, ticket_type=None): # 抑制 12306 自签发的 SSL 证书引发的 warning requests.packages.urllib3.disable_warnings(InsecureRequestWarning) self.stationList = self.stationInit() self.date = date self.from_station = from_station self.to_station = to_station self.train_code = train_code self.ticket_type = ticket_type @staticmethod def stationInit(): """ @bji|北京|BJP|beijing|bj|2 @拼音缩写三位|站点名称|编码|拼音|拼音缩写|序号 :return: """ stations = {} if not os.path.isfile('station_name.js'): res = requests.get( 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js', verify=False ) with open('station_name.js', 'wb') as fp: fp.write(res.content) with open('station_name.js', encoding='utf8') as fp: data = fp.read() data = data.partition('=')[2].strip("'") # var station_names ='..' for station in data.split('@')[1:]: items = station.split('|') # bjb|北京北|VAP|beijingbei|bjb|0 stations[items[1]] = items[2] return stations def query(self): query_url = 'https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate={}' \ '&from_station={}&to_station={}'.format( self.date, self.stationList[self.from_station], self.stationList[self.to_station] ) res = requests.get(query_url, verify=False).json() pprint(res) if res == -1: return False if not res['data']['flag']: return False if self.train_code and self.ticket_type: for each_train in res['data']['datas']: if each_train['station_train_code'] == self.train_code: for each_ticket in self.ticket_type: print(each_ticket + ': ' + each_train[self.ticket_hash[each_ticket]]) else: for each_train in res['data']['datas']: print(each_train['station_train_code'])t = Train('2016-08-20', '武汉', '上海南', 'K121', ['硬卧', '软卧', '硬座', '软座', '无座'])t.query()
2.
https://kyfw.12306.cn/otn/czxx/queryByTrainNo?train_no=39000D302808&from_station_telecode=AOH&to_station_telecode=ZEK&depart_date=2016-08-20
查询 train_no 指定车次所有经过的站
3.
https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=39000D302808&from_station_no=01&to_station_no=12&seat_types=OMO&train_date=2016-08-19
查询 train_no 指定车次票价
其中, from_station_no, to_station_no 以及 seat_types 来自接口 1
0 0
- 12306 API 研究
- hasoffers API 研究
- OSS/J API研究报告
- 正在研究 google map api
- 最近研究的windows API
- 基于Visual C++的Winsock API研究
- 基于Visual C++的Winsock API研究
- 关于 Hook Win32 API 的一点研究
- 基于Visual C++的Winsock API研究
- 基于Visual C++的Winsock API研究
- 基于Visual C++的Winsock API研究
- 基于Visual C++的Winsock API研究
- 基于Visual C++的Winsock API研究
- 基于Visual C++的Winsock API研究
- 基于Visual C++的Winsock API研究
- Google API和gdata-python-client研究
- android JAVA 层API GPS 研究总结
- 深入研究 UCenter API 之 通讯原理
- 做长图片
- 重要时间点提醒工具软件
- 导出数据进excel
- scala之正则表达式(二)内部匹配函数
- C#对List中的数据进行取交集、并集、差集和去重操作的方法
- 12306 API 研究
- 数据结构——Stack
- Context上下文你真的清楚吗?
- WebView---灵活高效的在 Android Native App 开发中显示 HTML 内容
- 从URL中提取参数与将对象转换为URL查询参数
- hdoj-4279-Number
- 关于集合整数表示的一些技巧以及状态压缩dp入门(POJ3254)
- nyoj 122 triangular sums
- Linux 用Mail发送邮件文字变成AXXX.bin的问题解决方法