0
点赞
收藏
分享

微信扫一扫

获取12306的车次与单价的接口


过去很多做聚合接口的。时间长了就不能用了。现在还有几个聚合接口。只是要收费。

有时我们只需要简单的查一下。所以还是12306接口好一点。

1. 找到车次查询界面。

获取12306的车次与单价的接口_火车票接口

2. chome浏览器。按F12进入调试状态。如图切换到network标签页。

获取12306的车次与单价的接口_车票查询_02

 3. 点查询按钮,抓取接口。


 

获取12306的车次与单价的接口_电报码_03

获取12306的车次与单价的接口_车票查询_04

 在data里面就是返回结果。

获取12306的车次与单价的接口_火车票接口_05

 

获取12306的车次与单价的接口_车次查询_06

 4. 车次界面没有直接显示单价。单击车次后面的下拉时,才显示价格。抓取接口:


获取12306的车次与单价的接口_火车票接口_07

后记:编程如何实现呢。请看下面的:

首先,如果直接用file_get_contents(url)会得到网站的报错。

获取12306的车次与单价的接口_火车票接口_08

用chome的f12调试看了。网页中读取是送入了cookie的。然后把cookie拷贝到postman中进行调试。发现它的cookie主要是一种形式主义。只要有"RAIL_DEVICEID="即可。值没有都无所谓的。当然我们说它这个cookie可能是在其他重要场合时进行校验的。不能说人家写的没水平。只是https://kyfw.12306.cn/otn/leftTicket/query这个接口没有进行校验而已。

代码如下:

<?php
     // Create a stream
     $opts = array(
       'http'=>array(
         'method'=>"GET",
         'header'=>"Accept-language: en\r\n" .
                   "Cookie: RAIL_DEVICEID=;\r\n"
       )
     );    $context = stream_context_create($opts);
    $url='https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2023-04-08&leftTicketDTO.from_station=WEI&leftTicketDTO.to_station=EAY&purpose_codes=ADULT';
   
     $html= file_get_contents($url,false,$context);
  
     echo$html;
     
 ?>

执行如下:

获取12306的车次与单价的接口_车次查询_09

其他事项:接口get参数中的站点使用的是电报码。每个车站唯一。但是如果送入站名貌似也是可以的。只是那个中文是很多相似的。要以电报码为准。所以你可以做一个资源表,用拼音首字母先让用户录入和选择具体的准确站点的电报码。再查询。这样才可以的。

获取12306的车次与单价的接口_车次查询_10

最终效果预览,再优化优化就可用了。:

获取12306的车次与单价的接口_车次查询_11

 

举报

相关推荐

0 条评论