首页 > 代码库 > 爱帮公交查询之公交线路查询

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

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

api 页面

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


公交线路查询

  • 说明

    公交线路查询,该接口根据关键字查询匹配的线路。

  • 形式

    http://openapi.aibang.com/bus/lines

    例如:http://openapi.aibang.com/bus/lines?app_key=f41c8afccc586de03a99c86097e98ccb&city=%E5%8C%97%E4%BA%AC&q=42

    参数说明
    参数类型是否可选意义备注
    citystring城市 
    qstring关键字如:466、1路
    with_xysint是否包含坐标点信息默认为0,不包含各个站点和路线的坐标信息,如果为1,则包含
  • 返回内容

    该API返回线路方案。

        
    <?xml version="1.0" encoding="utf-8" ?>
        <root>
            <result_num>13</result_num>
            <web_url>http://bus.aibang.com</web_url>
            <wap_url>http://wap.aibang.com</wap_url>
            <lines>
                <line>
                    <name>42路(东40条桥-广外甘石桥)</name>
                    <info>1-599路; 东四十条桥5:30-23:00|广外甘石桥5:30-23:00; 无人售票线路,单一票制1元,不设找赎。
                持卡乘车普通卡0.40元/次、学生卡0.20元/次。
                    </info>
                    <stats>东四十条桥;张自忠路;宽街路口东;地安门东;北海北门;厂桥路口东;平安里路口南;西四路口西;白塔寺;
                阜成门内;阜成门南;月坛体育场;北京儿童医院西门;礼士路南口;真武庙;天宁寺桥北;广安门北;广外关厢;达官营;
                广外甘石桥
                    </stats>
                    <stat_xys></stat_xys>
                    <xys></xys>
                </line>
                ...
            </lines>
        </root>

    字段类型意义备注
    result_numint结果数量 
    web_urlstring爱帮web站对应url 
    wap_urlstring爱帮wap站对应url 
    namestring线路名称 
    infostring线路信息包括线路类型、票价、首末班车时间等
    statsstring沿途站点半角分号;(英文分号)分隔
    stat_xysstring途径站点经纬度经度与纬度用半角逗号,(英文逗号)分隔;每组经纬度用半角分号;(英文分号)分隔
    xysstring线路坐标线路本身对应的各个坐标点,经度与纬度用半角逗号,(英文逗号)分隔;每组经纬度用半角分号;(英文分号)分隔

  • 程序用java http 请求则返回对应xml 采用dom4j 解析xml 即可得到相应信息

    附上部分代码 
    
    
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条数据