首页 > 代码库 > 爱帮公交查询之公交线路查询
爱帮公交查询之公交线路查询
今天,想在微信做一个公交查询的功能.到网上找了点资料,觉得爱帮挺好的于是注册了个帐号
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
参数说明
参数 类型 是否可选 意义 备注 city string 否 城市 q string 否 关键字 如:466、1路 with_xys int 是 是否包含坐标点信息 默认为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_num int 结果数量 web_url string 爱帮web站对应url wap_url string 爱帮wap站对应url name string 线路名称 info string 线路信息 包括线路类型、票价、首末班车时间等 stats string 沿途站点 半角分号;(英文分号)分隔 stat_xys string 途径站点经纬度 经度与纬度用半角逗号,(英文逗号)分隔;每组经纬度用半角分号;(英文分号)分隔 xys string 线路坐标 线路本身对应的各个坐标点,经度与纬度用半角逗号,(英文逗号)分隔;每组经纬度用半角分号;(英文分号)分隔 - 程序用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条数据
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。