天气情况获取


不解释,先上代码


import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import lombok.extern.slf4j.Slf4j;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.LinkedList;
import java.util.List;

/**
* @version: 1.00.00
* @description: 描述:获取天气情况
* @company: 
* @author: 
* @date: 2021-12-21 15:33
*/
@Slf4j
public class WeatherUtil {

    /* 数据观测时间 */
    public static final String OBSTIME = "obsTime";
    /* 图片编码 */
    public static final String ICON = "icon";
    /* 编码 */
    public static final String ADCODE = "adcode";
    /* 天气状况 */
    public static final String WEATHER = "text";
    /* 温度 */
    public static final String TEMPERATURE = "temp";
    /* 体感温度 */
    public static final String FEELSLIKE = "feelsLike";
    /* 风向360角度 */
    public static final String WIND360 = "wind360";
    /* 风向 */
    public static final String WINDDIR = "windDir";
    /* 风级 */
    public static final String WINDSCALE = "windScale";
    /* 风速 */
    public static final String WINDSPEED = "windSpeed";
    /* 湿度 */
    public static final String HUMIDITY = "humidity";
    /* 降水量 */
    public static final String PRECIP = "precip";
    /* 大气压强,默认单位:百帕 */
    public static final String PRESSURE = "pressure";
    /* 能见度,默认单位:公里 */
    public static final String VIS = "vis";
    /* 云量,百分比数值。可能为空 */
    public static final String CLOUD = "cloud";
    /* 露点温度。可能为空 */
    public static final String DEW = "dew";

    public static void main(String[] args) throws IOException {
        getWeather("101060604");
    }

    /**
     * 和风天气api
     * 根据城市ID()获取实时天气
     * 

* gzip=n 解决乱码 * 当前 key : e093c40563************90bddbca7ae976d * key值为注册和风天气,官方提供免费,每天上限调用10000次 * 如果失效,重新去申请 *

* @param id:选取和风天气提供的城市编码 */ public static JSONObject getWeather(String id){ try { log.info("-----------------------------获取和风天气接口开始----------------------"); URL url = new URL("https://devapi.qweather.com/v7/weather/now?location=" + id + "&key=e093c************a7ae976d&gzip=n"); URLConnection connectionData = url.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader( connectionData.getInputStream(), "UTF-8")); StringBuilder sb = new StringBuilder(); String line = null; while ((line = br.readLine()) != null){ sb.append(line); } String data = sb.toString(); JSONObject json = JSONUtil.parseObj(data).getJSONObject("now"); br.close(); log.info("-----------------------------获取和风天气接口结束----------------------"); return json; } catch (Exception e) { log.info("-----------------------------获取和风天气接口 ERROR----------------------"); e.printStackTrace(); return null; } }

获取大范围时间内的天气情况(现在用不了,得稍微修改下)


    /**
     * 获取七天天气
     * @param city:城市编码、中国天气网的编码
     */
    public void getSevenWeather(String city){
        //--------------------------------------------此方法需要的时候建议也改成上面那个用和风天气------------------------------------------
        log.info("-----------------------------获取中国天气局接口开始----------------------");
        //        String url = "http://www.weather.com.cn/weather/" +city  + ".shtml";
        //        String url = "http://wthrcdn.etouch.cn/weather_mini?city=汨罗市";
        // 高德接口
        // https://restapi.amap.com/v3/weather/weatherInfo?city=430681&key=f09391e22*62b2cf94de8
        // https://restapi.amap.com/v3/weather/weatherInfo?key=f09391e22*cf94de8&city="+city+"&extensions=base&output=JSON
        city="101190101";
        String url = "http://www.weather.com.cn/weather/" +city  + ".shtml";
        Listlweather=new LinkedList();//用于存储天气状况
        ListlweatherData=new LinkedList();//用于存储日期
        ListlweatherTempture=new LinkedList();//用于存储温度
        ListlweatherWin=new LinkedList();//用于存储风向
        Listlweather_ALl=new LinkedList();
        try {
            Document doc = Jsoup.connect(url).get();
            Elements content = doc.getElementsByClass("t clearfix");
            for (Element e : content) {
//                Document conDoc = Jsoup.parse(e.toString());
//                Elements cru = conDoc.getElementsByClass("crumbs fl");
                Elements sky = content.select("li[class^=sky skyid lv]");
                for (Element e1 : sky) {
                    Elements weatherData=e1.select("h1");//此处用于获取日期天气
                    lweatherData.add(weatherData.text());
                    Elements weather=e1.select("p[class=wea]");//用于获取天气信息
                    lweather.add(weather.text());
                    Elements weatherTempture= e1.select("p[class=tem]");//用于获取天气温度
                    lweatherTempture.add(weatherTempture.text());
                    Elements weatherWin=e1.select("span");//用于获取风向
                    lweatherWin.add(weatherWin.attr("title"));
                }
            }
        } catch (Exception e) {
            log.info("-----------------------------获取中国天气局接口 ERROR----------------------");
            e.printStackTrace();
        }
//        System.out.println("天气查询完毕!!");
//        System.out.println("当前城市【"+"汨罗"+"】");
        for(int i=0;i

城市编码

百度网盘
和风api:https://pan.baidu.com/s/19zTM9jCHstCdyBCKQMIJBA 提取码:yuge
中国天气网的编码好像同和风api的一样
高德api: https://pan.baidu.com/s/19Q1YsLrlcuF_xkCaC6EBxA 提取码:yuge

key值

百度:和风天气api接口,去那自己注册申请去,免费的;
高德也是一样的;

相关