当前位置: 首页 > news >正文

12306 火车票价格解析 (PHP 解析)

1. 从接口拿数据

日期

出发站

终点站

都填上

xxx/otn/leftTicketPrice/queryAllPublicPrice?leftTicketDTO.train_date=2024-06-15&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SJP&purpose_codes=ADULT

返回的数据是这样的

{"validateMessagesShowId": "_validatorMessage","status": true,"httpstatus": 200,"data": [{"queryLeftNewDTO": {"train_no": "25000K772836","station_train_code": "K7725","start_station_telecode": "QTP","start_station_name": "秦皇岛","end_station_telecode": "HDP","end_station_name": "邯郸","from_station_telecode": "FTP","from_station_name": "北京丰台","to_station_telecode": "SJP","to_station_name": "石家庄","start_time": "05:10","arrive_time": "08:44","day_difference": "0","train_class_name": "快速","lishi": "03:34","control_train_day": "","start_train_date": "","seat_feature": "","yp_ex": "","train_seat_feature": "","infoAll_list": "1004150000#3009550001#3009250002#3008750003#1004150000#","yz_price": "00415","yw_price": "00955"},"buttonTextInfo": ""}],"messages": [],"validateMessages": {}
}

2. 解析票价 

$t = [];
// 这里需要循环处理
$e = "I026500001#I023500003#J021600001#J019800002#J018500003#O008700000#O008700000#"; // 替换为你的字符串
$n = explode("#", $e);foreach ($n as $i) {if ($i) {$a = substr($i, 0, 1);$o = strlen($i) >= 10 && $i[9] === '0' ? '' : $i[9];$s = round((int)substr($i, 1, 5) / 10, 2); // Assuming you want to round to 2 decimal places, adjust as needed$t[$a . $o] = $s;if ($o !== '') {$t[$a] = $s;}}
}dd($t);
function dd($data) {print_r($data);die();
}

运行出来的结果

封装一下

3. 与标准座位比较 

A: "高级动卧",B: "混编硬座",C: "混编硬卧",D: "优选一等座",E: "特等软座",F: "动卧",F1: "下铺",F3: "上铺",G: "二人软包",H: "一人软包",H1: "下铺",H3: "上铺",I: "一等卧",I1: "下铺",I3: "上铺",J: "二等卧",J1: "下铺",J2: "中铺",J3: "上铺",K: "混编软座",L: "混编软卧",M: "一等座",O: "二等座",P: "特等座",Q: "多功能座",S: "二等包座",0: "棚车",1: "硬座",2: "软座",3: "硬卧",31: "下铺",32: "中铺",33: "上铺",4: "软卧",41: "下铺",43: "上铺",5: "包厢硬卧",6: "高级软卧",61: "下铺",63: "上铺",7: "一等软座",8: "二等软座",9: "商务座"

至此 解析车票 大概逻辑完成

相关文章:

  • 洛谷 P1008 [NOIP1998 普及组] 三连击
  • 被拷打已老实!面试官问我 #{} 和 ${} 的区别是什么?
  • 算法金 | 再见!!!梯度下降(多图)
  • 力扣469A
  • C++ 50 之 继承中的对象模型
  • 就因为没在大屏项目加全屏按钮,早上在地铁挨了领导一顿骂
  • javaweb 期末复习
  • 分页插件结合collection标签后分页数量不准确的问题
  • 小知识点快速总结:Batch Normalization Layer(BN层)的作用
  • phpcms仿蚁乐购淘宝客网站模板
  • android的surface
  • Sui主网升级至V1.27.2版本
  • Z世代职场价值观的重塑:从“班味”心态到个人成长的追求
  • vue实现全屏screenfull-封装组件
  • 【尝鲜】SpringCloudAlibaba AI 配置使用教程
  • [译] 怎样写一个基础的编译器
  • angular2开源库收集
  • echarts花样作死的坑
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Redis的resp协议
  • storm drpc实例
  • XForms - 更强大的Form
  • 测试开发系类之接口自动化测试
  • 第十八天-企业应用架构模式-基本模式
  • 前端性能优化——回流与重绘
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 收藏好这篇,别再只说“数据劫持”了
  • 算法-插入排序
  • 网络应用优化——时延与带宽
  • 小程序测试方案初探
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #pragam once 和 #ifndef 预编译头
  • #pragma预处理命令
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)球球大作战
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (LLM) 很笨
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (转载)虚函数剖析
  • .NET C# 配置 Options
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET 项目中发送电子邮件异步处理和错误机制的解决方案
  • .Net多线程Threading相关详解
  • /3GB和/USERVA开关
  • @Autowired和@Resource装配
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ vulhub漏洞复现篇 ] Celery <4.0 Redis未授权访问+Pickle反序列化利用
  • [ 网络通信基础 ]——网络的传输介质(双绞线,光纤,标准,线序)
  • [ 云计算 | AWS 实践 ] 基于 Amazon S3 协议搭建个人云存储服务