200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java解析百度日历API的节假日Json串

java解析百度日历API的节假日Json串

时间:2023-01-23 00:43:35

相关推荐

java解析百度日历API的节假日Json串

百度的接口没有更新节假日 ,文章下方再补一个第三方接口

百度日历Json接口

只能解析当年及以前年份的节假日,因为下一年的节假日需要等国务院发布节假日,想要实时获取,可以自定义定时任务每年的第一天去查询百度的接口/8aQDcjqpAAV3otqbppnN2DJv/api.php?query=&resource_id=6018&format=json

数据中的状态是2 做了下判断 只有1的状态是节假日

根据年份解析百度接口的节假日,然后封装到集合中

public static Map<Date, DayStatusEnum> holidayByList(String year){String httpUrl = "/8aQDcjqpAAV3otqbppnN2DJv/api.php?query="+year+"&resource_id=6018&format=json";BufferedReader reader = null;String result = null;StringBuffer sbf = new StringBuffer();Map<Date,DayStatusEnum> dateMap = new HashMap<Date,DayStatusEnum>();try {URL url = new URL(httpUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();InputStream is = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();result = sbf.toString();JSONObject jsonObject = JSONObject.parseObject(result);JSONArray holidayJsonArr = jsonObject.getJSONArray("data").getJSONObject(0).getJSONArray("holiday");List<String> holidays = holidayJsonArr.stream().map(h -> {JSONObject hJsonObj = (JSONObject) h;JSONArray list = hJsonObj.getJSONArray("list");if(list.size()>0){for(int i=0;i<list.size();i++){JSONObject job = list.getJSONObject(i); // 遍历 jsonarray 数组,把每一个对象转成 json 对象String sts = (String)job.get("status");if (sts.equals("1")) {dateMap.put(DateUtils.getDateByString((String)job.get("date"), "yyyy-MM-dd"),DayStatusEnum.HOLIDAYS);}else {dateMap.put(DateUtils.getDateByString((String)job.get("date"), "yyyy-MM-dd"),DayStatusEnum.WORKDAY);}}}return "1";}).collect(Collectors.toList());} catch (Exception e) {//e.printStackTrace();System.out.println(TimeSheetException.NO_INIT.msg);}return dateMap;}

节假日的枚举

public enum DayStatusEnum {WORKDAY("工作日"),WEEKEND("周末"),HOLIDAYS("节假日");}

DateUtils 工具类 ,其实也就是时间类型转换,直接使用DateFormat也挺简单的

public class DateUtils {/*** 获得指定时间格式的Date时间* @param time 时间字符串* @param plan 时间格式* @return 时间*/public static Date getDateByString(String time, String plan){Long times = getLongTimeByString(time, plan);return new Date(times);}/*** 获得指定时间格式的时间* @param time 时间字符串* @param plan 时间格式* @return 时间*/public static String getStringDateByString(Date time,String plan){DateFormat format = new SimpleDateFormat(plan);return format.format(time);}/*** 获得指定时间格式的毫秒值* @param time 时间字符串* @param plan 时间格式* @return 毫秒值*/public static Long getLongTimeByString(String time,String plan){DateFormat format = new SimpleDateFormat(plan);Long result = null;try {result = format.parse(time).getTime();} catch (ParseException e) {e.printStackTrace();}return result;}}

然后就可以入库了,接口不是很稳定,不建议实时更新,还是存入数据库 再查询比较靠谱一点

第三方提供 不确定接口能用多久/jiari/?d=

public static Map<Date, DayStatusEnum> holidayByList(String year) {String httpUrl = "/jiari/?d=" + year;BufferedReader reader = null;String result = null;StringBuffer sbf = new StringBuffer();Map<Date, DayStatusEnum> dateMap = new HashMap<Date, DayStatusEnum>();try {URL url = new URL(httpUrl);HttpURLConnection connection = (HttpURLConnection) url.openConnection();connection.setRequestMethod("GET");connection.connect();InputStream is = connection.getInputStream();reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));String strRead = null;while ((strRead = reader.readLine()) != null) {sbf.append(strRead);sbf.append("\r\n");}reader.close();result = sbf.toString();JSONObject jsonObject = JSONObject.parseObject(result);JSONObject holidays = (JSONObject) jsonObject.get(year);Iterator iter = holidays.entrySet().iterator();while (iter.hasNext()) {Map.Entry entry = (Map.Entry) iter.next();String md = String.valueOf(entry.getKey());String date = year+md;dateMap.put(DateUtils.getDateByString(date, "yyyyMMdd"), DayStatusEnum.HOLIDAYS);}} catch (Exception e) {//e.printStackTrace();throw TimeSheetException.of(TimeSheetException.NO_INIT.code,TimeSheetException.NO_INIT.msg);}return dateMap;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。