|
@ -0,0 +1,155 @@
|
|
|
package com.yihu.jw.care.util;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.yihu.jw.care.dao.weather.BaseWeatherDayDao;
|
|
|
import com.yihu.jw.care.dao.weather.BaseWeatherWeekDao;
|
|
|
import com.yihu.jw.entity.care.weather.BaseWeatherDayDO;
|
|
|
import com.yihu.jw.entity.care.weather.BaseWeatherWeekDO;
|
|
|
import com.yihu.jw.util.date.DateUtil;
|
|
|
import com.yihu.jw.util.http.HttpClientUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
|
* Created by yeshijie on 2022/7/27.
|
|
|
*/
|
|
|
@Component
|
|
|
public class WeatherUtil {
|
|
|
|
|
|
private static final Logger logger = LoggerFactory.getLogger(WeatherUtil.class);
|
|
|
|
|
|
//天气接口个人免费 每天限制500次
|
|
|
public static final String baseUrl = "https://www.yiketianqi.com/";
|
|
|
public static final String appid = "66754959";
|
|
|
public static final String appsecret = "ejDIv6Oo";
|
|
|
public static final String defaultCityid = "101210101";
|
|
|
|
|
|
@Autowired
|
|
|
private HttpClientUtil httpClientUtil;
|
|
|
@Autowired
|
|
|
private BaseWeatherDayDao weatherDayDao;
|
|
|
@Autowired
|
|
|
private BaseWeatherWeekDao weatherWeekDao;
|
|
|
|
|
|
/**
|
|
|
* 获取实况天气情况
|
|
|
*/
|
|
|
public synchronized BaseWeatherDayDO getWeatherDay(String cityid,String date){
|
|
|
try {
|
|
|
if(StringUtils.isBlank(cityid)){
|
|
|
cityid = defaultCityid;
|
|
|
}
|
|
|
if(StringUtils.isBlank(date)){
|
|
|
date = DateUtil.getStringDateShort();
|
|
|
}
|
|
|
BaseWeatherDayDO dayDO = weatherDayDao.findByCityidAndDate(cityid,date);
|
|
|
if(dayDO!=null){
|
|
|
return dayDO;
|
|
|
}
|
|
|
//https://www.yiketianqi.com/free/day?appid=66754959&appsecret=ejDIv6Oo&unescape=1&cityid=101210101
|
|
|
String url = baseUrl + "free/day?appid="+appid+"&appsecret="+appsecret+"&unescape=1&cityid="+cityid;
|
|
|
String res = httpClientUtil.get(url,"UTF-8");
|
|
|
logger.info("getWeatherDay:"+res);
|
|
|
//{"nums":3,"cityid":"101210101","city":"杭州","date":"2022-07-27","week":"星期三","update_time":"14:35","wea":"多云","wea_img":"yun","tem":"37","tem_day":"38"
|
|
|
// ,"tem_night":"28","win":"东风","win_speed":"2级","win_meter":"7km\/h","air":"118","pressure":"999","humidity":"50%"}
|
|
|
JSONObject json = JSON.parseObject(res);
|
|
|
dayDO = new BaseWeatherDayDO();
|
|
|
dayDO.setCreateTime(new Date());
|
|
|
dayDO.setNums(json.getInteger("nums")+"");
|
|
|
dayDO.setCity(json.getString("city"));
|
|
|
dayDO.setCityid(json.getString("cityid"));
|
|
|
dayDO.setDate(json.getString("date"));
|
|
|
dayDO.setWeek(json.getString("week"));
|
|
|
dayDO.setUpdateTime(json.getString("update_time"));
|
|
|
dayDO.setWea(json.getString("wea"));
|
|
|
dayDO.setWeaImg(json.getString("wea_img"));
|
|
|
dayDO.setTem(json.getString("tem"));
|
|
|
dayDO.setTemNight(json.getString("tem_night"));
|
|
|
dayDO.setTemDay(json.getString("tem_day"));
|
|
|
dayDO.setWin(json.getString("win"));
|
|
|
dayDO.setWinSpeed(json.getString("win_speed"));
|
|
|
dayDO.setWinMeter(json.getString("win_meter"));
|
|
|
dayDO.setAir(json.getString("air"));
|
|
|
dayDO.setPressure(json.getString("pressure"));
|
|
|
dayDO.setHumidity(json.getString("humidity"));
|
|
|
weatherDayDao.save(dayDO);
|
|
|
return dayDO;
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取7天气情况
|
|
|
*/
|
|
|
public synchronized List<BaseWeatherWeekDO> getWeatherWeek(String cityid,String date){
|
|
|
try {
|
|
|
if(StringUtils.isBlank(cityid)){
|
|
|
cityid = defaultCityid;
|
|
|
}
|
|
|
if(StringUtils.isBlank(date)){
|
|
|
date = DateUtil.getStringDateShort();
|
|
|
}
|
|
|
|
|
|
List<BaseWeatherWeekDO> weekDOS = weatherWeekDao.findByCityidAndUpdateDate(cityid,date);
|
|
|
if(weekDOS!=null&&weekDOS.size()>0){
|
|
|
return weekDOS;
|
|
|
}
|
|
|
//https://www.yiketianqi.com/free/week?unescape=1&appid=66754959&appsecret=ejDIv6Oo&cityid=101210101
|
|
|
String url = baseUrl + "free/week?unescape=1&appid="+appid+"&appsecret="+appsecret+"&cityid="+cityid;
|
|
|
String res = httpClientUtil.get(url,"UTF-8");
|
|
|
logger.info("getWeatherWeek:"+res);
|
|
|
//{"nums":4,"cityid":"101210101","city":"杭州","update_time":"2022-07-27 13:57:19","data":
|
|
|
// [{"date":"2022-07-27","wea":"雷阵雨","wea_img":"yu","tem_day":"38","tem_night":"28","win":"东北风","win_speed":"3-4级转<3级"}
|
|
|
// ,{"date":"2022-07-28","wea":"雷阵雨","wea_img":"yu","tem_day":"37","tem_night":"26","win":"东风","win_speed":"3-4级转<3级"}
|
|
|
// ,{"date":"2022-07-29","wea":"晴","wea_img":"qing","tem_day":"38","tem_night":"26","win":"东北风","win_speed":"4-5级转3-4级"}
|
|
|
// ,{"date":"2022-07-30","wea":"晴","wea_img":"qing","tem_day":"35","tem_night":"26","win":"东风","win_speed":"4-5级转<3级"}
|
|
|
// ,{"date":"2022-07-31","wea":"多云","wea_img":"yun","tem_day":"35","tem_night":"26","win":"东北风","win_speed":"4-5级转<3级"}
|
|
|
// ,{"date":"2022-08-01","wea":"雷阵雨转多云","wea_img":"yun","tem_day":"34","tem_night":"26","win":"东北风","win_speed":"3-4级转<3级"}
|
|
|
// ,{"date":"2022-08-02","wea":"雷阵雨","wea_img":"yu","tem_day":"33","tem_night":"27","win":"东风","win_speed":"3-4级"}]}
|
|
|
|
|
|
JSONObject jsonObject = JSON.parseObject(res);
|
|
|
String city = jsonObject.getString("city");
|
|
|
String nums = jsonObject.getInteger("nums")+"";
|
|
|
String updateTime = jsonObject.getString("update_time");
|
|
|
JSONArray data = jsonObject.getJSONArray("data");
|
|
|
weekDOS = new ArrayList<>();
|
|
|
for (int i=0;i<data.size();i++){
|
|
|
JSONObject json = data.getJSONObject(i);
|
|
|
BaseWeatherWeekDO weekDO = new BaseWeatherWeekDO();
|
|
|
weekDO.setCity(city);
|
|
|
weekDO.setCityid(cityid);
|
|
|
weekDO.setUpdateDate(date);
|
|
|
weekDO.setUpdateTime(updateTime);
|
|
|
weekDO.setNums(nums);
|
|
|
|
|
|
weekDO.setDate(json.getString("date"));
|
|
|
weekDO.setWea(json.getString("wea"));
|
|
|
weekDO.setWeaImg(json.getString("wea_img"));
|
|
|
weekDO.setTemDay(json.getString("tem_day"));
|
|
|
weekDO.setTemNight(json.getString("tem_night"));
|
|
|
weekDO.setWin(json.getString("win"));
|
|
|
weekDO.setWinSpeed(json.getString("win_speed"));
|
|
|
weekDOS.add(weekDO);
|
|
|
}
|
|
|
if(weekDOS.size()>0){
|
|
|
weatherWeekDao.save(weekDOS);
|
|
|
}
|
|
|
return weekDOS;
|
|
|
}catch (Exception e){
|
|
|
e.printStackTrace();
|
|
|
return null;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
}
|