فهرست منبع

1.黑龙江和浙江的日天气预报也切换到星图
2.浙江的小时天气预报全省接入

xiaowang 3 هفته پیش
والد
کامیت
bcd1cae5a1

+ 1 - 2
src/main/java/com/example/getweather/job/Download.java

@@ -3,7 +3,6 @@ package com.example.getweather.job;
 import com.example.getweather.service.GetWeather;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.EnableScheduling;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -19,7 +18,7 @@ public class Download {
     //每天0点下载数据     2025-02-10 应窦哥要求 小时气象源切换为xmo 日的还用彩云
     //2025-07-14 应窦哥要求 甘肃日的也用彩云
     //@Scheduled(fixedDelay = 600000000)
-    @Scheduled(cron = "0 40 6,12 * * ?")
+    //@Scheduled(cron = "0 40 6,12 * * ?")
     public void download() {
         getWeather.download();
     }

+ 32 - 0
src/main/java/com/example/getweather/service/GetWeatherGeovisearth.java

@@ -224,6 +224,37 @@ public class GetWeatherGeovisearth {
                         isApiQuotaExhausted = analysisGeovisearth(url, url120, xmoUrl, d.getCode(), d.getName(), conn); // 传递标志变量
                         if (isApiQuotaExhausted) break; // 检查标志变量
                     }
+                } else {
+                    if (isApiQuotaExhausted) break; // 检查标志变量
+                    List<DistrictCodeDO> shiList = districtCodeDOList.stream().filter(item -> item.getPid().toString().equals(code)).collect(Collectors.toList());
+                    //市
+                    for (DistrictCodeDO d : shiList) {
+                        if (isApiQuotaExhausted) break; // 检查标志变量
+                        List<DistrictCodeDO> quList = districtCodeDOList.stream().filter(item -> item.getPid().toString().equals(d.getCode())).collect(Collectors.toList());
+                        String url;
+                        String url120;
+                        String xmoUrl;
+                        String location = d.getLng() + "," + d.getLat();
+                        //xmo综合数据查询
+                        url = "https://api.open.geovisearth.com/v2/cn/city/professional?token=" + token + "&location=" + location + "&yesterday=false";
+                        url120 = "https://api.open.geovisearth.com/v2/cn/hourly/professional?token=" + token + "&location=" + location;
+                        xmoUrl = "https://weather-api.xm-opt.com/v1/forecastDaily?latitude=" + d.getLat() + "&longitude=" + d.getLng() + "&daily=wind_speed_10m_max,shortwave_radiation_sum&timezone=Asia%2FShanghai&start_date=" + startDate + "&end_date=" + endDate;
+                        isApiQuotaExhausted = analysisGeovisearth(url, url120, xmoUrl, d.getCode(), d.getName(), conn); // 传递标志变量
+                        if (isApiQuotaExhausted) break; // 检查标志变量
+                        //区
+                        for (DistrictCodeDO q : quList) {
+                            if (isApiQuotaExhausted) break; // 检查标志变量
+                            location = q.getLng() + "," + q.getLat();
+                            url = "https://api.open.geovisearth.com/v2/cn/city/professional?token=" + token + "&location=" + location + "&yesterday=false";
+                            url120 = "https://api.open.geovisearth.com/v2/cn/hourly/professional?token=" + token + "&location=" + location;
+                            xmoUrl = "https://weather-api.xm-opt.com/v1/forecastDaily?latitude=" + q.getLat() + "&longitude=" + q.getLng() + "&daily=wind_speed_10m_max,shortwave_radiation_sum&timezone=Asia%2FShanghai&start_date=" + startDate + "&end_date=" + endDate;
+                            isApiQuotaExhausted = analysisGeovisearth(url, url120, xmoUrl, q.getCode(), q.getName(), conn); // 传递标志变量
+                            if (isApiQuotaExhausted) break; // 检查标志变量
+                            //线程睡5秒 防止请求过快
+                            //花钱了 硬气 不管他
+                            //Thread.sleep(5000);
+                        }
+                    }
                 }
             }
             conn.close();
@@ -524,6 +555,7 @@ public class GetWeatherGeovisearth {
                         + item.getTs() + "', " + item.getWindSpeedDay() + ", " + item.getWindSpeedMDay() + ", " + item.getWindScaleDay() + ", " + item.getWindScaleNight() + ", " + item.getWind360Day() + ", " + item.getWind360Night() + ", "
                         + item.getPrecip() + ", '" + item.getTextDay() + "', '" + item.getTextNight() + "', " + item.getTempMax() + ", " + item.getTempMin() + ", " + item.getHumidity() + ", " + item.getPressure() + ", "
                         + item.getDswrf() + ")";
+                //log.info(name+"数据时间"+DateUtil.format(new Date(item.getTs().getTime()),"yyyy-MM-dd HH:mm:ss"));
                 int affectedRows = ps.executeUpdate(insertSQL);
             }
             if (ps != null)

+ 1 - 18
src/main/java/com/example/getweather/service/GetWeatherXmo.java

@@ -136,7 +136,7 @@ public class GetWeatherXmo {
                         isApiQuotaExhausted = analysis(xmoUrl, d.getCode(), d.getName(), conn); // 传递标志变量
                         if (isApiQuotaExhausted) break; // 检查标志变量
                     }
-                } else if (code.equals("230000")) {
+                } else {
                     if (isApiQuotaExhausted) break; // 检查标志变量
                     List<DistrictCodeDO> shiList = districtCodeDOList.stream().filter(item -> item.getPid().toString().equals(code)).collect(Collectors.toList());
                     //市
@@ -156,23 +156,6 @@ public class GetWeatherXmo {
                             if (isApiQuotaExhausted) break; // 检查标志变量
                         }
                     }
-                } else {
-                    List<DistrictCodeDO> shiList = districtCodeDOList.stream().filter(item -> item.getPid().toString().equals(code)).collect(Collectors.toList());
-                    for (DistrictCodeDO d : shiList) {
-                        if (isApiQuotaExhausted) break; // 检查标志变量
-                        String xmoUrl;
-                        //曦谋综合数据查询
-                        xmoUrl = "https://weather-api.xm-opt.com/v1/forecast15Minutes?latitude=" + d.getLat() + "&longitude=" + d.getLng() + "&minutely_15=weather_code,temperature_2m,surface_pressure,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_direction_10m,shortwave_radiation&timezone=Asia%2FShanghai&start_date=" + startDate + "&end_date=" + endDate;
-                        isApiQuotaExhausted = analysis(xmoUrl, d.getCode(), d.getName(), conn); // 传递标志变量
-                        if (isApiQuotaExhausted) break; // 检查标志变量
-                        //区 2025-07-14 只爬镇海区
-                        if (Objects.equals(d.getCode(), "330200")) {
-                            List<DistrictCodeDO> quList = districtCodeDOList.stream().filter(item -> item.getCode().equals("330211")).collect(Collectors.toList());
-                            xmoUrl = "https://weather-api.xm-opt.com/v1/forecast15Minutes?latitude=" + quList.get(0).getLat() + "&longitude=" + quList.get(0).getLng() + "&minutely_15=weather_code,temperature_2m,surface_pressure,relative_humidity_2m,precipitation,cloud_cover,wind_speed_10m,wind_direction_10m,shortwave_radiation&timezone=Asia%2FShanghai&start_date=" + startDate + "&end_date=" + endDate;
-                            isApiQuotaExhausted = analysis(xmoUrl, "330211", "镇海区", conn); // 传递标志变量
-                            if (isApiQuotaExhausted) break; // 检查标志变量
-                        }
-                    }
                 }
             }
             conn.close();