html获取实时天气&Java获取天气

时间:2024-03-02 16:51:02

  对接天气的api很多都有次数限制,或者需要去申请一些appcode才能访问,有没有一些比较简单的方式来获取实时天气呢?基于此,本人整理了此篇博客。

一、天气对接。

中国天气网

1、 http://m.weather.com.cn/data/101110101.html 已失效

2、 http://www.weather.com.cn/data/sk/101010100.html 有数据,乱码,不全,没有生活指数,没有天气图标

{
"weatherinfo": {
"city": "北京",
"cityid": "101010100",
"temp": "22",
"WD": "北风",
"WS": "2级",
"SD": "19%",
"WSE": "2",
"time": "16:05",
"isRadar": "1",
"Radar": "JC_RADAR_AZ9010_JB"
}
}

3、 http://www.weather.com.cn/data/cityinfo/101010100.html 有数据,乱码,不全,没有生活指数,没有天气图标

{
"weatherinfo": {
"city": "北京",
"cityid": "101010100",
"temp1": "24℃",
"temp2": "11℃",
"weather": "雷阵雨转多云",
"img1": "d4.gif",
"img2": "n1.gif",
"ptime": "11:00"
}
}

4、 http://www.weather.com.cn/data/zs/101010100.html 有数据,乱码,信息比较全

中华万年历:

5、 http://wthrcdn.etouch.cn/weather_mini?city=北京 通过城市名字获得天气数据,json数据

6、 http://wthrcdn.etouch.cn/weather_mini?citykey=101010100 通过城市id获得天气数据,json数据

7、 http://wthrcdn.etouch.cn/WeatherApi?citykey=101010100 通过城市id获得天气数据,xml文件数据,当错误时会有<error>节点

8、 http://wthrcdn.etouch.cn/WeatherApi?city=北京 通过城市名字获得天气数据,xml文件数据

Github

9、 https://github.com/jokermonn/-Api/blob/master/CenterWeather.md 获取中国天气预报,但获取的不是实时的数据

10、 http://api.k780.com:88/?app=weather.history&weaid=hefei&date=2018-06-22&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json 获取实时天气

11、 http://api.k780.com:88/?app=weather.future&weaid=1&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json 获取未来几天

*天气预报:

12、 http://weather.51wnl.com/weatherinfo/GetMoreWeather?cityCode=101040100&weatherType=0 已失效

13、 http://weather.51wnl.com/weatherinfo/GetMoreWeather?cityCode=101040100&weatherType=1 已失效

收费_聚合数据

14、 天气预报:https://www.juhe.cn/docs/api/id/73

15、 全国天气预报:https://www.juhe.cn/docs/api/id/39

其他:

16、小米:http://weatherapi.market.xiaomi.com/wtr-v2/weather?cityId=101121301 有数据、乱码

17、新浪天气预报API:http://php.weather.sina.com.cn/xml.php?city=%B1%B1%BE%A9&password=DJOYnieT8234jlsK&day=0 已失效

友情链接:

1、天气API接口大全(nohacks.cn 收集整理):http://www.nohacks.cn/post-35.html

2、网上的天气 API 哪一个更加可靠?:https://www.zhihu.com/question/20575288

3、免费的天气接口(满足你的大部分需求):http://blog.csdn.net/wanghao940101/article/details/72123184

4、真正的中国天气api接口xml,json(求加精) ...:http://blog.csdn.net/fancylovejava/article/details/26102635

5、免费的天气接口(满足你的大部分需求):http://blog.csdn.net/wanghao940101/article/details/72123184

6、通过城市名(北京/北京市)获取当前城市当前温度及未来一周天气预报 (Json数据) :包含*的主要县市接口:

  http://wthrcdn.etouch.cn/weather_mini?city=北京市;

  https://www.sojson.com/open/api/weather/json.shtml?city=北京

  https://www.sojson.com/open/api/weather/xml.shtml?city=北京

7、http://i.tianqi.com/index.php?c=code&id=12&icon=1&py=hefei&num=5

二、运用

  我采用的是中华万年历的api,( http://wthrcdn.etouch.cn/WeatherApi?city=北京 通过城市名字获得天气数据,xml文件数据),此api调用的底层也是中国天气网的数据,跟百度上直接搜索的天气保持一致,此api的缺点是返回的xml数据没有天气的图标,需要自己做一些匹配,这个也比较简单。

demo:

$(document).ready(function () {
    var city = getQueryString("city");
    var params = new Object();
    params.city=city;
    sendData("http://wthrcdn.etouch.cn/WeatherApi", params, function(data){
        var str=XML2String(data);
         //创建文档对象  
        var parser=new DOMParser();  
        var xmlDoc=parser.parseFromString(str,"text/xml");  
        //城市
        var city = xmlDoc.getElementsByTagName(\'city\');  
        $("#city").html(city[0].textContent)
            
        var fengli = xmlDoc.getElementsByTagName(\'fengli\');
        var shidu = xmlDoc.getElementsByTagName(\'shidu\');  
        $("#fengli").html("风力"+fengli[1].textContent+"  湿度"+shidu[0].textContent);
                  
        //高温
        var high = xmlDoc.getElementsByTagName(\'high\');  
        
        //低温
        var low = xmlDoc.getElementsByTagName(\'low\');  
        
        //天气
        var type = xmlDoc.getElementsByTagName(\'type\');  
        $("#tianqi").html(type[0].textContent)
    });
})    

 

 2、Java获取天气

思路:调用接口获取数据,简历实体类,将获取的xml数据转换成实体类,需要一些jar包的支持

package com.cn;

/**
* 天气实体类
* @author yunjuanyunshuxue
*
*/
public class WeatherInfo {
private String date;//时间
private String cityname;//城市名
private String weather;//天气
private String temperature;//气温
private String airquality;//pm2.5

public String getDate() {
  return date;
}

public void setDate(String date) {
  this.date = date;
}

public String getCityname() {
  return cityname;
}

public void setCityname(String cityname) {
  this.cityname = cityname;
}

public String getWeather() {
  return weather;
}

public void setWeather(String weather) {
  this.weather = weather;
}

public String getTemperature() {
  return temperature;
}

public void setTemperature(String temperature) {
  this.temperature = temperature;
}

public String getAirquality() {
  return airquality;
}

public void setAirquality(String airquality) {
  this.airquality = airquality;
}

@Override
public String toString() {
  return "WeatherInfo [date="  + date + ", cityname=" + cityname
                    + ", weather=" + weather + ", temperature=" + temperature
                   + ", airquality=" + airquality + "]";
}

}
package com.cn;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.zip.GZIPInputStream;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import org.junit.Test;

/**
* 通过get请求向网站http://wthrcdn.etouch.cn/weather_mini获取某个 城市的天气状况数据,数据格式是Json
* 
* @author yunjuanyunshuxue
* 
*/
public class WeatherUtils {
/**
* 通过城市名称获取该城市的天气信息
* 
* @param cityName
* @return
*/

public static String GetWeatherData(String cityname) {
StringBuilder sb
=new StringBuilder();   try {     String weather_url = "http://wthrcdn.etouch.cn/weather_mini?city="+cityname;     URL url = new URL(weather_url);     URLConnection conn = url.openConnection();     InputStream is = conn.getInputStream();     GZIPInputStream gzin = new GZIPInputStream(is);     InputStreamReader isr = new InputStreamReader(gzin, "utf-8"); // 设置读取流的编码格式,自定义编码     BufferedReader reader = new BufferedReader(isr);     String line = null;     while((line=reader.readLine())!=null)       sb.append(line+" ");     reader.close();   } catch (UnsupportedEncodingException e) {     // TODO Auto-generated catch block     e.printStackTrace();   } catch (MalformedURLException e) {     // TODO Auto-generated catch block     e.printStackTrace();   } catch (IOException e) {     // TODO Auto-generated catch block     e.printStackTrace();   }   //System.out.println(sb.toString());   return sb.toString();  } /** * 将JSON格式数据进行解析 ,返回一个weather对象 * @param str * @return */ public static WeatherInfo GetWeather(String weatherInfobyJson){   JSONObject dataOfJson = JSONObject.fromObject(weatherInfobyJson);   if(dataOfJson.getInt("status")!=1000)     return null;   //创建WeatherInfo对象,提取所需的天气信息   WeatherInfo weatherInfo = new WeatherInfo();   //从json数据中提取数据   String data = dataOfJson.getString("data");   dataOfJson = JSONObject.fromObject(data);   weatherInfo.setCityname(dataOfJson.getString("city"));;   weatherInfo.setAirquality(dataOfJson.getString("aqi"));   //获取预测的天气预报信息   JSONArray forecast = dataOfJson.getJSONArray("forecast");   //取得当天的   JSONObject result=forecast.getJSONObject(0);   weatherInfo.setDate(result.getString("date"));   String high = result.getString("high").substring(2);   String low = result.getString("low").substring(2);   weatherInfo.setTemperature(low+"~"+high);   weatherInfo.setWeather(result.getString("type"));   return weatherInfo;   } }
package com.cn;

public class Test {
  public static void main(String[] args){
    String info = WeatherUtils.GetWeatherData("北京");
    WeatherInfo weatherinfo = WeatherUtils.GetWeather(info);
    System.out.println(weatherinfo.toString());
  }
}