获取天气预报

最近工作有用到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);        }    }}

你可能感兴趣的:(Web,工作)