zoukankan      html  css  js  c++  java
  • 12306官方火车票Api接口

    2017,现在已进入春运期间,真的是一票难求,深有体会。各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛。对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看12306相关的接口,如果有类似的需求或业务,或者此文章可以帮助到你。

    背景

    在一些需要工具等应用可能会应用到火车票信息的查询,但是又不知去哪里找即免费又不限制次数的Api接口,呵呵,今天我简单给你介绍一些Api接口的抓取,不要激动,最终还是希望可以帮助到你。对于有web开发经验的,可直接忽略此文,本文仅是提供一种获取方式,不保障永久可用。

    不多说了,到此为止,直接先给一张效果图,明确一下今天的博客内容。
    这里写图片描述
    这是一个神奇的网站,不需宣传和推广,每年的访问量和用户都很大,挣的广告费,呵呵,不多说,你懂的吧,Money大大的。

    接下来,我们就直接奔主题喽......

    此文使用的是Chrome浏览器。

    官方Api接口哟

    举个栗子,来了小接口,验证码

    网页地址:https://kyfw.12306.cn/otn/leftTicketPrice/init
    看图说人话:
    这里写图片描述
    此图上有一个验证码,下面来分析一下验证码是怎么获取并显示出来的。
    打开上面的地址,然后点击键盘F12,然后再点击F5,你会看到如下图所示:
    这里写图片描述
    上图标出了验证码的请求接口,右边显示的预览就是验证码
    然后,点击右侧的Headers 选项
    这里写图片描述
    这次知道验证码接口是什么了吧,太简单,我就不多扯犊子了。
    验证码接口为:https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=other&rand=sjrand
    单独访问接口, 效果如下:
    这里写图片描述
    验证码接口就是这个,当然,回来的验证码的Content-Type是image/jpeg;charset=UTF-8。
    Java的验证码是怎么生成的,可以参考本文。
    Nodejs生成验证码
    再听我啰嗦几句, 说一下怎么显示出来的。用图说话>
    这里写图片描述
    到此,验证码的接口就介绍完了,是不是很简单啊,剩下其他的接口也类似啊,你可以自己动手试试,看是否可以找到呢。找不到的,还是继续接着看下文吧,哈哈,继续接着唠嗑。

    来个牛掰的梨子,某天火车票所有列车信息

    我是使用2016年12月01日作为查看数据的,你使用接口时,务必注意一下查询接口时传递的时间参数。
    方法同上,先给效果图;
    这里写图片描述

    • 点击查询
    • 车次列表显示出来
    • 点击查询发了2个接口

    第一个接口,名字叫log,其实是请求服务器判断服务是否正常,返回的数据Httpstatus是200,status为true,"validateMessagesShowId":"_validatorMessage",原来仅仅是一个验证信息。
    接口:https://kyfw.12306.cn/otn/leftTicket/log?leftTicketDTO.train_date=2016-12-01&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT

    接口分析
    协议:https:
    域名:kyfw.12306.cn/
    接口:otn/leftTicket/log?
    请求参数

    • leftTicketDTO.train_date出发日期
    • leftTicketDTO.from_station出发地简称缩写
    • leftTicketDTO.to_station目的地简称缩写
    • purpose_codes乘客类型(成儿&学生),ADULT是成人,学生是0X00

    ps:如在Android等客户端访问接口出现证书问题,12306是自签名证书,去12306官网下载加到客户端信任证书即可。

    数据为:

    {
    	"validateMessagesShowId": "_validatorMessage",
    	"status": true,
    	"httpstatus": 200,
    	"messages": [],
    	"validateMessages": {}
    }
    

    第二个接口,名字叫query,一看就是查询接口。
    接口https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2016-12-01&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT

    接口分析
    协议:https:
    域名:kyfw.12306.cn/
    接口:otn/leftTicket/query?
    请求参数

    • leftTicketDTO.train_date出发日期
    • leftTicketDTO.from_station出发地简称缩写
    • leftTicketDTO.to_station目的地简称缩写
    • purpose_codes乘客类型(成儿&学生),ADULT是成人,学生是0X00
      返回的数据为:
    {
    	"validateMessagesShowId": "_validatorMessage",
    	"status": true,
    	"httpstatus": 200,
    	"data": [......],
    	"messages": [],
    	"validateMessages": {}
    }
    
    

    具体列车数据查看data对应的数组即可。
    数据里面单个元素的数据结构为:

    {
    	"queryLeftNewDTO": {
    		"train_no": "240000G1010C",
    		"station_train_code": "G101",
    		"start_station_telecode": "VNP",
    		"start_station_name": "北京南",
    		"end_station_telecode": "AOH",
    		"end_station_name": "上海虹桥",
    		"from_station_telecode": "VNP",
    		"from_station_name": "北京南",
    		"to_station_telecode": "AOH",
    		"to_station_name": "上海虹桥",
    		"start_time": "06:44",
    		"arrive_time": "12:38",
    		"day_difference": "0",
    		"train_class_name": "",
    		"lishi": "05:54",
    		"canWebBuy": "IS_TIME_NOT_BUY",
    		"lishiValue": "354",
    		"yp_info": "O055300032M0933000349174800012",
    		"control_train_day": "20161229",
    		"start_train_date": "20161201",
    		"seat_feature": "O3M393",
    		"yp_ex": "O0M090",
    		"train_seat_feature": "3",
    		"seat_types": "OM9",
    		"location_code": "P2",
    		"from_station_no": "01",
    		"to_station_no": "11",
    		"control_day": 59,
    		"sale_time": "1230",
    		"is_support_card": "1",
    		"controlled_train_flag": "0",
    		"controlled_train_message": "正常车次,不受控",
    		"gg_num": "--",
    		"gr_num": "--",
    		"qt_num": "--",
    		"rw_num": "--",
    		"rz_num": "--",
    		"tz_num": "--",
    		"wz_num": "--",
    		"yb_num": "--",
    		"yw_num": "--",
    		"yz_num": "--",
    		"ze_num": "有",
    		"zy_num": "有",
    		"swz_num": "12"
    	},
    	"secretStr": "",
    	"buttonTextInfo": "23:00-06:00系统维护时间"
    }
    

    此文章仅是为了一些对web前端不太熟悉的技术人员起到抛砖引玉的作用,希望看过之后可以达到举一反三的效果;如果此文章对你有所帮助,请在下方点一个赞,谢谢您的支持!

    注:以上数据及信息,纯属个人统计或其他来源得知,如有出现误差和错误,敬请谅解,谢谢。
    ps:如您有同类的接口或其他的网站等等,请联系我的QQ:2836989389

    文章来自:http://blog.csdn.net/qxs965266509

  • 相关阅读:
    我与ARM的那些事儿1初识ARM
    WP的万能小应用时钟表
    单片机的模拟智能灌溉系统
    android的计算器
    C语言经典面试题目(转的,不过写的的确好!)
    数据库sqlite3在linux中的使用
    认识域模型
    认识JMS
    认识JDOM
    认识RMI
  • 原文地址:https://www.cnblogs.com/kdapi/p/6248028.html
Copyright © 2011-2022 走看看