欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

获取12306余票信息

程序员文章站 2022-04-09 17:47:03
...

本文属于原创文章 ,转载注明出处: http://www.pm-road.com/index.php/2014/09/04/92/

不多说,直接上代码:

请求URL:

https://kyfw.12306.cn/otn/leftTicket/queryT?

或者:

https://kyfw.12306.cn/otn/leftTicket/query?

 

以下是主要代码:

import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.util.Date;

import org.apache.http.client.ClientProtocolException;
import org.junit.Test;

/**
* 火车站查询接口
*
* @ClassName: TrainQueryAPIImpl
* @Description:
* @author LYSY
* @date 2014-8-22 上午11:14:53
*
*/
public class TrainQueryAPIImpl implements ITrainQueryAPI {

@Override
public String getHost() {

String host = Util.KONG;
try{

//此代码是从配置文件中获取12306的请求地址:该地址为上面的请求url
host = Util.loadProperties().getString(“trainhost”);
}catch (Exception e) {
Logs.error(“获取火车票接口主机失败”);
}
return host;
}

@Override
public String getTrainInfo(String city) {
return null;
}
/*
* 与12306相接 查询相应的票数
* @see com.otitan.tgs.api.ITrainQueryAPI#fromStationToStation(java.lang.String, java.lang.String, java.lang.String)
*/
@Override
public String fromStationToStation(String start, String end, String time) {
// https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2014-08-23&leftTicketDTO.from_station=BJP&//leftTicketDTO.to_station=SHH&purpose_codes=ADULT

//这里是要拼出12306所需要的参数信息  ,参数start 和end 是出发地点和终点,

//具体对应值参照:http://www.pm-road.com/index.php/2014/09/01/86/
StringBuffer url = new StringBuffer();
url.append(getHost()).append(“leftTicketDTO.train_date=”)
.append(time)
.append(“&leftTicketDTO.from_station=”)
.append(start)
.append(“&leftTicketDTO.to_station=”)
.append(end)
.append(“&purpose_codes=ADULT”);
try {

//这里使用了一个工具类,该工具类参照:http://www.pm-road.com/index.php/2014/08/22/78/
InputStream is = WebServiceUtil.httpsget(url.toString());

//该方法是将stream 转换成字符串,这里不贴代码,
String info = WebServiceUtil.streamToStr(is,”UTF-8″);
is.close();
Logs.info(“火车票请求成功”);
return info;
} catch (ClientProtocolException e) {
Logs.error(“12306连接不上”);
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

Logs.error(“12306请求失败”);
return null;
}
/*
* 默认没有时间
* @see com.otitan.tgs.api.ITrainQueryAPI#fromStationToStation(java.lang.String, java.lang.String)
*/
@Override
public String fromStationToStation(String start, String end) {

Date now = new Date();

//这里是一个工具类,将时间转成yyyy-MM-dd格式的字符串
String date = Util.dateToStr(now, Util.YEARMONTHDAY);
return fromStationToStation(start, end,date);
}
//这里一个测试方法
@Test
public void test(){
System.out.println(fromStationToStation(“BJP”,”SHH”,”2014-09-01″));
}

}

在程序中调用 :fromStationToStation这个方法即可,对返回的字符串进行json 解析即可。。。。。

 

 

获取12306余票信息
            
    
    博客分类: 12306 12306余票12306余票

12306余票