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


    1. 从接口拿数据

    日期

    出发站

    终点站

    都填上

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

    返回的数据是这样的

    1. {
    2. "validateMessagesShowId": "_validatorMessage",
    3. "status": true,
    4. "httpstatus": 200,
    5. "data": [
    6. {
    7. "queryLeftNewDTO": {
    8. "train_no": "25000K772836",
    9. "station_train_code": "K7725",
    10. "start_station_telecode": "QTP",
    11. "start_station_name": "秦皇岛",
    12. "end_station_telecode": "HDP",
    13. "end_station_name": "邯郸",
    14. "from_station_telecode": "FTP",
    15. "from_station_name": "北京丰台",
    16. "to_station_telecode": "SJP",
    17. "to_station_name": "石家庄",
    18. "start_time": "05:10",
    19. "arrive_time": "08:44",
    20. "day_difference": "0",
    21. "train_class_name": "快速",
    22. "lishi": "03:34",
    23. "control_train_day": "",
    24. "start_train_date": "",
    25. "seat_feature": "",
    26. "yp_ex": "",
    27. "train_seat_feature": "",
    28. "infoAll_list": "1004150000#3009550001#3009250002#3008750003#1004150000#",
    29. "yz_price": "00415",
    30. "yw_price": "00955"
    31. },
    32. "buttonTextInfo": ""
    33. }],
    34. "messages": [],
    35. "validateMessages": {}
    36. }

    2. 解析票价 

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

    运行出来的结果

    封装一下

    3. 与标准座位比较 

    1. A: "高级动卧",
    2. B: "混编硬座",
    3. C: "混编硬卧",
    4. D: "优选一等座",
    5. E: "特等软座",
    6. F: "动卧",
    7. F1: "下铺",
    8. F3: "上铺",
    9. G: "二人软包",
    10. H: "一人软包",
    11. H1: "下铺",
    12. H3: "上铺",
    13. I: "一等卧",
    14. I1: "下铺",
    15. I3: "上铺",
    16. J: "二等卧",
    17. J1: "下铺",
    18. J2: "中铺",
    19. J3: "上铺",
    20. K: "混编软座",
    21. L: "混编软卧",
    22. M: "一等座",
    23. O: "二等座",
    24. P: "特等座",
    25. Q: "多功能座",
    26. S: "二等包座",
    27. 0: "棚车",
    28. 1: "硬座",
    29. 2: "软座",
    30. 3: "硬卧",
    31. 31: "下铺",
    32. 32: "中铺",
    33. 33: "上铺",
    34. 4: "软卧",
    35. 41: "下铺",
    36. 43: "上铺",
    37. 5: "包厢硬卧",
    38. 6: "高级软卧",
    39. 61: "下铺",
    40. 63: "上铺",
    41. 7: "一等软座",
    42. 8: "二等软座",
    43. 9: "商务座"

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

  • 相关阅读:
    write a number of lines to a new file in vim
    Docker linux 安装
    Java:谁是Java开发人员?这个职业现在很抢手吗?
    如何快速又高质量的输出PDF实验报告?
    chrome闪退后打不开问题 打开立即闪退
    leetcode 695. 岛屿的最大面积
    数据结构-----图(graph)的储存和创建
    【C++】C到C++的入门知识
    c# Stack vs Queue
    泛型擦除机制
  • 原文地址:https://blog.csdn.net/qq_36999656/article/details/139686708