百度万年历接口实现和分析
接口目的
项目中需要判断某个日期是否是节假日,以此对应不同的业务处理和设置。查看了下百度搜索的结果,最终最中意的还是它自带的万年历组件。
其中数据查询的url 是 http://opendata.baidu.com/api.php?query=YEAR_MONTH&resource_id=6018&format=json
封装方法 解析数据
服务:
private String BAIDU_URL = "http://opendata.baidu.com/api.php?query=YEAR_MONTH&resource_id=6018&format=json";
/**
* 获取对应时间附近的假日信息
* @param year_month 2019年9月
* @return
*/
public void queryHolidays(String year_month){
String url = BAIDU_URL.replace("YEAR_MONTH",year_month);
SimpleDateFormat format = new SimpleDateFormat("yyyy-M-d");
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
try {
JSONObject result = JSONObject.parseObject(httpClientUtils.get(url, null));
if(result.getString("status").equalsIgnoreCase("0")){
JSONArray data = result.getJSONArray("data");
if(!CollectionUtils.isEmpty(data)){
JSONObject item = data.getJSONObject(0);
if(item == null || item.get("holiday") == null){
return;
}
JSONArray holiday = item.getJSONArray("holiday");
if(!CollectionUtils.isEmpty(holiday)){
for(int i = 0 ; i < holiday.size(); i ++){
JSONObject h = holiday.getJSONObject(i);
JSONArray hh = h.getJSONArray("list");
if(!CollectionUtils.isEmpty(hh)){
for(int j = 0; j < hh.size(); j++){
JSONObject hhh = hh.getJSONObject(j);
String dateStr = hhh.getString("date");
dateStr = format1.format(format.parse(dateStr));
Holiday holidayExist = systemParaDao.getHolidayByDate(dateStr);
if(holidayExist != null){
continue;
}
Holiday holiday1 = new Holiday();
holiday1.setDateStr(dateStr);
holiday1.setWorkSate(Integer.valueOf(hhh.getString("status")));
holiday1.setState(1);
systemParaDao.saveHoliday(holiday1);
}
}
}
}
}
}
}catch (Exception ex){
ex.printStackTrace();
}
}
返回的数据结构:
{
"status": "0",
"t": "",
"set_cache_time": "",
"data": [
{
"StdStg": 6018,
"StdStl": 8,
"_update_time": "1556113527",
"cambrian_appid": "0",
"almanac": [
{
"avoid": "入殓.安葬.开市.交易.",
"date": "2019-10-1",
"suit": "祭祀.诸事不宜."
},
{
"avoid": "安床.开光.开市.交易.",
"date": "2019-10-2",
"suit": "祭祀.裁衣.冠笄.嫁娶.安机械.拆卸.动土.起基.移徙.入宅.入殓.启攒.安葬.造仓.经络."
},
{
"avoid": "动土.冠笄.移徙.入宅.开市.竖柱.上梁.",
"date": "2019-10-3",
"suit": "祭祀.出行.成服.除服.沐浴.入殓."
},
{
"avoid": "诸事不宜.",
"date": "2019-10-4",
"suit": "祭祀.沐浴.赴任.出行.余事勿取."
},
{
"avoid": "诸事不宜.",
"date": "2019-10-5",
"suit": "诸事不宜."
},
{
"avoid": "嫁娶.移徙.入宅.开市.",
"date": "2019-10-6",
"suit": "沐浴.入殓.移柩.除服.成服.破土.平治道涂."
},
{
"avoid": "",
"date": "2019-10-7",
"suit": "嫁娶.祭祀.祈福.求嗣.沐浴.出火.出行.拆卸.修造.动土.进人口.开市.交易.立券.入宅.移徙.安床.栽种.纳畜.入殓.安葬.启攒.除服.成服."
},
{
"avoid": "开市.交易.祭祀.入宅.安葬.",
"date": "2019-10-8",
"suit": "捕捉.畋猎.余事勿取."
},
{
"avoid": "开市.破土.掘井.合寿木.",
"date": "2019-10-9",
"suit": "嫁娶.纳采.订盟.祭祀.祈福.求嗣.斋醮.开光.安香.出火.造庙.移徙.出行.入宅.造庙.起基.竖柱.上梁.安床.纳畜.捕捉.纳婿.安葬."
},
{
"avoid": "开市.嫁娶.",
"date": "2019-10-10",
"suit": "祭祀.沐浴.解除.破屋.坏垣.余事勿取."
},
{
"avoid": "嫁娶.开市.入宅.祈福.安葬.",
"date": "2019-10-11",
"suit": "订盟.纳采.会亲友.交易.立券.纳财.栽种.纳畜.牧养."
},
{
"avoid": "上梁.开光.造屋.架马.合寿木.",
"date": "2019-10-12",
"suit": "造车器.嫁娶.订盟.纳采.会亲友.祭祀.出行.开市.立券.移徙.入宅.破土.安葬."
},
{
"avoid": "动土.破土.开市.安葬.",
"date": "2019-10-13",
"suit": "祭祀.作灶.纳财.捕捉.畋猎.余事勿取."
},
{
"avoid": "开市.开仓.出货财.安床.安门.安葬.",
"date": "2019-10-14",
"suit": "嫁娶.订盟.纳采.祭祀.祈福.出行.求医.治病.出火.移徙.入宅."
},
{
"avoid": "开光.嫁娶.会亲友.栽种.针灸.安葬.",
"date": "2019-10-15",
"suit": "冠笄.祭祀.沐浴.作灶.理发.整手足甲.扫舍.补垣.塞穴.入殓.破土.启攒."
},
{
"avoid": "造庙.造船.动土.破土.安葬.",
"date": "2019-10-16",
"suit": "纳采.订盟.嫁娶.祭祀.祈福.求嗣.置产.求医.治病.开市.交易.立券.会亲友.移徙.竖柱.上梁.造屋.合脊.安门.放水.捕捉.纳畜."
},
{
"avoid": "嫁娶.动土.破土.修坟.",
"date": "2019-10-17",
"suit": "出行.造车器.造畜椆栖.解除.冠笄.裁衣.作梁.雕刻.会亲友.移徙.入宅.安机械.造畜椆栖.开市.扫舍."
},
{
"avoid": "移徙.入宅.出行.祈福.嫁娶.",
"date": "2019-10-18",
"suit": "沐浴.理发.冠笄.安床.开市.立券.会亲友.交易.纳财.结网.教牛马."
},
{
"avoid": "嫁娶.开市.安床.掘井.",
"date": "2019-10-19",
"suit": "祭祀.造畜椆栖.修饰垣墙.平治道涂.余事勿取."
},
{
"avoid": "嫁娶.祭祀.入宅.造屋.移徙.",
"date": "2019-10-20",
"suit": "捕捉.结网.入殓.除服.成服.移柩.破土.安葬.启攒.立碑."
},
{
"avoid": "开光.嫁娶.掘井.伐木.作梁.",
"date": "2019-10-21",
"suit": "祭祀.祈福.求嗣.斋醮.造庙.出火.安机械.会亲友.开市.交易.立券.纳财.习艺.经络.求医.治病.开池.作厕.畋猎.结网.栽种.牧养.安葬.破土.启攒."
},
{
"avoid": "诸事不宜.",
"date": "2019-10-22",
"suit": "破屋.坏垣.余事勿取."
},
{
"avoid": "出行.祈福.安葬.作灶.",
"date": "2019-10-23",
"suit": "会亲友.嫁娶.订盟.纳采.纳婿.拆卸.修造.动土.起基.竖柱.上梁.安床.会亲友.纳财."
},
{
"avoid": "开仓.冠笄.伐木.作梁.",
"date": "2019-10-24",
"suit": "祭祀.塑绘.开光.祈福.斋醮.出行.订盟.纳采.裁衣.嫁娶.拆卸.修造.安床.入宅.安香.入殓.启攒.安葬.谢土.赴任.会亲友.进人口.出行.移徙.上梁.经络.开市.交易.立券.纳财."
},
{
"avoid": "栽种.动土.安葬.开市.",
"date": "2019-10-25",
"suit": "祭祀.作灶.入殓.除服.成服.畋猎."
},
{
"avoid": "作灶.入殓.安葬.安床.",
"date": "2019-10-26",
"suit": "祭祀.祈福.斋醮.沐浴.竖柱.订盟.纳采.嫁娶.拆卸.入宅.移柩.启攒.谢土.赴任.出火.纳畜."
},
{
"avoid": "动土.上梁.",
"date": "2019-10-27",
"suit": "嫁娶.祭祀.安机械.入殓.破土.安葬."
},
{
"avoid": "行丧.安葬.",
"date": "2019-10-28",
"suit": "作灶.造畜椆栖."
},
{
"avoid": "嫁娶.入宅.",
"date": "2019-10-29",
"suit": "沐浴.理发.入学.习艺.进人口."
},
{
"avoid": "开市.动土.破土.",
"date": "2019-10-30",
"suit": "开光.针灸.会亲友.启攒.安葬."
},
{
"avoid": "余事勿取.",
"date": "2019-10-31",
"suit": "祭祀.结网.造畜椆栖.余事勿取."
}
],
"holiday": [
{
"desc": "9月13日放假,与周末连休。",
"festival": "2019-9-13",
"list": [
{
"date": "2019-9-13",
"status": "1"
},
{
"date": "2019-9-14",
"status": "1"
},
{
"date": "2019-9-15",
"status": "1"
}
],
"list#num#baidu": 3,
"name": "中秋节",
"rest": "拼假建议:2019年9月9日(周一)~2019年9月12日(周四)请假4天,可拼9天中秋节小长假。"
},
{
"desc": "10月1日至10月7日放假,9月29日(星期日)、10月12日(星期六)上班。",
"festival": "2019-10-1",
"list": [
{
"date": "2019-10-1",
"status": "1"
},
{
"date": "2019-9-29",
"status": "2"
},
{
"date": "2019-10-2",
"status": "1"
},
{
"date": "2019-10-3",
"status": "1"
},
{
"date": "2019-10-4",
"status": "1"
},
{
"date": "2019-10-7",
"status": "1"
},
{
"date": "2019-10-12",
"status": "2"
},
{
"date": "2019-10-5",
"status": "1"
},
{
"date": "2019-10-6",
"status": "1"
}
],
"list#num#baidu": 9,
"name": "国庆节",
"rest": "拼假建议:10月8日(周二)~10月12日(周六)请5天假,可拼13天国庆节小长假。"
}
],
"holidaylist": [
{
"name": "元旦",
"startday": "2019-1-1"
},
{
"name": "除夕",
"startday": "2019-2-4"
},
{
"name": "春节",
"startday": "2019-2-4"
},
{
"name": "清明节",
"startday": "2019-4-5"
},
{
"name": "劳动节",
"startday": "2019-5-1"
},
{
"name": "端午节",
"startday": "2019-6-7"
},
{
"name": "中秋节",
"startday": "2019-9-13"
},
{
"name": "国庆节",
"startday": "2019-10-1"
}
],
"key": "2019年10月",
"selectday": "2019-10-1",
"url": "http://nourl.baidu.com/6018",
"loc": "http://open.baidu.com/q?r=2002753&k=2019%E5%B9%B410%E6%9C%88",
"SiteId": 2002753,
"_version": 2540,
"_select_time": 1556113509,
"clicklimit": "1-3",
"ExtendedLocation": "",
"OriginQuery": "2019年10月",
"tplt": "calendar_new",
"resourceid": "6018",
"fetchkey": "6018_2019年10月",
"appinfo": "",
"role_id": 10,
"disp_type": 0
}
]
}
PS:其中holiday中存放节假日信息,包括了补班信息,根据status字段区分(1.放假 2.补班)