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
12306官方火车票Api接口的更多相关文章
- [转]微信JSAPI 微信内置JSAPI 2015年1月官方正式API接口,分享完整实例
FROM : http://www.oschina.net/code/snippet_2276613_45290 HTML通过微信,分享朋友圈出发此JSAPI <?php require_onc ...
- 如何利用新浪官方的短网址API接口实现T.cn短链接的压缩生成
短网址的实现原理就是有一个数据表会配置文件将短网址和实际网址进行对应,当请求某个短网址时,程序跳转到对应的实际网址上去,从而实现网址的访问.目前国内最稳定最好用的是新浪T.cn短链接. 之前新浪提供了 ...
- 常用精品API接口汇总
下面列举了100多个国内常用API接口,并按照 笔记.出行.词典.电商.地图.电影.即时通讯.开发者网站.快递查询.旅游.社交.视频.天气.团队协作.图片与图像处理.外卖.消息推送.音乐.云.语义识别 ...
- 常用API接口汇总
下面列举了100多个国内常用API接口,并按照 笔记.出行.词典.电商.地图.电影.即时通讯.开发者网站.快递查询.旅游.社交.视频.天气.团队协作.图片与图像处理.外卖.消息推送.音乐.云.语义识别 ...
- 【转载】常用精品API接口汇总
原文链接戳这里~~ 下面列举了100多个国内常用API接口,并按照 笔记.出行.词典.电商.地图.电影.即时通讯.开发者网站.快递查询.旅游.社交.视频.天气.团队协作.图片与图像处理.外卖.消息推送 ...
- 快递Api接口 & 微信公众号开发流程
之前的文章,已经分析过快递Api接口可能被使用的需求及场景:今天呢,简单给大家介绍一下微信公众号中怎么来使用快递Api接口,来完成我们的需求和业务场景. 开发语言:Nodejs,其中用到了Neo4j图 ...
- 常用天气预报API接口整理(转)
文章转自:http://www.nohacks.cn/post-35.html 自序: 由nohacks.cn 收集整理,来源于网络,版权归原作者所有,基本收集了网络上能使用的大部分天气API接口,作 ...
- Android官方多媒体API Mediacodec翻译(一)
因近期工作调整,关于Mediacodec部分的翻译会暂停,后续有时间一定补上,非常抱歉. 本文章为根据Android Mediacodec官方英文版的原创翻译,转载请注明出处:http://www.c ...
- 免费的无次数限制的各类API接口(2)
之前整理过一些聚合数据上的免费API(各类免费的API接口分享,无限次),这次还有一些其他的进行了整理,主要是聚合数据上和API Store上的一些,还有一些其他的. 聚合数据提供30大类,160种以 ...
随机推荐
- 分布式锁1 Java常用技术方案
前言: 由于在平时的工作中,线上服务器是分布式多台部署的,经常会面临解决分布式场景下数据一致性的问题,那么就要利用分布式锁来解决这些问题.所以自己结合实际工作中的一些经验和网上看到的一些资 ...
- JavaScript 字符串实用常操纪要
JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...
- 几个比较”有意思“的JS脚本
1.获取内网和公网真实IP地址(引用地址) <!DOCTYPE html> <html> <head> <meta http-equiv="Cont ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(72)-微信公众平台开发-消息处理
系列目录 前言 Senparc.Weixin.MP SDK提供了MessageHandler消息处理类 在作者的Wiki中也详细说明了如何定义这个类,下面我们来演示,消息的回复,及效果 了解Messa ...
- 菜鸟Python学习笔记第二天:关于Python黑客。
2016年1月5日 星期四 天气:还好 一直不知道自己为什么要去学Python,其实Python能做到的Java都可以做到,Python有的有点Java也有,而且Java还是必修课,可是就是不愿意去学 ...
- 深入理解CSS六种颜色模式
前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...
- RunLoop 总结:RunLoop的应用场景(一)
参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...
- Missing Push Notification Entitlement 问题
最近打包上传是遇到一个问题: 描述: Missing Push Notification Entitlement - Your app includes an API for Apple's Push ...
- ASP.NET 5 (vNext) Linux部署
引言 工欲善其事,必先利其器. 首先,我们先明确下以下基本概念 Linux相关 Ubuntu Ubuntu是基于linux的免费开源桌面PC操作系统 十分契合英特尔的超极本定位 支持x86.64位和p ...
- 微软“.Net社区虚拟大会”dotnetConf2015:关键词:.NET 创新、开源、跨平台
去年 11 月的时候,微软开源了 .NET CoreFX,然后是今年 2 月份的 .NET CoreCLR.自那时以来,已经有大约 3500 人在 GitHub 上进行了提交,而且贡献者的人数还在持续 ...