webservice引用天氣預報實例

import java.io.IOException; 
import java.io.InputStream; 
import java.io.UnsupportedEncodingException; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.util.ArrayList; 
import java.util.List; 


import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 


import org.w3c.dom.DOMException; 
import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 


public class WeatherUtil { 
private static String SERVICES_HOST = "www.webxml.com.cn"; 
    private static String WEATHER_SERVICES_URL = "http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/"; 
    private static String PROVINCE_CODE_URL = WEATHER_SERVICES_URL  
                                              + "getRegionProvince"; 
    private static String CITY_CODE_URL = WEATHER_SERVICES_URL 
                                          + "getSupportCityString?theRegionCode="; 
    private static String WEATHER_QUERY_URL = WEATHER_SERVICES_URL 
                                              + "getWeather?theUserID=&theCityCode="; 
     
     
    private WeatherUtil(){} 
     
    public static void main(String[] args) throws Exception{ 
    int provinceCode = getProvinceCode("河北");    //3119 
    int cityCode = getCityCode(provinceCode, "石家莊");    //974 
    List<String> weatherList = getWeather(cityCode); 
        for(String weather:weatherList){ 
           System.out.println(weather); 
        } 
    } 
     
    public static int getProvinceCode(String provinceName){ 
        Document document; 
        DocumentBuilderFactory documentBF = DocumentBuilderFactory.newInstance(); 
        documentBF.setNamespaceAware(true); 
        int provinceCode = 0; 
        try{ 
DocumentBuilder documentB = documentBF.newDocumentBuilder(); 
InputStream inputStream = getSoapInputStream(PROVINCE_CODE_URL);    //具體webService相關 
document = documentB.parse(inputStream); 
NodeList nodeList = document.getElementsByTagName("string");    //具體webService相關 
int len = nodeList.getLength(); 
for(int i = 0; i < len; i++){ 
Node n = nodeList.item(i); 
String result = n.getFirstChild().getNodeValue(); 
String[] address = result.split(","); 
String pName = address[0]; 
String pCode = address[1]; 
if(pName.equalsIgnoreCase(provinceName)){ 
provinceCode = Integer.parseInt(pCode); 
}  
} 
inputStream.close(); 
}catch(DOMException e){ 
e.printStackTrace(); 
}catch(ParserConfigurationException e){ 
e.printStackTrace(); 
}catch (SAXException e){ 
e.printStackTrace(); 
}catch(IOException e){ 
e.printStackTrace(); 
} 
return provinceCode; 
    } 
     
    public static int getCityCode(int provinceCode, String cityName){ 
        Document doc; 
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
        dbf.setNamespaceAware(true); 
        int cityCode = 0; 
        try{ 
DocumentBuilder db = dbf.newDocumentBuilder(); 
InputStream is = getSoapInputStream(CITY_CODE_URL + provinceCode);    //具體webService相關 
doc = db.parse(is); 
NodeList nl = doc.getElementsByTagName("string");    //具體webService相關 
int len = nl.getLength(); 
for(int i = 0; i < len; i++){ 
Node n = nl.item(i); 
String result = n.getFirstChild().getNodeValue(); 
String[] address = result.split(","); 
String cName = address[0]; 
String cCode = address[1]; 
if(cName.equalsIgnoreCase(cityName)){ 
cityCode = Integer.parseInt(cCode); 
} 
} 
is.close(); 
}catch(DOMException e){ 
e.printStackTrace(); 
}catch(ParserConfigurationException e){ 
e.printStackTrace(); 
}catch (SAXException e){ 
e.printStackTrace(); 
}catch(IOException e) { 
e.printStackTrace(); 
} 
return cityCode; 
    } 
     
    public static InputStream getSoapInputStream(String url){ 
        InputStream inputStream = null; 
        try{ 
URL urlObj = new URL(url); 
URLConnection urlConn = urlObj.openConnection(); 
urlConn.setRequestProperty("Host", SERVICES_HOST);    //具體webService相關 
urlConn.connect(); 
inputStream = urlConn.getInputStream(); 
}catch(MalformedURLException e){ 
e.printStackTrace(); 
}catch(IOException e){ 
e.printStackTrace(); 
} 
        return inputStream; 
    } 
     
    public static List<String> getWeather(int cityCode){ 
        List<String> weatherList = new ArrayList<String>(); 
        Document document; 
        DocumentBuilderFactory documentBF = DocumentBuilderFactory.newInstance(); 
        documentBF.setNamespaceAware(true); 
        try{ 
DocumentBuilder documentB = documentBF.newDocumentBuilder(); 
InputStream inputStream = getSoapInputStream(WEATHER_QUERY_URL + cityCode); 
document = documentB.parse(inputStream); 
NodeList nl = document.getElementsByTagName("string"); 
int len = nl.getLength(); 
for(int i = 0; i < len; i++){ 
   Node n = nl.item(i); 
   String weather = n.getFirstChild().getNodeValue(); 
   weatherList.add(weather); 
} 
inputStream.close(); 
}catch(UnsupportedEncodingException e){ 
e.printStackTrace(); 
}catch (DOMException e){ 
e.printStackTrace(); 
}catch (ParserConfigurationException e){ 
e.printStackTrace(); 
}catch(SAXException e){ 
e.printStackTrace(); 
} catch (IOException e){ 
e.printStackTrace(); 
} 
        return weatherList; 
    } 
     
} 

發佈了28 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章