功能:调用万年历免费接口,获取返回的数据 分析数据入库
业务: 用户下单不可选择休息日下单,可以选择 日历中的补班日期。
不想人工维护,定时任务调用接口每天获取一次万年历。
使用的接口: 聚合数据 网址:https://dashboard.juhe.cn/
注册一下,实名认证一下就可以用了。点开api申请,里面找到万年历,每天免费100次调用
申请完之后会有一个 Key 这个替换demo中的key就能直接用了
package 你的包名;
import net.sf.json.JSONObject
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*
* 聚合数据 万年历接口
* csdn 灵活的胖子_
* */
public class Ppcal {
public static final String DEF_CHATSET = "UTF-8";
public static final int DEF_CONN_TIMEOUT = 30000;
public static final int DEF_READ_TIMEOUT = 30000;
public static String userAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.66 Safari/537.36";
//配置申请的KEY
public static final String APPKEY ="配置申请的KEY";
//2.获取近期假期
public static Map<String,Object> getRequest2(String yyyy_mm){
String result =null;
String url ="http://v.juhe.cn/calendar/month";//请求接口地址
Map params = new HashMap();//请求参数
params.put("key",APPKEY);//您申请的appKey
params.put("year-month",yyyy_mm);//指定月份,格式为YYYY-MM,如月份和日期小于10,则取个位,如:2012-1
Map<String,Object>map1 = new HashMap<String, Object>();
try {
result =net(url, params, "GET");
Filex.logs("ppcal.txt","返回数据——"+result);
JSONObject object = JSONObject.fromObject(result);
if(object.getInt("error_code")==0){
JSONObject jsonObject = JSONObject.fromObject(object);
Map<Object, Object> map = (Map)jsonObject;
Map<Object, Object> result1 = (Map)map.get("result");
//获取到返回的data值
Map<Object, Object> data = (Map)result1.get("data");
//所有节假日的多个
List<Map<Object,Object>> holiday = (List<Map<Object,Object>>)data.get("holiday");
for (int i = 0; i < holiday.size(); i++) {
Map<Object, Object> objectObjectMap = holiday.get(i);
List<Map<Object,Object>> list = (List<Map<Object,Object>>)objectObjectMap.get("list");
for (int j = 0; j <list.size() ; j++) {
//具体的某一个日期 date 日期 status 1是假期
Map<Object, Object> objectObjectMap1 = list.get(j);
Object data1 = objectObjectMap1.get("date");
Object status = objectObjectMap1.get("status");
map1.put(data1.toString(),status.toString());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return map1;
}
public static void main(String[] args) {
getRequest2("2020-12");
}
/**
*
* @param strUrl 请求地址
* @param params 请求参数
* @param method 请求方法
* @return 网络请求字符串
* @throws Exception
*/
public static String net(String strUrl, Map params, String method) throws Exception {
HttpURLConnection conn = null;
BufferedReader reader = null;
String rs = null;
try {
StringBuffer sb = new StringBuffer();
if(method==null || method.equals("GET")){
strUrl = strUrl+"?"+urlencode(params);
}
URL url = new URL(strUrl);
conn = (HttpURLConnection) url.openConnection();
if(method==null || method.equals("GET")){
conn.setRequestMethod("GET");
}else{
conn.setRequestMethod("POST");
conn.setDoOutput(true);
}
conn.setRequestProperty("User-agent", userAgent);
conn.setUseCaches(false);
conn.setConnectTimeout(DEF_CONN_TIMEOUT);
conn.setReadTimeout(DEF_READ_TIMEOUT);
conn.setInstanceFollowRedirects(false);
conn.connect();
if (params!= null && method.equals("POST")) {
try {
DataOutputStream out = new DataOutputStream(conn.getOutputStream());
out.writeBytes(urlencode(params));
} catch (Exception e) {
// TODO: handle exception
}
}
InputStream is = conn.getInputStream();
reader = new BufferedReader(new InputStreamReader(is, DEF_CHATSET));
String strRead = null;
while ((strRead = reader.readLine()) != null) {
sb.append(strRead);
}
rs = sb.toString();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
reader.close();
}
if (conn != null) {
conn.disconnect();
}
}
return rs;
}
//将map型转为请求参数型
public static String urlencode(Map<String,Object> data) {
StringBuilder sb = new StringBuilder();
for (Map.Entry i : data.entrySet()) {
try {
sb.append(i.getKey()).append("=").append(URLEncoder.encode(i.getValue()+"","UTF-8")).append("&");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
调用这个demo就可以了。
传的参数 是 年-月 注意:月如果小于10 前面不加0 如 : 2021-3
接口返回的数据示例:
{
"reason": "Success",
"result": {
"data": {
"year": "2021",
"year-month": "2021-3",
"holiday": "[{
\"desc\":\"2月11日至17日放假调休,共7天。2月7日(星期日)、2月20日(星期六)上班\",\"festival\":\"2021-2-12\",\"list\":[{
\"date\":\"2021-2-11\",\"status\":\"1\"},{
\"date\":\"2021-2-12\",\"status\":\"1\"},{
\"date\":\"2021-2-13\",\"status\":\"1\"},{
\"date\":\"2021-2-14\",\"status\":\"1\"},{
\"date\":\"2021-2-15\",\"status\":\"1\"},{
\"date\":\"2021-2-16\",\"status\":\"1\"},{
\"date\":\"2021-2-17\",\"status\":\"1\"},{
\"date\":\"2021-2-7\",\"status\":\"2\"},{
\"date\":\"2021-2-20\",\"status\":\"2\"}],\"list#num#\":9,\"name\":\"春节\",\"rest\":\"2月18,2月19,2月20请假三天,连周末可以连休11天\"},{
\"desc\":\"4月3日至5日放假调休,共3天\",\"festival\":\"2021-4-4\",\"list\":[{
\"date\":\"2021-4-3\",\"status\":\"1\"},{
\"date\":\"2021-4-4\",\"status\":\"1\"},{
\"date\":\"2021-4-5\",\"status\":\"1\"}],\"list#num#\":3,\"name\":\"清明节\",\"rest\":\"\"}]",
"holiday_array": [
{
"desc": "2月11日至17日放假调休,共7天。2月7日(星期日)、2月20日(星期六)上班",
"festival": "2021-2-12",
"list": [
{
"date": "2021-2-11",
"status": "1"
},
{
"date": "2021-2-12",
"status": "1"
},
{
"date": "2021-2-13",
"status": "1"
},
{
"date": "2021-2-14",
"status": "1"
},
{
"date": "2021-2-15",
"status": "1"
},
{
"date": "2021-2-16",
"status": "1"
},
{
"date": "2021-2-17",
"status": "1"
},
{
"date": "2021-2-7",
"status": "2"
},
{
"date": "2021-2-20",
"status": "2"
}
],
"list#num#": 9,
"name": "春节",
"rest": "2月18,2月19,2月20请假三天,连周末可以连休11天",
"list_num": 9
},
{
"desc": "4月3日至5日放假调休,共3天",
"festival": "2021-4-4",
"list": [
{
"date": "2021-4-3",
"status": "1"
},
{
"date": "2021-4-4",
"status": "1"
},
{
"date": "2021-4-5",
"status": "1"
}
],
"list#num#": 3,
"name": "清明节",
"rest": "",
"list_num": 3
}
]
}
},
"error_code": 0
}
今天的文章java 万年历接口分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30835.html