• 中国天气网 JSON接口的城市编码解析及结果


     最近在弄一个Android应用,其中一个功能是天气情况展示,准备使用google的天气API服务(http://www.google.com/ig/api?hl=zh-cn&weather=,,,, ),不想这个接口已经在几个月前关闭服务了。于是各种资料,最终决定使用 中国天气网 的服务。

        中国天气网提供有两种数据格式的接口:

        一、 XML接口

            http://flash.weather.com.cn/wmaps/xml/china.xml

            http://flash.weather.com.cn/wmaps/xml/changsha.xml

            查了好久,发现这个xml接口返回的数据有点乱,果断弃之。

        二、JSON接口

            http://m.weather.com.cn/data/101250101.html

            这个接口返回的是JSON数据,数据格式很好,缺点就是城市编码的问题了。

    下面通过XML接口返回的数据来解析全国各地城市所对应的编码,以便使用。

    代码:

    Java代码  收藏代码
    1. package com.tangqiang.tools;  
    2.   
    3. import java.io.BufferedReader;  
    4. import java.io.InputStreamReader;  
    5. import java.net.URL;  
    6. import java.net.URLConnection;  
    7. import java.util.List;  
    8. import java.util.logging.Logger;  
    9.   
    10. import org.dom4j.Document;  
    11. import org.dom4j.DocumentHelper;  
    12. import org.dom4j.Element;  
    13.   
    14.   
    15. public class CityCode  
    16. {  
    17.   
    18.     private Logger log = Logger.getLogger(CityCode.class.getName());  
    19.   
    20.     public static void main(String[] args) {  
    21.         try {  
    22.             CityCode cc = new CityCode();  
    23.             Document doc = cc.getCityXml();  
    24.             System.out.println(doc.asXML());  
    25.         } catch (Exception e) {  
    26.             e.printStackTrace();  
    27.         }  
    28.     }  
    29.   
    30.     /** 
    31.      * 解析 
    32.      *  
    33.      * @return 
    34.      * @throws Exception 
    35.      */  
    36.     @SuppressWarnings("unchecked")  
    37.     private Document getCityXml() throws Exception {  
    38.         /** 新建一个doc 保存结果 */  
    39.         Document docResult = DocumentHelper.createDocument();  
    40.         Element addElementRoot = DocumentHelper.createElement("china");  
    41.   
    42.         String sUrlChina = "http://flash.weather.com.cn/wmaps/xml/china.xml";  
    43.         String sChinaProvXml = getUrlString(sUrlChina);  
    44.         Document doc = DocumentHelper.parseText(sChinaProvXml);  
    45.   
    46.         Element rootElt = doc.getRootElement(); // 获取根节点  
    47.         log.info("根节点:" + rootElt.getName()); // 拿到根节点的名称  
    48.         /** 取得所有省份 */  
    49.         List<Element> listProv = rootElt.elements("city"); // 获取根节点下的子节点  
    50.         for (int i = 0; i < listProv.size(); i++) {  
    51.             Element elementProv = listProv.get(i);  
    52.             /** 省份名字 */  
    53.             String sProvName = elementProv.attributeValue("pyName");  
    54.             String sProvNameCN = elementProv.attributeValue("quName");  
    55.             /** 添加节点 */  
    56.             Element addElementProv = DocumentHelper.createElement("prov");  
    57.             addElementProv.addAttribute("pyName", sProvName);  
    58.             addElementProv.addAttribute("quName", sProvNameCN);  
    59.   
    60.             try {  
    61.                 log.info("查询省份:" + sProvNameCN + " 下的城市!");  
    62.                 String sUrlProv = "http://flash.weather.com.cn/wmaps/xml/" + sProvName + ".xml";  
    63.                 String sProvXml = getUrlString(sUrlProv);  
    64.                 Document docProv = DocumentHelper.parseText(sProvXml);  
    65.   
    66.                 Element rootEltProv = docProv.getRootElement(); // 获取省份下的跟节点  
    67.                 List<Element> listCity1 = rootEltProv.elements("city");  
    68.                 for (int j = 0; j < listCity1.size(); j++) {  
    69.                     Element elementCity1 = listCity1.get(j);  
    70.                     String sCityName1 = elementCity1.attributeValue("pyName");  
    71.                     String sCityUrl1 = elementCity1.attributeValue("url");  
    72.                     String sCityNameCN1 = elementCity1.attributeValue("cityname");  
    73.                     System.out.println(sCityNameCN1 + ":" + sCityUrl1);  
    74.   
    75.                     Element addElementMainCity = DocumentHelper.createElement("city");  
    76.                     addElementMainCity.addAttribute("pyName", sCityName1);  
    77.                     addElementMainCity.addAttribute("quName", sCityNameCN1);  
    78.                     addElementMainCity.addAttribute("url", sCityUrl1);  
    79.   
    80.                     try {  
    81.                         String sUrlCity1 = "http://flash.weather.com.cn/wmaps/xml/" + sCityName1 + ".xml";  
    82.                         log.info("查询主要城市:" + sCityNameCN1 + " 下的城市!");  
    83.                         String sCityXml = getUrlString(sUrlCity1);  
    84.                         Document docCity1 = DocumentHelper.parseText(sCityXml);  
    85.                         Element rootCity1 = docCity1.getRootElement();  
    86.                         List<Element> listCity2 = rootCity1.elements("city");  
    87.   
    88.                         for (int k = 0; k < listCity2.size(); k++) {  
    89.                             Element elementCity2 = listCity2.get(k);  
    90.                             String sCityName2 = elementCity2.attributeValue("pyName");  
    91.                             String sCityNameCN2 = elementCity2.attributeValue("cityname");  
    92.                             String sCityUrl2 = elementCity2.attributeValue("url");  
    93.                             System.out.println(sCityNameCN2 + ":" + sCityUrl2);  
    94.   
    95.                             Element addElementCity2 = DocumentHelper.createElement("city2");  
    96.                             addElementCity2.addAttribute("pyName", sCityName2);  
    97.                             addElementCity2.addAttribute("quName", sCityNameCN2);  
    98.                             addElementCity2.addAttribute("url", sCityUrl2);  
    99.                             addElementMainCity.add(addElementCity2);  
    100.                         }  
    101.   
    102.                     } catch (Exception e) {  
    103.                         log.info("查询主要城市:" + sCityNameCN1 + " 下的城市失败!");  
    104.                     }  
    105.                     addElementProv.add(addElementMainCity);  
    106.                 }  
    107.             } catch (Exception e) {  
    108.                 log.info("查询省份:" + sProvNameCN + "下的城市失败!");  
    109.             }  
    110.             addElementRoot.add(addElementProv);  
    111.         }  
    112.         docResult.setRootElement(addElementRoot);  
    113.         return docResult;  
    114.     }  
    115.   
    116.     /** 
    117.      * 从url获取xml字符串 
    118.      *  
    119.      * @param sUrl 
    120.      * @return 
    121.      * @throws Exception 
    122.      */  
    123.     private String getUrlString(String sUrl) throws Exception {  
    124.         String sResult = "";  
    125.         StringBuffer sbResult = null;  
    126.         log.info("开始连接Url:" + sUrl);  
    127.         sbResult = new StringBuffer();  
    128.         URL url = new URL(sUrl);  
    129.         URLConnection con = url.openConnection();  
    130.         BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));  
    131.         String sLine = null;  
    132.         while ((sLine = br.readLine()) != null) {  
    133.             sbResult.append(sLine);  
    134.         }  
    135.         sResult = sbResult.toString();  
    136.         log.info("获取到信息:" + sbResult.toString().substring(0, 500));  
    137.         if (sResult.contains("html")) {  
    138.             String sInt = "null";  
    139.             Integer.parseInt(sInt);  
    140.         }  
    141.         return sResult;  
    142.     }  
    143. }  
  • 相关阅读:
    JavaScript要理解闭包先了解词法作用域
    CSS实现放大镜/狙击镜效果
    如何用js让表格的行也能拖动
    如何用Ajax传一个数组数据
    swf自动播放时如何全屏全部显示
    格式化金额数与自动四舍五入
    HTML标签的使用要注意语义化
    一张图理解"Figure", "Axes", "Axis"
    Python的"random"函数的使用(一)
    "sorted()"中的"Key Functions"
  • 原文地址:https://www.cnblogs.com/henuyuxiang/p/3851249.html
Copyright © 2020-2023  润新知