精华内容
下载资源
问答
  • 获得天气预报信息

    2011-10-10 15:07:23
    这是一个能获得实时天气的小程序,并显示在控制台界面上。使用VC6.0开发。
  • 主要介绍了java调用中国天气网api获得天气预报信息的方法,可实现调用温度、风力风向及近期天气状况等功能,具有一定参考借鉴价值,需要的朋友可以参考下
  • java 获得天气预报信息

    千次阅读 2015-04-26 21:46:56
    java 获得天气预报信息 最近项目中需要增加天气预报功能,网上给的资料有很多缺陷比如 1. 有些小网站提供的webservers本身就不稳定不能长期使用。 2. 还有一些网站限制访问次数。 3. 再有就是花钱买服务。 ...

    java 获得天气预报信息


    最近项目中需要增加天气预报功能,网上给的资料有很多缺陷比如

    1.       有些小网站提供的webservers本身就不稳定不能长期使用。

    2.       还有一些网站限制访问次数。

    3.       再有就是花钱买服务。

     

    根据以上几点只能放弃使用第三方的webservers,由此我们只能找个信得过的提供天气预报的网站抓取页面信息。

    接下来我们以中央气象台为例实现从请求到数据解析的过程。

     

    1.       浏览http://www.nmc.gov.cn/ 发现一个搜索功能

     

    做过网页的人都知道通过表单提交城市名字,那我们去看看具体提交到什么地方呢。

     

    在这个from表单中我们发现了什么?对有action 和 keys 这都知道是什么意思我就不废话了。

    最终我们得到一个url : http://www.nmc.gov.cn/search_result.php?keys=城市名字

    哈哈,这就是我们获得天气预报的关键。

     

    2.       通过程序访问url.

    以下是使用HttpClient的例子

    HttpClient client = new HttpClient();//实例

    String url="http://www.nmc.gov.cn//search_result.php?keys="+city;

    method =  new GetMethod(url);//通过Get方式访问

    httpstatus = client.executeMethod(method);

    if(httpstatus==200)//200表示成功

    {

    //获得响应转码为GBK,否则中文会乱码

    String  result=newString

    (method.getResponseBodyAsString().getBytes("iso-8859-1"),"GBK");

    }

     

    用上面的程序访问你会发现报错了 Invalid query  ;这里我们需要将城市名字转码

     

    String url="http://www.nmc.gov.cn//search_result.php?

    keys="+URLEncoder.encode(city,”GBK”);

     

    这样在url中中文就是转码后的不会出现乱码。

     

    3.       解析数据

    以北京为例提交后网页信息为:

     

     

    对应的页面中的代码为:

     

    至此我们就可以获得天气信息了。。。。解析的代码如下:

     

            public  void ParaseHtml(String html)

        {

     

           String climate = ParaseWeatherInfo(html,"天气");

           String temperature = ParaseWeatherInfo(html,"气温");

           String wind = ParaseWeatherInfo(html,"风");

           String barometric = ParaseWeatherInfo(html,"气压");

          

           log.debug("天气:"+climate +"/ 气温 :"+temperature +"/ 风 "+wind +"/ 气压"+barometric);

        }

        public  String ParaseWeatherInfo(String str,String word)

        {

           String w = null;

           String st = "w365line1";

           //System.err.println(str);

           int a = str.indexOf(st);

           if(a!= -1)

           {

               String div1 = "<div";

               String div2 = "</div>";

               String keyword = ":";

               int d1 = str.lastIndexOf(div1, a);

               int d2 = str.indexOf(div2, a);

               if(d2 != -1)

               {

                  String str4 = null;

                  String str2 = str.substring(d1, d2+div2.length());

                  if(str2.indexOf(word) !=-1)

                  {

                      str4 = filerStr(str2,word,"");

                      int k1 = str4.indexOf(keyword);

                      str4 = str4.substring(k1+1,str4.length()).trim();

                      return str4;

                  }  

                  else

                  {

                      String s5 = str.replace(str2, "");

                      w = ParaseWeatherInfo(s5,word);

                      return w;

                  }

               }

           }

          

           return w;

        }

        public  String filerStr(String html,String word,String replacement)

        {   

        try{

            if(replacement==null)

                replacement = "";

            String   str=html; 

                String   str1="(<[^>]*>)|(&nbsp;)"; 

                Pattern   p=Pattern.compile(str1); 

                Matcher   m=p.matcher(str); 

                boolean   f=m.find(); 

                StringBuffer   sb=new   StringBuffer();  

                while(f)   { 

              

                    m.appendReplacement(sb,replacement); 

                    f=m.find(); 

                } 

                m.appendTail(sb);

               

                return sb.toString();

           

        }

        catch(Exception e)

        {

           

        }

       

        return html;

        }

     

    抓取北京的天气信息:

           String html = WeatherUtil2.getInstance().getNMCRespones("北京");

           WeatherUtil2.getInstance().ParaseHtml(html);

     

    天气:多云/ 气温 :30 ℃/ 风 西南风,3级,4米/秒/ 气压1001.8hPa

     
     
    ===================
    java 获取天气预报实现代码

    最简单的办法是申请一个yahoo dev 的key ,然后就可以通过 GeoPlanet api 来查询相应地点的WOEID了。用的是旧的p 参数传递地点代码,不过最新的api文档里面只对w参数作了

    说明,因此这里我就用WOEID了。不想注册申请key,还是自己折腾吧。下载最新的 GeoPlanet Data ,解压出来有这些个文件:geoplanet_places_[version].tsv: the WOEID, the

    placename, and the WOEID of its parent entitygeoplanet_aliases_[version].tsv: alternate names in multiple languages indexed against the

    WOEIDgeoplanet_adjacencies_[version].tsv: the entities neighboring each WOEIDgeoplanet_changes_[version].tsv: the list of removed WOEIDs and their

    replacement WOEID mappings
     这里我只取 geoplanet_places_7.6.0.tsv ,用EmEditor 打开,把 中国 地区的 COPY 出到另外一个文件Chinaplaces.tsv .
    这个tsv 文件是用tab分隔字段的,places文件的字段有:WOE_ID ISO Name Language PlaceType Parent_ID
     
    public static HashMap<String, String> cityCode = new HashMap<String, String>();    /* 初始化城市代号 */private void 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文档 */    private void 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) {                       

       (www.111cn.net)         result = "";                                } else {                                    day = "n明天";                            

       }                                result = result                                        + day                                        + " "                

                           + dictionaryStrings[Integer                                                .parseInt(codeNode                                         

                  .getNodeValue())]                                        + "t最低温度:" + lowNode.getNodeValue()                                        + "℃

    t最高温度:" + highNode.getNodeValue()                                        + "℃ ";                            }                        }                 

      }                }            }            saveXML(doc, "C:UsersyguiDesktopWeather.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 {    public static HashMap<String, String> cityCode = new HashMap<String, String>();   

    private final String[] dictionaryStrings = { "龙卷风", "热带风暴", "飓风", "强雷阵雨",            "雷阵雨", "小雨加雪", "雨加冰雹", "雪加冰雹", "冰雨", "毛毛

    雨", "冻雨", "阵雨", "阵雨", "小雪",            "零星小雪", "高吹雪", "雪", "冰雹", "雨夹雪", "尘", "雾", "薄雾", "多烟的", "大风", "有风",            "寒

    冷", "阴天", "夜间阴天", "白天阴天", "夜间多云", "白天多云", "夜间清亮", "晴朗", "转晴",            "转晴", "雨夹冰雹", "热", "雷阵雨", "雷阵雨", "雷阵雨", "

    雷阵雨", "大雪", "阵雪", "大雪",            "多云", "雷", "阵雪", "雷雨" };    public GetWeatherInfo() {        initCitys();    }    /* 初始化城市代号 */   

    private void 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文档 */    private void 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 = "n明天";                                }          

                         result = result                                        + day                                        + " "                               

            + dictionaryStrings[Integer                                                .parseInt(codeNode                                                       

    .getNodeValue())]                                        + "t最低温度:" + lowNode.getNodeValue()                                        + "℃ t最高温度:" +

    highNode.getNodeValue()                                        + "℃ ";                            }                        }                    }           

        }            }            saveXML(doc, "C:UsersyguiDesktopWeather.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) {            return

    null;        }    }}public class Test {    public static void main(String arg[]) {        GetWeatherInfo info = new GetWeatherInfo();        String weather =

    info.getWeather("武汉");        System.out.println(weather);    }}

    from:http://www.111cn.net/jsp/Java/39375.htm
     

     ====================

    JAVA Webservices 实现天气预报

     

    http://www.webxml.com.cn/Webservices/WeatherWebService.asmx

    下面就用java把具体的代码写写吧!
    这里我采用比较简单的get请求调用,毕竟这也没什么秘密可言,就用最简单的就可以了。
    还有,这里很多捕获异常的东西给我去掉了,自己加吧!

     

    {   
    private static String SERVICES_HOST = "www.webxml.com.cn";
    private static String WEATHER_SERVICES_URL = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/";
    private static String SUPPORT_CITY_URL = WEATHER_SERVICES_URL
    + "getSupportCity?byProvinceName=ALL";
    private static String WEATHER_QUERY_URL = WEATHER_SERVICES_URL
    + "getWeatherbyCityName?theCityName=";
    private WeatherUtil(){}
    public static InputStream getSoapInputStream(String url)
    {
    InputStream is = null;

    URL U = new URL(url);
    URLConnection conn = U.openConnection();
    conn.setRequestProperty("Host", SERVICES_HOST);
    conn.connect();
    is = conn.getInputStream();
    return is;
    }
    //取得支持的城市列表
    public static ArrayList<String> getSupportCity()
    {
    ArrayList cityList = null;
    Document doc;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputStream is = getSoapInputStream(SUPPORT_CITY_URL);
    doc = db.parse(is);
    NodeList nl = doc.getElementsByTagName("string");
    int len = nl.getLength();
    cityList = new ArrayList<String>(len);
    for (int i = 0; i < len; i++)
    {
    Node n = nl.item(i);
    String city = n.getFirstChild().getNodeValue();
    cityList.add(city);
    }
    is.close();
    return cityList;
    }
    //取得城市的天气
    public static ArrayList<String> getWeather(String city)
    {
    ArrayList weatherList = null;
    Document doc;
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    DocumentBuilder db = dbf.newDocumentBuilder();
    //这里他的编码格式就是这样,我试了几个也没办法。。只好这样混过去了
    InputStream is = getSoapInputStream(WEATHER_QUERY_URL
    + new String(city.getBytes("UTF-8"), "GBK"));
    doc = db.parse(is);
    NodeList nl = doc.getElementsByTagName("string");
    int len = nl.getLength();
    weatherList = new ArrayList<String>(len);
    for (int i = 0; i < len; i++)
    {
    Node n = nl.item(i);
    String weather = n.getFirstChild().getNodeValue();
    weatherList.add(weather);
    }
    is.close();
    return weatherList;
    }

    public static void main(String[] args) throws Exception
    {
    ArrayList<String> weatherList = WeatherUtil.getWeather("59287");
    // ArrayList<String> weatherList = WeatherUtil.getSupportCity();
    for (String weather : weatherList)
    {
    System.out.println(weather);
    }
    }
    }

     

    展开全文
  • 根据WebService服务获得天气预报信息
  • 获取天气预报信息

    2016-03-08 13:16:30
    获取天气预报信息

    客户端文件weather.html

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    	   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
     <head>
      <title></title>
      <meta http-equiv="Content-Type" content="text/html;charset=GBK" />
      <script type="text/javascript">
      	function f1(){
      		//创建对象
      		//判断用户的浏览器,决定使用何种方式Ajax对象
      		if(typeof ActiveXObject != "undefined"){
      			var version = ['Msxm12.XMLHTTP.6.0','Msxm12.XMLHTTP.5.0','Msxm12.XMLHTTP.3.0','Msxm12.XMLHTTP','Microsoft.XMLHTTP'];
      			for(var i =0;i<=version.length;i++){
      				try{
      					var obj = new ActiveXObject(version[i]);
      					if(typeof obj != "undefined"){
      						break;
      					}
      				}
      				catch(ex){}
      			}
      		}else{
      			var obj = new XMLHttpRequest();
      		}
      		
      		//感知Ajax状态
      		obj.onreadystatechange = function(){
      			if(obj.readyState==4 && obj.status==200){
      				//接收服务器返回的JSON格式的天气预报信息
      				eval(" var info ="+obj.responseText);
      				var ss="";
      				//拼接获得的天气信息字符串
      				ss += "地址:"+info.weatherinfo.city+"<br />";
      				ss += "温度:"+info.weatherinfo.temp+"<br />";
      				ss += "风向:"+info.weatherinfo.WD+"<br />";
      				//将天气信息字符串写入到HTML页面中
      				document.getElementById("result").innerHTML = ss;
      			}
      		}
      		
      		//创建一个http请求,并设置“请求地址”
      		obj.open("get","./weather.php");
      		//发送请求
      		obj.send();
      	}
      </script>
     </head>
     <body>
     	<h2>Ajax通过JSON接口获取天气预报信息</h2>
     	<div id="result"></div>
     	<input type="button" οnclick="f1()" value="触发天气" />
     </body>
    </html>
    

    服务器端weather.php

    <?php
    
    
    //定义一个JSON接口的天气预报地址字符串
    $url = "http://www.weather.com.cn/data/sk/101010100.html";
    //将$url地址中的天气信息读入到一个字符串
    $weatherinfo = file_get_contents($url);
    //输出获得的JSON格式的天气信息
    echo $weatherinfo;
    ?>
    


    展开全文
  • 通过wcf服务调取气象局信息获得天气预报
  • 天气预报信息

    2017-08-19 17:22:38
    不同地区需要显示该地区对应的天气信息 获得访问用户的ip地址信息,通过ip...www.tianqi.com网站已经把 ip/城市/编码 的关系都给处理好了,可以直接调用获得城市对应的天气信息。 Title //利用ajax调用天气

    不同地区需要显示该地区对应的天气信息

    获得访问用户的ip地址信息,通过ip地址获得其对应的城市信息

    城市信息获得出来还要获得城市的编码信息

    ip------->城市-------》编码

    www.tianqi.com网站已经把 ip/城市/编码 的关系都给处理好了,可以直接调用获得城市对应的天气信息。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script type="text/javascript">
            //利用ajax调用天气信息
            window.onload = function () {
                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function () {
                    if(xhr.readyState == 4){
                        eval("var info=" + xhr.responseText);
                        var s = "";
                        s += "地址:" + info.weatherinfo.city + "<br/>";
                        s += "温度:" + info.weatherinfo.temp + "<br/>";
                        s += "风向:" + info.weatherinfo.WD + "<br/>";
                        document.getElementById('result').innerHTML = s;
                    }
                }
                xhr.open('get', './weather.php');
                xhr.send(null);
            }
        </script>
        <style type="text/css">
    
        </style>
    </head>
    <body>
        <h2>网站首页面(或得天气信息)</h2>
        <div id="result"></div>
        <iframe width="420" scrolling="no" height="60" frameborder="0" allowtransparency="true" src="http://i.tianqi.com/index.php?c=code&id=12&color=%2300B0F0&icon=1&num=1&site=13"></iframe>
    </body>
    </html>
    展开全文
  • 天气预报

    2017-05-19 14:04:22
    查询天气预报在APP中常用的一个常用功能,本文实例讲述了java调用中国天气网api获得天气预报信息的方法。分享给大家供大家参考。 step1:选择本文所示例的接口"全国天气预报接口" 聚合数据url:...

    用Java实现全国天气预报的api接口调用示例

    作者:silk 字体:[增加 减小] 类型:转载 时间:2016-10-13 我要评论

    查询天气预报在APP中常用的一个常用功能,本文实例讲述了java调用中国天气网api获得天气预报信息的方法。分享给大家供大家参考。

    step1:选择本文所示例的接口"全国天气预报接口" 聚合数据url:http://www.juhe.cn/docs/api/id/39/aid/87

    step2:每个接口都需要传入一个参数key,相当于用户的令牌,所以第一步你需要申请一个key.

    step3:学过java的同学们都知道,当我们对一个类或者方法不明白其意图和思想时,我们可以去查看文档,这里也不例外,而且对于英文不是特别好的同学来说很幸运的是,聚合网站上的文档都是中文版本的,比起阅读java源码里的英文文档应该轻松很多.全国天气预报接口下面有六个子接口,打开第一个接口链接,看文档发现需要传入一个城市名或者城市ID参数,这个参数我们可以通过第六个子接口获取(接口之间参数的调用类似于java中方法之间的调用),即支持城市列表获取.所以示例中我们先调用这个接口.调用接口涉及到请求网络资源的问题,这里我封装了一个工具类,包含GET和POST两种方法.

    step4:代码如下:

    Demo1:网络访问工具类(封装get和post方法)

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    package juheAPI;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Map;
    /**
     * 网络访问工具类
     * @author silk
     *
     */
    public class PureNetUtil {
     /**
      * get方法直接调用post方法
      * @param url 网络地址
      * @return 返回网络数据
      */
     public static String get(String url){
      return post(url,null);
     }
     /**
      * 设定post方法获取网络资源,如果参数为null,实际上设定为get方法
      * @param url 网络地址
      * @param param 请求参数键值对
      * @return 返回读取数据
      */
     public static String post(String url,Map param){
      HttpURLConnection conn=null;
      try {
       URL u=new URL(url);
       conn=(HttpURLConnection) u.openConnection();
       StringBuffer sb=null;
       if(param!=null){//如果请求参数不为空
        sb=new StringBuffer();
        /*A URL connection can be used for input and/or output. Set the DoOutput
         * flag to true if you intend to use the URL connection for output,
         * false if not. The default is false.*/
        //默认为false,post方法需要写入参数,设定true
        conn.setDoOutput(true);
        //设定post方法,默认get
        conn.setRequestMethod("POST");
        //获得输出流
        OutputStream out=conn.getOutputStream();
        //对输出流封装成高级输出流
        BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(out));
        //将参数封装成键值对的形式
        for(Map.Entry s:param.entrySet()){
         sb.append(s.getKey()).append("=").append(s.getValue()).append("&");
        }
        //将参数通过输出流写入
        writer.write(sb.deleteCharAt(sb.toString().length()-1).toString());
        writer.close();//一定要关闭,不然可能出现参数不全的错误
        sb=null;
       }
       conn.connect();//建立连接
       sb=new StringBuffer();
       //获取连接状态码
       int recode=conn.getResponseCode();
       BufferedReader reader=null;
       if(recode==200){
        //Returns an input stream that reads from this open connection
        //从连接中获取输入流
        InputStream in=conn.getInputStream();
        //对输入流进行封装
        reader=new BufferedReader(new InputStreamReader(in));
        String str=null;
        sb=new StringBuffer();
        //从输入流中读取数据
        while((str=reader.readLine())!=null){
         sb.append(str).append(System.getProperty("line.separator"));
        }
        //关闭输入流
        reader.close();
        if (sb.toString().length() == 0) {
         return null;
        }
        return sb.toString().substring(0,
          sb.toString().length() - System.getProperty("line.separator").length());
       }
      } catch (Exception e) {
       e.printStackTrace();
       return null;
      }finally{
       if(conn!=null)//关闭连接
        conn.disconnect();
      }
      return null;
     }
      
    }

    Demo2:调用获取城市列表接口示例

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    package juheAPI;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    /**
     * 获取城市列表
     * 全国天气预报接口调用JAVA示例
     *  dtype  string N 返回数据格式:json或xml,默认json
     *  key  string  Y 你申请的key
     * @author silk
     *
     */
    public class GetCityList {
     /**
      * 调用获取城市列表接口,返回所有数据
      * @return 返回接口数据
      */
     public static String excute(){
      String url="http://v.juhe.cn/weather/citys?key=***a7558b2e0bedaa19673f74a6809ce";//接口URL
      //PureNetUtil是一个封装了get和post方法获取网络请求数据的工具类
      return PureNetUtil.get(url);//使用get方法
     }
     /**
      * 调用接口返回数据后,解析数据,根据输入城市名得到对应ID
      * @param cityName 城市名称
      * @return 返回对应ID
      */
     public static String getIDBycityName(String cityName) {
      String result=excute();//返回接口结果,得到json格式数据
      if(result!=null){
       JSONObject obj=JSONObject.fromObject(result);
       result=obj.getString("resultcode");//得到返回状态码
       if(result!=null&&result.equals("200")){//200表示成功返回数据
        result=obj.getString("result");//得到城市列表的json格式字符串数组
        JSONArray arr=JSONArray.fromObject(result);
        for(Object o:arr){//对arr进行遍历
         //将数组中的一个json个数字符串进行解析
         obj=JSONObject.fromObject(o.toString());
         /*此时obj如 {"id":"2","province":"北京","city":"北京","district":"海淀"}*/
         //以city这个key为线索判断所需要寻找的这条记录
         result=obj.getString("district");
         //防止输入城市名不全,如苏州市输入为苏州,类似与模糊查询
         if(result.equals(cityName)||result.contains(cityName)){
          result=obj.getString("id");//得到ID
          return result;
         }
        }
       }
      }
      return result;
     }
     public static void main(String[] args) {
      System.out.println(getIDBycityName("香港"));
     }
    }

    Demo3:调用根据城市名/id查询天气

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    package juheAPI;
      
    import net.sf.json.JSONObject;
    /**
     * 根据城市名/id查询天气
     * @author silk
     *
     */
    public class WeatherReportByCity {
     /**
      * 根据城市名获取
      * @param cityName
      * @return
      */
     public static String excute(String cityName){
      String url=//此处以返回json格式数据示例,所以format=2,以根据城市名称为例,cityName传入中文
        "http://v.juhe.cn/weather/index?cityname="+cityName+"&key=***a7558b2e0bedaa19673f74a6809ce";
      return PureNetUtil.get(url);//通过工具类获取返回数据
     }
     /**
      * 获取返回数据中的一个属性示例,此处以获取今日温度为例
      * "temperature": "8℃~20℃"  今日温度
      * @param args
      * @return
      */
     public static String GetTodayTemperatureByCity(String city) {
      String result=excute(city);
      if(result!=null){
       JSONObject obj=JSONObject.fromObject(result);
       /*获取返回状态码*/
       result=obj.getString("resultcode");
       /*如果状态码是200说明返回数据成功*/
       if(result!=null&&result.equals("200")){
        result=obj.getString("result");
        //此时result中数据有多个key,可以对其key进行遍历,得到对个属性
        obj=JSONObject.fromObject(result);
        //今日温度对应的key是today
        result=obj.getString("today");
        obj=JSONObject.fromObject(result);
        //今日温度对应当key是temperature
        result=obj.getString("temperature");
        return result;
       }
      }
      return result;
     }
     public static void main(String[] args) {
      System.out.println(GetTodayTemperatureByCity("苏州"));
     }
    }

    Demo4:调用天气种类及表示列表接口示例

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    package juheAPI;
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    /**
     * 天气种类及标识列表接口调用JAVA示例
     * @author silk
     */
    public class GetWeatherSignAndTypeList {
     //接口地址,因为只需要传入一个固定的key为参数,所以设为常量
     private static final String URL= "http://v.juhe.cn/weather/uni?key=***a7558b2e0bedaa19673f74a6809ce";
     /**
      * 通过工具类获取数据
      * @return
      */
     public static String excute(){
      return PureNetUtil.get(URL);//调用工具类获取接口数据
     }
     /**
      * 利用遍历数组的方式获取
      * @param wid天气对应id
      * @return 天气名称
      */
     public static String getWeatherByWid(String wid) {
      String result=excute();//获取接口数据
      if(result!=null){
       JSONObject obj=JSONObject.fromObject(result);
       result=obj.getString("resultcode");
       /*获取返回状态码*/
       if(result!=null&&result.equals("200")){
        /*获取数组数据*/
        result=obj.getString("result");
        JSONArray arr=JSONArray.fromObject(result);
        for(Object o:arr){//遍历数组
         obj=JSONObject.fromObject(o.toString());
         //如果遍历到需要的数据后直接返回结果,根据key(wid)得到value判断是否等于传入参数
         if(obj.getString("wid").equals(wid)){
          result=obj.getString("weather");
          return result;
         }
        }
       }
      }
      return result;
     }
     public static void main(String[] args) {
      System.out.println(getWeatherByWid("10"));
     }
    展开全文
  • 全国天气预报信息 API 接口 精确到行政区的7日天气预报。 1. 产品功能 全国天气预报每隔 6 小时更新数据; 精确到行政区级别的天气预报数据; 提供最长 7 天的天气预报数据; 提供每日小时级别的天气预报数据; ...
  • 怎么用html css jquery获取天气预报信息,调用webservice实现天气预报的效果
  • 【实例简介】【实例截图】【核心代码】郑州市 - 天气预报html,body{width: 100%;height: 100%;margin: 0;text-shadow: 1px 0px 1px #333;background-image: linear-gradient(to bottom, rgb(13, 104, 188), rgb(114,...
  • mui+echart+天气预报

    2017-10-04 17:13:05
    跨域得到天气预报信息,然后利用 mui+echart+天气预报
  • 全国天气预报信息数据接口 API

    千次阅读 2020-07-14 23:11:45
    全国天气预报信息数据接口 API,精确到行政区的7日天气预报 日4次数据更新 / 小时级天气预报。 产品功能 全国天气预报每隔 6 小时更新数据; 精确到行政区级别的天气预报数据; 提供最长 7 天的天气预报数据; ...
  • 天气网站如下: ... ①div/ul/li,获得7天天气预报的所有信息; --lxml、requests、XPath --list类型 ②li下的所有数据进行提取数据; --对上述的7条数据进行处理,提取数据 XPath ③保存文件。...
  • Google API 获取天气预报信息

    千次阅读 2011-09-30 15:30:00
    转自: http://www.chncms.com/2010/08/30/GOOGLEAPIWEATHER.html 要获得天气预报信息可用利用Google提供的借口,    http://www.google.com/ig/api?hl=zh_cn&
  • 获得天气预报信息可用利用Google提供的借口, http://www.google.com/ig/api?hl=zh_cn&amp;weather=城市名称(拼音) 它将返回一个用xml封装的天气信息。   China wholesale shoes,jordan shoes, ...
  • 中国国家气象局提供了获取所在城市天气预报信息接口。通过这个接口,我们就可以获取天气信息了。 中国国家气象局天气预报接口总共提供了三个: http://www.weather.com.cn/data/sk/101010100.html ...
  • python爬虫爬取天气预报信息

    千次阅读 2020-11-21 15:25:23
    目标天气预报网站:http://www.weather.com.cn/weather/101210701.shtml 需要用到的库有requests(用来发送请求和接收url)BeautifulSoup(用来解析html文本) 爬虫的基本思路: 1.首先发送请求并返回requests(最好...
  • java获取天气预报信息

    2021-03-15 15:20:41
    免费接口: ... } } 所需要的maven包如下 org.apache.httpcomponents httpclient 4.5.2 至此,就可以获取从该接口返回的JSON格式的天气信息
  • 这个天气预报应用是从新浪天气服务器里获得的天气情况.定位功能是网络定位.没有用到GPS.代码相对简单,对于初学者还是不错的.
  • 解析天气预报

    2014-12-11 16:43:12
    一个解析百度天气预报的小程序通过Json拿到资源对所得到的资源进行解析并且在Activity中显示得到信息
  •  *根据城市或地区名称查询获得未来三天内天气情况、现在的天气实况、天气和生活指数  */  String[] str = wwss.getWeatherbyCityName("西安");  for(int i =0;i;i++){  System.out.println(str[i]);  }  } ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,230
精华内容 6,492
关键字:

如何获得天气预报信息