过去很多做聚合接口的。时间长了就不能用了。现在还有几个聚合接口。只是要收费。
有时我们只需要简单的查一下。所以还是12306接口好一点。
1. 找到车次查询界面。
2. chome浏览器。按F12进入调试状态。如图切换到network标签页。
3. 点查询按钮,抓取接口。
在data里面就是返回结果。
4. 车次界面没有直接显示单价。单击车次后面的下拉时,才显示价格。抓取接口:
后记:编程如何实现呢。请看下面的:
首先,如果直接用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参数中的站点使用的是电报码。每个车站唯一。但是如果送入站名貌似也是可以的。只是那个中文是很多相似的。要以电报码为准。所以你可以做一个资源表,用拼音首字母先让用户录入和选择具体的准确站点的电报码。再查询。这样才可以的。
最终效果预览,再优化优化就可用了。: