基于php的12306火车票查询接口调用代码实例
1. 简介
12306是中国铁路总公司的官方网站,为旅客提供火车票购买、查询等服务。然而,使用12306网站查询火车票信息相对繁琐,为了方便开发者调用和获取火车票信息,可以通过基于php的12306火车票查询接口进行快速查询。
2. 使用API调用技术查询火车票信息
2.1 获取火车票查询接口
首先,我们需要获取12306火车票查询接口的地址。可以通过`https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=日期&leftTicketDTO.from_station=出发站编码&leftTicketDTO.to_station=到达站编码&purpose_codes=ADULT`来获取火车票查询结果。
其中,train_date为查询日期,格式为`yyyy-mm-dd`;from_station为出发站编码,to_station为到达站编码,可以通过12306网站或其他查询工具获取;purpose_codes为查询类型,ADULT表示成人票。
2.2 调用API查询火车票信息
为了方便使用和代码维护,我们可以封装一个函数来调用火车票查询接口,并返回查询结果。下面是一个示例的php代码:
function queryTrainTickets($date, $fromStation, $toStation) {
$url = "https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={$date}&leftTicketDTO.from_station={$fromStation}&leftTicketDTO.to_station={$toStation}&purpose_codes=ADULT";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
$date = "2021-01-01";
$fromStation = "BJP";
$toStation = "SHH";
$result = queryTrainTickets($date, $fromStation, $toStation);
echo $result;
以上代码中的`queryTrainTickets`函数接受日期、出发站编码和到达站编码作为参数,通过调用curl库来发送HTTP请求,并返回查询结果。我们可以根据需要对查询结果进行解析和展示。
3. 解析查询结果
12306火车票查询接口返回的结果是一个json格式的字符串,我们需要对其进行解析才能获取到具体的火车票信息。以下是一个示例代码,用于解析查询结果:
$result = json_decode($result, true);
if ($result['status']) {
$data = $result['data'];
foreach ($data['result'] as $ticket) {
$ticket = explode("|", $ticket);
$trainNumber = $ticket[3]; // 火车车次
$startTime = $ticket[8]; // 出发时间
$endTime = $ticket[9]; // 到达时间
$duration = $ticket[10]; // 历时
$price = $ticket[32]; // 票价
// 输出火车票信息
echo "车次: {$trainNumber},出发时间: {$startTime},到达时间: {$endTime},历时: {$duration},票价: {$price}";
}
} else {
echo "查询失败,请重试!";
}
解析查询结果后,我们可以根据需求对结果进行处理和展示。上述代码中,我们提取了火车车次、出发时间、到达时间、历时和票价等信息,并将其输出到浏览器端。
4. 总结
通过上述代码示例,我们可以快速使用php调用12306火车票查询接口,实现火车票的查询功能。需要注意的是,12306火车票查询接口可能会有一定的限制和验证码机制,因此在实际应用中需要做好请求频率的控制和验证码的处理。
在使用接口时,我们还可以通过设置请求头来模拟浏览器访问,例如设置User-Agent等信息,以减少被服务器封禁的可能性。
综上所述,使用基于php的12306火车票查询接口调用代码可以方便快捷地查询火车票信息,对于开发者和用户来说都提供了更好的使用体验。