最近工作有用到web services,而这两天也比较有空,就弄了一个获取天气预报的Util。以前以为这有多难,因为数据来源是个困难。现在用web services的技术,这个就不用管了。说共享也好,说偷也好,总之是达到目的了。网上找了几个提供web services的网站。发现下面这个是相当不错的。 http://www.webxml.com.cn/Webservices/WeatherWebService.asmx 下面就用java把具体的代码写写吧! 这里我采用比较简单的get请求调用,毕竟这也没什么秘密可言,就用最简单的就可以了。 还有,这里很多捕获异常的东西给我去掉了,自己加吧!
public final class WeatherUtil { private static String SERVICES_HOST = "www.webxml.com.cn"; private static String WEATHER_SERVICES_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/"; private static String SUPPORT_CITY_URL = WEATHER_SERVICES_URL + "getSupportCity?byProvinceName=ALL"; private static String WEATHER_QUERY_URL = WEATHER_SERVICES_URL + "getWeatherbyCityName?theCityName="; private WeatherUtil(){} public static InputStream getSoapInputStream(String url) { InputStream is = null;
URL U = new URL(url); URLConnection conn = U.openConnection(); conn.setRequestProperty("Host", SERVICES_HOST); conn.connect(); is = conn.getInputStream(); return is; } //取得支持的城市列表 public static ArrayList<String> getSupportCity() { ArrayList cityList = null; Document doc; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); InputStream is = getSoapInputStream(SUPPORT_CITY_URL); doc = db.parse(is); NodeList nl = doc.getElementsByTagName("string"); int len = nl.getLength(); cityList = new ArrayList<String>(len); for (int i = 0; i < len; i++) { Node n = nl.item(i); String city = n.getFirstChild().getNodeValue(); cityList.add(city); } is.close(); return cityList; } //取得城市的天气 public static ArrayList<String> getWeather(String city) { ArrayList weatherList = null; Document doc; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); dbf.setNamespaceAware(true); DocumentBuilder db = dbf.newDocumentBuilder(); //这里他的编码格式就是这样,我试了几个也没办法。。只好这样混过去了 InputStream is = getSoapInputStream(WEATHER_QUERY_URL + new String(city.getBytes("UTF-8"), "GBK")); doc = db.parse(is); NodeList nl = doc.getElementsByTagName("string"); int len = nl.getLength(); weatherList = new ArrayList<String>(len); for (int i = 0; i < len; i++) { Node n = nl.item(i); String weather = n.getFirstChild().getNodeValue(); weatherList.add(weather); } is.close(); return weatherList; } public static void main(String[] args) throws Exception { ArrayList<String> weatherList = WeatherUtil.getWeather("59287"); // ArrayList<String> weatherList = WeatherUtil.getSupportCity(); for (String weather : weatherList) { System.out.println(weather); } } }
文章来源 mccxj 鼠中无大将的博客 , 文章地址 http://mccxj.javaeye.com/blog/144161
|