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 getValue(String[] nodes) { if (inStream == null || root==null) { return null; } Map map = new HashMap(); // 初始化每个节点的值为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 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 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();
// } }
}
新浪天气api
package com.smartdot.dcu;/** * java获取新浪天气预报代码 */ import java.io.FileNotFoundEx
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!