爱帮公交查询之公交线路查询

时间:2014-05-10 09:17:24   收藏:0   阅读:755

今天,想在微信做一个公交查询的功能.到网上找了点资料,觉得爱帮挺好的于是注册了个帐号

api 页面

http://www.aibang.com/api/usage


公交线路查询


    附上部分代码 
    
    
package com.xuyw.wx.util;

import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
/**
 * Http工具类
 * 
 * @author xuyw
 * @email xyw10000@163.com
 * @date 2014-05-04
 */
public class HttpUtil {
	/**
	 * UTF-8编码
	 * 
	 * @param source
	 * @return
	 */
	private static String urlEncodeUTF8(String source) {
		String result = source;
		try {
			result = java.net.URLEncoder.encode(source, "UTF-8");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return result;
	}

	/**
	 * 查找某个字符串是否存在
	 * 
	 * @param str
	 *            ,fstr
	 * @return
	 */
	public static boolean isexist(String str, String fstr) {
		return str.indexOf(fstr) == -1 ? false : true;
	}

	/**
	 * URL追加参数
	 * 
	 * @param url
	 *            ,obj [a:1,b:2]
	 * @return
	 */
	public static String appendUrl(String url, String... obj) {
		StringBuilder sbd = new StringBuilder(url);
		if (obj != null && obj.length > 0) {
			if (isexist(url, "?")) {// 存在?
				sbd.append("&");
			} else {
				sbd.append("?");
			}
			for (int i = 0; i < obj.length; i++) {
				String[] temp = obj[i].split(":");
				sbd.append(temp[0]);
				sbd.append("=");
				sbd.append(urlEncodeUTF8(temp[1]));
				sbd.append("&");

			}
			sbd.setLength(sbd.length() - 1);// 删掉最后一个
		}
		return sbd.toString();
	}

	/**
	 * 发送http请求取得返回的输入流
	 * 
	 * @param requestUrl
	 *            请求地址
	 * @return InputStream
	 */
	public static InputStream httpRequest(String requestUrl) {
		InputStream inputStream = null;
		try {
			URL url = new URL(requestUrl);
			HttpURLConnection httpUrlConn = (HttpURLConnection) url
					.openConnection();
			httpUrlConn.setDoInput(true);
			httpUrlConn.setRequestMethod("GET");
			httpUrlConn.connect();
			// 获得返回的输入流
			inputStream = httpUrlConn.getInputStream();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return inputStream;
	}
}

package com.xuyw.wx.util;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.xuyw.wx.config.Config;

/**
 * 爱帮工具类
 * 
 * @author xuyw
 * @email xyw10000@163.com
 * @date 2014-05-04
 */
public class AiBangBusUtil {
	private static final String BUSLINE = "http://openapi.aibang.com/bus/lines";// 公交线路url

	/**
	 * 公交线路查询
	 * 
	 * @return
	 * @throws Exception
	 */
	public static List getBusLine(String city, String q) throws Exception {
         List list = new ArrayList();
		// app_key爱帮key
		// city城市
		// q 如:466、1路
		// with_xys可无 默认为0,不包含各个站点和路线的坐标信息,如果为1,则包含
		String url = HttpUtil.appendUrl(BUSLINE,
				"app_key:" + Config.AIBANG_KEY, "city:" + city, "q:" + q,"with_xys:"+"1");
		// 使用dom4j解析xml字符串
		SAXReader reader = new SAXReader();
		InputStream inputStream = HttpUtil.httpRequest(url);
		Document document = reader.read(inputStream);
		// 得到xml根元素
		Element root = document.getRootElement();
		// result_num表示搜索到的公交路线数
		String result_num = root.element("result_num").getText();
		if (!"0".equals(result_num)) {
			// 获取根节点下的子节点lines
			Iterator lines = root.element("lines").elementIterator();
			while(lines.hasNext()){
				Element line = (Element) lines.next();
				Map map = new HashMap();
				map.put("name", line.elementText("name"));//线路名称
				map.put("info", line.elementText("info"));//线路信息
				map.put("stats", line.elementText("stats"));//沿途站点
				map.put("stat_xys", line.elementText("stat_xys"));//途径站点经纬度
				map.put("xys", line.elementText("xys"));//线路坐标
				list.add(map);
			}
		}
		return list;
	}

	public static void main(String[] args) throws Exception {
		List list = AiBangBusUtil.getBusLine("南昌", "209");
		for (int i = 0; i < list.size(); i++) {
			Map<Object, Object> map = (Map<Object, Object>) list.get(i);
			for (Map.Entry<Object, Object> entry : map.entrySet()) {
				 System.out.println(entry.getKey() + " : " + entry.getValue());
			}
		}
	}
}

将返回xml解析添加到list中 测试使用控制台输出

 ok 返回2条数据

bubuko.com,布布扣

爱帮公交查询之公交线路查询,布布扣,bubuko.com

原文:http://blog.csdn.net/xuyw10000/article/details/24989249

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!