package com.smartdot.dcu;

/** 
 * java获取新浪天气预报代码 
 */  
import java.io.FileNotFoundException;  
import java.io.IOException;  
import java.io.InputStream;  
import java.io.FileInputStream;  
import java.io.UnsupportedEncodingException;  
import java.net.MalformedURLException;  
import java.net.URL;  
import java.net.URLEncoder;  
import java.util.HashMap;  
import java.util.Map;  

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

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

/** 
 * 解析xml文档,包括本地文档和url 
 * 
 */  
public class CommonsWeatherUtils {  

    InputStream inStream;  
    Element root;  
    public InputStream getInStream() {  
        return inStream;  
    }  
    public void setInStream(InputStream inStream) {  
        this.inStream = inStream;  
    }  

    public Element getRoot() {  
        return root;  
    }  

    public void setRoot(Element root) {  
        this.root = root;  

    }  
    public CommonsWeatherUtils() {  

    }  

    /** 
    * 通过输入流来获取新浪接口信息 
     * @param inStream 
     */  
    public CommonsWeatherUtils(InputStream inStream) {  
        if (inStream != null) {  
            this.inStream = inStream;  
            DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();  
            try {  
                DocumentBuilder domBuilder = domfac.newDocumentBuilder();  
                Document doc = domBuilder.parse(inStream);  
                root = doc.getDocumentElement();  
            } catch (ParserConfigurationException e) {  
                e.printStackTrace();  
            } catch (SAXException e) {  
               e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    public CommonsWeatherUtils(String path) {  
        InputStream inStream = null;  
        try {  
            inStream = new FileInputStream(path);  
        } catch (FileNotFoundException e1) {  
            e1.printStackTrace();  
        }  
        if (inStream != null) {  
            this.inStream = inStream;  
            DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();  
            try {  
                DocumentBuilder domBuilder = domfac.newDocumentBuilder();  
                Document doc = domBuilder.parse(inStream);  
                root = doc.getDocumentElement();  
            } catch (ParserConfigurationException e) {  
                e.printStackTrace();  
            } catch (SAXException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    public CommonsWeatherUtils(URL url) {  
        InputStream inStream = null;  
        try {  
            inStream = url.openStream();  
        } catch (IOException e1) {  
            e1.printStackTrace();  
        }  

        if (inStream != null) {  
            this.inStream = inStream;  
            DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();  
            try {  
                DocumentBuilder domBuilder = domfac.newDocumentBuilder();  
                Document doc = domBuilder.parse(inStream);  
               root = doc.getDocumentElement();  
            } catch (ParserConfigurationException e) {  
                e.printStackTrace();  
            } catch (SAXException e) {  
                e.printStackTrace();  
            } catch (IOException e) {  
                e.printStackTrace();  
            }  
        }  
    }  

    /** 
     *  
     * @param nodes 
     * @return 单个节点多个值以分号分隔 
     */  
    public Map<String, String> getValue(String[] nodes) {  
        if (inStream == null || root==null) {  
            return null;  
        }  

        Map<String, String> map = new HashMap<String, String>();  
        // 初始化每个节点的值为null  
        for (int i = 0; i < nodes.length; i++) {  
            map.put(nodes[i], null);  
        }  

        // 遍历第一节点  
        NodeList topNodes = root.getChildNodes();  
        if (topNodes != null) {  
            for (int i = 0; i < topNodes.getLength(); i++) {  
                Node book = topNodes.item(i);  
                if (book.getNodeType() == Node.ELEMENT_NODE) {  
                    for (int j = 0; j < nodes.length; j++) {  
                        for (Node node = book.getFirstChild(); node != null; node = node.getNextSibling()) {  
                            if (node.getNodeType() == Node.ELEMENT_NODE) {  
                                if (node.getNodeName().equals(nodes[j])) {  
                                    String val = node.getTextContent();  
                                    String temp = map.get(nodes[j]);  
                                    if (temp != null && !temp.equals("")) {  
                                        temp = temp + ";" + val;  
                                    } else {  
                                        temp = val;  
                                    }  
                                    map.put(nodes[j], temp);  
                               }  
                            }  
                        }  
                    }  
                }  
            }  
        }  
        return map;  
    }  


    public String getWeather(String address){
        String weathers = "";
        String addressGBK = "";
        try {
            addressGBK = URLEncoder.encode(address, "GBK");
        } catch (UnsupportedEncodingException e2) {
            e2.printStackTrace();
        }


        String link = "http://php.weather.sina.com.cn/xml.php?city="+addressGBK+"&password=DJOYnieT8234jlsK&day=0";

        URL url;  

        try {  
            url = new URL(link);  
            CommonsWeatherUtils parser = new CommonsWeatherUtils(url); 
            //    城市   白天天气,白天温度,夜晚天气,夜晚温度,白天风向,白天风力,夜晚风向,夜晚风力,污染指数,污染扩散指数
            String[] nodes = {"city","status1","temperature1","status2","temperature2","direction1","power1","direction2","power2","pollution_l","pollution_s"};  
            Map<String, String> map = parser.getValue(nodes);  
            System.out.println(map.get(nodes[0])+" 今天白天:"+map.get(nodes[1])+
                    " 最高温度:"+map.get(nodes[2])+"℃ 今天夜间:"+map.get(nodes[3])+
                    " 最低温度:"+map.get(nodes[4])+"℃ "+map.get(nodes[5])+map.get(nodes[6])+
                    map.get(nodes[7])+map.get(nodes[8])+map.get(nodes[9])+map.get(nodes[10]));
            weathers = map.get(nodes[0])+" 今天白天:"+map.get(nodes[1])+" 最高温度:"+map.get(nodes[2])+"℃ 今天夜间:"+map.get(nodes[3])+" 最低温度:"+map.get(nodes[4])+"℃ ";
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
        } 




        return weathers;
    }



    public static void main(String[] args) { 

        CommonsWeatherUtils cwu = new CommonsWeatherUtils();
        System.out.println(cwu.getWeather("大连"));


        //String link="http://php.weather.sina.com.cn/xml.php?city=%D6%D8%C7%EC&password=DJOYnieT8234jlsK&day=0";  
        //String link = "http://php.weather.sina.com.cn/search.php?city=%B4%F3%C1%AC&dpc=1";
//      String link = "http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0";
//        try {  
//            System.out.println(URLEncoder.encode("北京", "GBK"));  
//        } catch (UnsupportedEncodingException e1) {  
//            // TODO Auto-generated catch block  
//            e1.printStackTrace();  
//        }  
//          
//        URL url;  
//          
//        try {  
//              
//            url = new URL(link);  
//            CommonsWeatherUtils parser = new CommonsWeatherUtils(url);  
//            String[] nodes = {"city","status1","temperature1","status2","temperature2"};  
//            Map<String, String> map = parser.getValue(nodes);  
//            System.out.println(map.get(nodes[0])+" 今天白天:"+map.get(nodes[1])+" 最高温度:"+map.get(nodes[2])+"℃ 今天夜间:"+map.get(nodes[3])+" 最低温度:"+map.get(nodes[4])+"℃ ");  
//        } catch (MalformedURLException e) {  
//            e.printStackTrace();  
//        }  

    }  
}  

 posted on 2016-10-09 11:34  杨成雨  阅读(179)  评论(0编辑  收藏  举报