zoukankan      html  css  js  c++  java
  • Java获取yahoo天气预报

    学习闲暇之余,写了个获取yahoo天气预报的java小程序,仅供娱乐。


    首先我们需要获取您需要查询城市对应的代号,我们可以用HashMap来查询,代码如下:

    复制代码
    publicstatic HashMap<String, String> cityCode =new HashMap<String, String>();

    /* 初始化城市代号 */
    privatevoid initCitys() {
    cityCode.put(
    "北京", "0008");
    cityCode.put(
    "天津", "0133");
    cityCode.put(
    "武汉", "0138");
    cityCode.put(
    "杭州", "0044");
    cityCode.put(
    "合肥 ", "0448");
    cityCode.put(
    "上海 ", "0116");
    cityCode.put(
    "福州 ", "0031");
    cityCode.put(
    "重庆 ", "0017");
    cityCode.put(
    "南昌 ", "0097");
    cityCode.put(
    "香港 ", "0049");
    cityCode.put(
    "济南 ", "0064");
    cityCode.put(
    "澳门 ", "0512");
    cityCode.put(
    "郑州 ", "0165");
    cityCode.put(
    "呼和浩特 ", "0249");
    cityCode.put(
    "乌鲁木齐 ", "0135");
    cityCode.put(
    "长沙 ", "0013");
    cityCode.put(
    "银川 ", "0259");
    cityCode.put(
    "广州 ", "0037");
    cityCode.put(
    "拉萨 ", "0080");
    cityCode.put(
    "海口 ", "0502");
    cityCode.put(
    "南京 ", "0100");
    cityCode.put(
    "成都 ", "0016");
    cityCode.put(
    "石家庄 ", "0122");
    cityCode.put(
    "贵阳 ", "0039");
    cityCode.put(
    "太原 ", "0129");
    cityCode.put(
    "昆明 ", "0076");
    cityCode.put(
    "沈阳 ", "0119");
    cityCode.put(
    "西安 ", "0141");
    cityCode.put(
    "长春 ", "0010");
    cityCode.put(
    "兰州 ", "0079");
    cityCode.put(
    "西宁 ", "0236");
    }
    复制代码

      


    接下来我们要创建链接,以获取天气预报的XML文档

    复制代码
    private Document getWeatherXML(String cityCode) throws IOException {
    URL url
    =new URL("http://weather.yahooapis.com/forecastrss?p=CHXX"
    + cityCode +"&u=c");
    URLConnection connection
    = url.openConnection();
    Document Doc
    = stringToElement(connection.getInputStream());
    return Doc;
    }
    复制代码

      


    您也可以选择保存获取的天气XML文档

    复制代码
    /* 保存获取的天气信息XML文档 */
    privatevoid saveXML(Document Doc, String Path) {
    TransformerFactory transFactory
    = TransformerFactory.newInstance();
    Transformer transformer;
    try {
    transformer
    = transFactory.newTransformer();
    DOMSource domSource
    =new DOMSource(Doc);
    File file
    =new File(Path);
    FileOutputStream out
    =new FileOutputStream(file);
    StreamResult xmlResult
    =new StreamResult(out);
    transformer.transform(domSource, xmlResult);
    }
    catch (Exception e) {
    System.out.println(
    "保存文件出错!");
    }
    }
    复制代码

      


    本人获取的一份XML保存如下

    复制代码
    <?xml version="1.0" encoding="UTF-8" ?> 
    -
    <rss xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" version="2.0">
    -
    <channel>
    <title>Yahoo! Weather - Wuhan, CH</title>
    <link>http://us.rd.yahoo.com/dailynews/rss/weather/Wuhan__CH/*http://weather.yahoo.com/forecast/CHXX0138_c.html</link>
    <description>Yahoo! Weather for Wuhan, CH</description>
    <language>en-us</language>
    <lastBuildDate>Sat, 27 Mar 2010 11:00 pm CST</lastBuildDate>
    <ttl>60</ttl>
    <yweather:location city="Wuhan" country="CH" region=""/>
    <yweather:units distance="km" pressure="mb" speed="km/h" temperature="C"/>
    <yweather:wind chill="15" direction="110" speed="6.44"/>
    <yweather:atmosphere humidity="67" pressure="1015.92" rising="0" visibility="9.99"/>
    <yweather:astronomy sunrise="6:19 am" sunset="6:38 pm"/>
    -
    <image>
    <title>Yahoo! Weather</title>
    <width>142</width>
    <height>18</height>
    <link>http://weather.yahoo.com</link>
    <url>http://l.yimg.com/a/i/us/nws/th/main_142b.gif</url>
    </image>
    -
    <item>
    <title>Conditions for Wuhan, CH at 11:00 pm CST</title>
    <geo:lat>30.58</geo:lat>
    <geo:long>114.27</geo:long>
    <link>http://us.rd.yahoo.com/dailynews/rss/weather/Wuhan__CH/*http://weather.yahoo.com/forecast/CHXX0138_c.html</link>
    <pubDate>Sat, 27 Mar 2010 11:00 pm CST</pubDate>
    <yweather:condition code="33" date="Sat, 27 Mar 2010 11:00 pm CST" temp="15" text="Fair"/>
    -
    <description>
    -
    <!--[CDATA[
    <img src="http://l.yimg.com/a/i/us/we/52/33.gif" mce_src="http://l.yimg.com/a/i/us/we/52/33.gif"/><br />
    <b>Current Conditions:</b><br />
    Fair, 15 C<BR />
    <BR /><b>Forecast:</b><BR />
    Sat - Partly Cloudy. High: 18 Low: 9<br />
    Sun - Partly Cloudy. High: 20 Low: 12<br />
    <br />
    <a href="http://us.rd.yahoo.com/dailynews/rss/weather/Wuhan__CH/*http://weather.yahoo.com/forecast/CHXX0138_c.html" mce_href="http://us.rd.yahoo.com/dailynews/rss/weather/Wuhan__CH/*http://weather.yahoo.com/forecast/CHXX0138_c.html">Full Forecast at Yahoo! Weather</a><BR/><BR/>
    (provided by <a href="http://www.weather.com" mce_href="http://www.weather.com" >The Weather Channel</a>)<br/>

    ]]
    -->
    </description>
    <yweather:forecast code="29" date="27 Mar 2010" day="Sat" high="18" low="9" text="Partly Cloudy"/>
    <yweather:forecast code="30" date="28 Mar 2010" day="Sun" high="20" low="12" text="Partly Cloudy"/>
    <guid isPermaLink="false">CHXX0138_2010_03_27_23_00_CST</guid>
    </item>
    </channel>
    </rss>
    -
    <!-- api7.weather.sp1.yahoo.com uncompressed/chunked Sat Mar 27 08:43:16 PDT 2010
    -->
    复制代码

      


    好啦,下面就是解析XML了,您看一下XML文档,如果您了解的话很容易获取其中的信息

    复制代码
    /* 获取天气信息 */
    public String getWeather(String city) {
    String result
    =null;
    try {
    Document doc
    = getWeatherXML(GetWeatherInfo.cityCode.get(city));
    NodeList nodeList
    = doc.getElementsByTagName("channel");
    for (int i =0; i < nodeList.getLength(); i++) {
    Node node
    = nodeList.item(i);
    NodeList nodeList1
    = node.getChildNodes();
    for (int j =0; j < nodeList1.getLength(); j++) {
    Node node1
    = nodeList1.item(j);
    if (node1.getNodeName().equalsIgnoreCase("item")) {
    NodeList nodeList2
    = node1.getChildNodes();
    for (int k =0; k < nodeList2.getLength(); k++) {
    Node node2
    = nodeList2.item(k);
    if (node2.getNodeName().equalsIgnoreCase(
    "yweather:forecast")) {
    NamedNodeMap nodeMap
    = node2.getAttributes();
    Node lowNode
    = nodeMap.getNamedItem("low");
    Node highNode
    = nodeMap.getNamedItem("high");
    Node codeNode
    = nodeMap.getNamedItem("code");
    String day
    ="今天";
    if (result ==null) {
    result
    ="";
    }
    else {
    day
    =" 明天";
    }
    result
    = result
    + day
    +""
    + dictionaryStrings[Integer
    .parseInt(codeNode
    .getNodeValue())]
    +" 最低温度:"+ lowNode.getNodeValue()
    +"℃ 最高温度:"+ highNode.getNodeValue()
    +"";
    }
    }
    }
    }
    }
    saveXML(doc,
    "C:\Users\ygui\Desktop\Weather.xml");
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }
    复制代码

      


    整个程序的代码如下:

    复制代码
    package stwolf.hustbaidu.java.learn.filelist;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.HashMap;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.transform.Transformer;
    import javax.xml.transform.TransformerFactory;
    import javax.xml.transform.dom.DOMSource;
    import javax.xml.transform.stream.StreamResult;
    import org.w3c.dom.Document;
    import org.w3c.dom.NamedNodeMap;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    class GetWeatherInfo {
    publicstatic HashMap<String, String> cityCode =new HashMap<String, String>();
    privatefinal String[] dictionaryStrings = { "龙卷风", "热带风暴", "飓风", "强雷阵雨",
    "雷阵雨", "小雨加雪", "雨加冰雹", "雪加冰雹", "冰雨", "毛毛雨", "冻雨", "阵雨", "阵雨", "小雪",
    "零星小雪", "高吹雪", "", "冰雹", "雨夹雪", "", "", "薄雾", "多烟的", "大风", "有风",
    "寒冷", "阴天", "夜间阴天", "白天阴天", "夜间多云", "白天多云", "夜间清亮", "晴朗", "转晴",
    "转晴", "雨夹冰雹", "", "雷阵雨", "雷阵雨", "雷阵雨", "雷阵雨", "大雪", "阵雪", "大雪",
    "多云", "", "阵雪", "雷雨" };
    public GetWeatherInfo() {
    initCitys();
    }
    /* 初始化城市代号 */
    privatevoid initCitys() {
    cityCode.put(
    "北京", "0008");
    cityCode.put(
    "天津", "0133");
    cityCode.put(
    "武汉", "0138");
    cityCode.put(
    "杭州", "0044");
    cityCode.put(
    "合肥 ", "0448");
    cityCode.put(
    "上海 ", "0116");
    cityCode.put(
    "福州 ", "0031");
    cityCode.put(
    "重庆 ", "0017");
    cityCode.put(
    "南昌 ", "0097");
    cityCode.put(
    "香港 ", "0049");
    cityCode.put(
    "济南 ", "0064");
    cityCode.put(
    "澳门 ", "0512");
    cityCode.put(
    "郑州 ", "0165");
    cityCode.put(
    "呼和浩特 ", "0249");
    cityCode.put(
    "乌鲁木齐 ", "0135");
    cityCode.put(
    "长沙 ", "0013");
    cityCode.put(
    "银川 ", "0259");
    cityCode.put(
    "广州 ", "0037");
    cityCode.put(
    "拉萨 ", "0080");
    cityCode.put(
    "海口 ", "0502");
    cityCode.put(
    "南京 ", "0100");
    cityCode.put(
    "成都 ", "0016");
    cityCode.put(
    "石家庄 ", "0122");
    cityCode.put(
    "贵阳 ", "0039");
    cityCode.put(
    "太原 ", "0129");
    cityCode.put(
    "昆明 ", "0076");
    cityCode.put(
    "沈阳 ", "0119");
    cityCode.put(
    "西安 ", "0141");
    cityCode.put(
    "长春 ", "0010");
    cityCode.put(
    "兰州 ", "0079");
    cityCode.put(
    "西宁 ", "0236");
    }
    private Document getWeatherXML(String cityCode) throws IOException {
    URL url
    =new URL("http://weather.yahooapis.com/forecastrss?p=CHXX"
    + cityCode +"&u=c");
    URLConnection connection
    = url.openConnection();
    Document Doc
    = stringToElement(connection.getInputStream());
    return Doc;
    }
    /* 保存获取的天气信息XML文档 */
    privatevoid saveXML(Document Doc, String Path) {
    TransformerFactory transFactory
    = TransformerFactory.newInstance();
    Transformer transformer;
    try {
    transformer
    = transFactory.newTransformer();
    DOMSource domSource
    =new DOMSource(Doc);
    File file
    =new File(Path);
    FileOutputStream out
    =new FileOutputStream(file);
    StreamResult xmlResult
    =new StreamResult(out);
    transformer.transform(domSource, xmlResult);
    }
    catch (Exception e) {
    System.out.println(
    "保存文件出错!");
    }
    }
    /* 获取天气信息 */
    public String getWeather(String city) {
    String result
    =null;
    try {
    Document doc
    = getWeatherXML(GetWeatherInfo.cityCode.get(city));
    NodeList nodeList
    = doc.getElementsByTagName("channel");
    for (int i =0; i < nodeList.getLength(); i++) {
    Node node
    = nodeList.item(i);
    NodeList nodeList1
    = node.getChildNodes();
    for (int j =0; j < nodeList1.getLength(); j++) {
    Node node1
    = nodeList1.item(j);
    if (node1.getNodeName().equalsIgnoreCase("item")) {
    NodeList nodeList2
    = node1.getChildNodes();
    for (int k =0; k < nodeList2.getLength(); k++) {
    Node node2
    = nodeList2.item(k);
    if (node2.getNodeName().equalsIgnoreCase(
    "yweather:forecast")) {
    NamedNodeMap nodeMap
    = node2.getAttributes();
    Node lowNode
    = nodeMap.getNamedItem("low");
    Node highNode
    = nodeMap.getNamedItem("high");
    Node codeNode
    = nodeMap.getNamedItem("code");
    String day
    ="今天";
    if (result ==null) {
    result
    ="";
    }
    else {
    day
    =" 明天";
    }
    result
    = result
    + day
    +""
    + dictionaryStrings[Integer
    .parseInt(codeNode
    .getNodeValue())]
    +" 最低温度:"+ lowNode.getNodeValue()
    +"℃ 最高温度:"+ highNode.getNodeValue()
    +"";
    }
    }
    }
    }
    }
    saveXML(doc,
    "C:\Users\ygui\Desktop\Weather.xml");
    }
    catch (Exception e) {
    e.printStackTrace();
    }
    return result;
    }
    public Document stringToElement(InputStream input) {
    try {
    DocumentBuilder db
    = DocumentBuilderFactory.newInstance()
    .newDocumentBuilder();
    Document doc
    = db.parse(input);
    return doc;
    }
    catch (Exception e) {
    returnnull;
    }
    }
    }
    publicclass Test {
    publicstaticvoid main(String arg[]) {
    GetWeatherInfo info
    =new GetWeatherInfo();
    String weather
    = info.getWeather("武汉");
    System.out.println(weather);
    }
    }
    复制代码
  • 相关阅读:
    初学微信小程序 TodoList
    设计一个基于svg的涂鸦组件(一)
    基于51单片机的12864驱动
    java 使用xom对象数据序列化为xml、反序列化、Preferences相关操作小案例
    ios UIWebView 播放优酷土豆视频
    VMware Player 使用错误集锦
    Django 使用UEditor
    Entity Framework底层操作封装V2版本号(3)
    cocos2dx笔记1:概述
    oracle10g精简版安装步骤
  • 原文地址:https://www.cnblogs.com/superjt/p/3193332.html
Copyright © 2011-2022 走看看