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

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

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

1. 找到车次查询界面。

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

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

接口地址是:铁路客户服务中心https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2023-04-01&leftTicketDTO.from_station=WEI&leftTicketDTO.to_station=EAY&purpose_codes=ADULT

 

 在data里面就是返回结果。

 

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

接口地址为:铁路客户服务中心https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=76000D190208&from_station_no=01&to_station_no=11&seat_types=9MO&train_date=2023-04-01

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

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

用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;
    
?>

执行如下:

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

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

猜你喜欢

转载自blog.csdn.net/chengg0769/article/details/129845321