离上次写的类似于铁道部12306城市选择框的实现过了都快一个月了,最近一直在忙,在学习sharepoint2013,虽然早就实现了12306的余票查询,但是一直没抽出时间来写,刚好这几天也快放假了,抽点时间写一下,不然都要拖到年后了啊。。。

先来看一下条件输入窗口:

这里的出发地和目的地是之前提到的城市选择框,加上一个DateTimePicker和一个Button,就做的简陋一点了哈,对界面挑剔的大牛可以绕道,不要伤害我幼小的心灵哟~

然后我们分析一下12306查询余票的过程:

最直接的就是用chrome的开发者选项(F12),我比较喜欢用这个而已,当然你用firefox的firebug也可以,或者用IE的开发者选项,追踪一下点击查询按钮的这个过程,看看具体调用了那些网站,传了哪些参数,有哪些cookies,这个过程我就不详细介绍了,大家有兴趣的可以自己去研究一下,我就贴几张图,这是我分析到的结果:

现在准备就绪,开工了。。

废话不多说,上代码!

private void btnSelect_Click(object sender, EventArgs e)
{
//判断是否选择出发地
string fromStation = this.fromStationText.Text;
if (fromStation == "")
{
MessageBox.Show("请选择出发地!");
}
else
{
//判断是否选择目的地
string toStation = this.toStationText.Text;
if (toStation == "")
{
MessageBox.Show("请选择目的地!");
}
else
{
//判断时间是否合理
this.startTime.Format = DateTimePickerFormat.Custom;
this.startTime.CustomFormat = "yyyy-MM-dd";
string nowDate = DateTime.Now.ToString("yyyy-MM-dd");
string startDate = this.startTime.Text;
if (startDate.CompareTo(nowDate) < 0)
{
MessageBox.Show("请选择合适的时间!");
}
else
{
//将城市转码
string fromStationCode = CityInfoHelper.codeSelect(fromStation);
string toStationCode = CityInfoHelper.codeSelect(toStation);
//获得查询结果
var datas = TicketDemo.GetTicketData.getTicketData(fromStationCode, toStationCode, startDate);
JToken[] TrainInfoArr = datas.ToArray();
int arrLength = TrainInfoArr.Length;
string train_no = datas[0]["train_no"].ToString();
}
}
}
}

  这是查询按钮的点击事件,没什么内容,对出发地,目的地,出发时间做一个合理判断,从数据库将城市的CODE读出,将fromStationCode, toStationCode, startDate传入查询函数,取得返回的DATA,这里返回的值,调试一下就可以看到他的格式,他的事json的格式,转换一下格式,读出就可以了。

接下来,核心代码来了,擦亮你的眼睛,看好咯:

public static JToken getTicketData(string fromStation,string toStation,string startDate)
{
//获取查询的车票信息
string url = "https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=" + startDate + "&from_station=" + fromStation + "&to_station=" + toStation;
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();//请求连接,并返回数据
System.IO.StreamReader myreader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8);
string responseText = myreader.ReadToEnd();
myreader.Close();
JObject joo = (JObject)JsonConvert.DeserializeObject(responseText);
string  re = joo["data"].ToString();
JObject da = (JObject)JsonConvert.DeserializeObject(re);
var data = da["datas"];
return data;
}

代码很简单,相信大家也都看得懂,我也不做过多的解释了,就是做一个request和response,然后就可以取到我们想要的结果了哈!

到这里,关于余票查询的部门就介绍完毕了,至于要怎么展示,那就看大家自己的喜好了,有兴趣的朋友可以一步步的去执行看看,也欢迎大牛们给点指导意见,小弟感激不尽!

新手帖,非喜勿喷,大神可自动过滤~~~

铁路局12306余票查询的实现相关推荐

  1. 返乡之路不容易之12306余票查询并给出备选方案v2

    在第一版的返乡之路不容易之12306余票查询并给出备选方案中,给出了余票查询和备选方案推荐,但当时有两个问题: 没有备选排名:虽然给出了备选,但哪个备选好没有给出排序 没有座位信息(商务/一等/二等/ ...

  2. 火车票查询系统(一)——利用python实现监控12306余票查询

    最近春运高峰,本人从12月开始买过年回家的火车票,然鹅~现实总是那么残酷,放票时间记不住,要么就是不能实时盯着刷票,外面的软件也不知道靠不靠谱,反正是没买到票,所以一怒之下,自己做一个12306余票查 ...

  3. 12306 余票查询API浅探索

    12306 余票查询API浅探索 余票查询请求分析 响应数据解密代码查找调试 数据说明 余票查询请求分析 点击查询,F12进入控制台,进入NetWork面板,查看发送的请求: 点入请求查看详情,很明显 ...

  4. 最新Python实现12306余票查询系统

    首先感谢这篇博客的引导,但是这篇文章已经比较旧了,12306进行了改版,源码编排方式有了变化.12306源码获取的方法可以从这篇博客中学习,我在这里主要贴出对于目前最新的12306的Python余票查 ...

  5. Python之12306余票查询

    简单的Python学习,用Python完成一个12306余票查询- Python之12306余票查询 参考资料来自Python 实现火车票查询工具 需要用到的第三方库 requests,使用 Pyth ...

  6. 12306余票查询(爬虫)

    经常因为忙而忘记给妹子订票. 每次结果不言而喻. 登个12306查下余票其实很简单,但不知道为什么就是不想登. 所以弄了个爬虫脚本直接查询余票.希望下个女票不会这样尴尬,哈哈哈哈哈哈 12306首页为 ...

  7. 使用c#中的HttpWebRequest实现12306余票查询

    准备工作 下载用于解析JSON的类库(Newtonsoft.Json.dll)(下载地址:Newtonsoft.Json.dll): 在C#项目中添加对其的引用. 在程序中导入命名空间: 1 2 3 ...

  8. php 12306余票查询,PHP火车余票查询的API,12306官方的API

    我在做自己微信的时候需要的火车票查询的东西,注册的东西等等太多了,今天就简单的做了下测试看能获取到不,数据怎么样处理速度怎么样,因为是个人做所以就没有去其他网站上找接口,就自己做了下!下边把方法放出来 ...

  9. 12306余票查询(一)——分析页面

    这段时间Python写的很少,用这个小项目复习一下以前的知识 首先打开12306看一下页面结构吧 因为我们没有点击查询,所以现在页面中是没有余票信息的, 随便选个出发站目的地,日期,点击查询, 发现相 ...

最新文章

  1. 【原生js】js动态添加dom,如何绑定事件
  2. Python3类方法和静态方法
  3. 输入一个数判断是否对称java_判断对称矩阵 - osc_4mawo3g6的个人空间 - OSCHINA - 中文开源技术交流社区...
  4. P5659-[CSP-S2019]树上的数【贪心】
  5. 防抖与节流方案_前端ajax优化解决方案
  6. SAP系统的模块分类
  7. 中序遍历+后序/先序遍历构建二叉树
  8. 20165333 2017-2018-2《Java程序设计》课程总结
  9. AAtitit 项目管理 提升开发效率的项目流程方法模型 哑铃型  橄榄型 直板型titi
  10. Java软件工程师职业规划
  11. 自己动手写一个分库分表中间件(六)分布式事务问题解决思路<二>动态事务管理器
  12. 实景化数字城市共享信息平台
  13. 算笔账:阿里巴巴股票买不买
  14. 理想国pandas练习题4
  15. 姓名拼音首字母缩写_企业开发人员,首字母缩写词和歧视
  16. 物联网在智慧校园里的应用
  17. 云服务器linux(centos)系统下载最新版本R语言
  18. 【普】静态IP和动态IP有什么区别?
  19. 课程设计每日总结0820
  20. 获得汉字字符串拼音首字母 .

热门文章

  1. 码分多址cdma通信_码分多址(CDMA)| 计算机网络
  2. WordPress阿里百秀XIU v7.5博客主题
  3. stm32倒计时秒表proteus_倒计时秒表 单片机
  4. MATLAB机器人工具箱的安装与下载(基于已经安装了MATLAB软件)
  5. cmmi3级认证,为什么申请3级认证的企业多 ?
  6. 追光几何助力RoboMaster,提升10倍效率轻松管理机械设计图纸
  7. [附源码]计算机毕业设计springboot宠物领养与物品捐赠小程序
  8. Spring Cloud微服务全家桶主要组件及简要介绍
  9. Linux secure 日志分析
  10. 你会仲裁吗——劳动仲裁需要准备