从网络API接口中免费查询每年的工作日历

作者:青山常在人不老   阅读 (3353)  |  收藏 (0)  |  点赞 (0)

摘要

本文通过java调用工作日聚合API接口,并将每天的工作日封装成对象。


原文链接:从网络API接口中免费查询每年的工作日历

工作日实体类:

package com.example.demo.entity;

/**
 * @project:用户管理模块
 * @description:工作日历表 工作日历
 * @version 1.0.0
 * @errorcode
 *            错误码: 错误描述
 * @author
 *         <li>2019-01-23 www.blog-china.cn Create 1.0
 */
public class TkCalendarInfo {

    
    /**日期 */
    private String calendarDay;
    
    /**是否工作日 0:否1:是 */
    private String dayType;
    
    /**工作日类型 0表示工作日、为1节假日、为2双休日、3为调休日(上班) */
    private String dayCode;
    
    /**星期几 每周的第几天 */
    private String dayOfWeek;
    
    /**说明 */
    private String dayRemark;

    
    /**
     * @return 日期
     */
    public String getCalendarDay() {
        return calendarDay;
    }
    
    /**
     * @param calendarDay 日期
     */
    public void setCalendarDay(String calendarDay) {
        this.calendarDay = calendarDay == null ? null : calendarDay.trim();
    }
    
    /**
     * @return 是否工作日 0:否1:是
     */
    public String getDayType() {
        return dayType;
    }
    
    /**
     * @param dayType 是否工作日 0:否1:是
     */
    public void setDayType(String dayType) {
        this.dayType = dayType == null ? null : dayType.trim();
    }
    
    /**
     * @return 工作日类型 0表示工作日、为1节假日、为2双休日、3为调休日(上班)
     */
    public String getDayCode() {
        return dayCode;
    }
    
    /**
     * @param dayCode 工作日类型 0表示工作日、为1节假日、为2双休日、3为调休日(上班)
     */
    public void setDayCode(String dayCode) {
        this.dayCode = dayCode == null ? null : dayCode.trim();
    }
    
    /**
     * @return 星期几 每周的第几天
     */
    public String getDayOfWeek() {
        return dayOfWeek;
    }
    
    /**
     * @param dayOfWeek 星期几 每周的第几天
     */
    public void setDayOfWeek(String dayOfWeek) {
        this.dayOfWeek = dayOfWeek == null ? null : dayOfWeek.trim();
    }
    
    /**
     * @return 说明
     */
    public String getDayRemark() {
        return dayRemark;
    }
    
    /**
     * @param dayRemark 说明
     */
    public void setDayRemark(String dayRemark) {
        this.dayRemark = dayRemark == null ? null : dayRemark.trim();
    }
}
/**
 * CHANGE HISTORY
* M1 2020-08-23 guopengfei@bobfintech.com.cn Create
*/

调用的主逻辑:

package com.example.demo.rili;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Calendar;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import com.alibaba.fastjson.JSONObject;
import com.example.demo.entity.TkCalendarInfo;
import com.example.demo.mapper.TkCalendarInfoMapper;
import com.example.demo.util.StringUtils;

@RunWith(SpringRunner.class)
@SpringBootTest
public class RiLiRef {
    
    
    @Test
    public void refushDate() {
        String httpUrl = "http://api.tianapi.com/txapi/jiejiari/index";
        String[] paramKeys = new String[] { "89f79f0a8d2579a7d2fa0705c2d6596e",
                                            "905cc68a91f83312075aa5ea0656f4ca",
                                            "cec997546cb9353dbc8cbfd3b09d8b1d",
                                            "355a502e8665eb64c253f96459d6dbaf" };
        
        String param = "";
        Calendar c = Calendar.getInstance();
        int year = 2021;
        for (int i = 9; i < 12; i++) {
            if (i / 3 == 0) {
                param = "key=" + paramKeys[0] + "&";
            }
            else if (i / 3 == 1) {
                param = "key=" + paramKeys[1] + "&";
            }
            else if (i / 3 == 2) {
                param = "key=" + paramKeys[2] + "&";
            }
            else if (i / 3 == 3) {
                param = "key=" + paramKeys[3] + "&";
            }
            c.set(year, i, 1);
            int lastDay = c.getActualMaximum(Calendar.DAY_OF_MONTH);
            for (int x = 1; x <= lastDay; x++) {
                String day4No = year + "";
                String day = "date=" + year ;
                if (i + 1 < 10) {
                    day +="-0" + (i + 1);
                    day4No += "0" + (i + 1);
                }else {
                    day +="-" + (i + 1);
                    day4No += (i + 1);
                }
                
                if(x<10) {
                    day += "-0" + x;
                    day4No += "0" + x;
                }else {
                    day += "-" + x;
                    day4No += x;
                }
                if (day4No.length() != 8) {
                    System.out.println();
                }
                
                String jsonResult = request(httpUrl, param + day);
                System.out.println(jsonResult);
                JSONObject jsonObject = JSONObject.parseObject(jsonResult);
                if (jsonObject.getInteger("code") == 200) {
                    JSONObject dayDetail = jsonObject.getJSONArray("newslist").getJSONObject(0);
                    TkCalendarInfo tkCalendarInfo = new TkCalendarInfo();
                    tkCalendarInfo.setCalendarDay(day4No);
                    String dayCode = dayDetail.getString("daycode");
                    if (StringUtils.isBlank(dayCode)) {
                        System.out.println("" + dayCode);
                    }
                    tkCalendarInfo.setDayCode(dayCode);
                    String tip = dayDetail.getString("tip");
                    // 0表示工作日、为1节假日、为2双休日、3为调休日(上班)
                    if (StringUtils.equals(dayCode, "1")) {
                        tkCalendarInfo.setDayRemark("节假日" + tip);
                    }
                    else if (StringUtils.equals(dayCode, "3")) {
                        tkCalendarInfo.setDayRemark("为调休日(上班)" + tip);
                    }
                    String isnotwork = dayDetail.getString("isnotwork"); // 0为工作日,1为休息日
                    if (StringUtils.equals(isnotwork, "0")) {
                        tkCalendarInfo.setDayType("1");
                    }
                    else {
                        tkCalendarInfo.setDayType("0");
                    }
                    tkCalendarInfo.setDayOfWeek(dayDetail.getString("weekday"));
                    //tkCalendarInfoMapper.insert(tkCalendarInfo);
                    //TODO 封装的每个工作日对象,可以进行其他处理
                }
                else {
                    System.out.println("在日期:" + day4No + "截止");
                    break;
                }
            }
        }
    }
    
    /**
     * @param urlAll
     *            :请求接口
     * @param httpArg
     *            :参数
     * @return 返回结果
     */
    public static String request(String httpUrl, String httpArg) {
        BufferedReader reader = null;
        String result = null;
        StringBuffer sbf = new StringBuffer();
        httpUrl = httpUrl + "?" + httpArg;
        
        try {
            URL url = new URL(httpUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            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();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
}

上述的四个key是网上聚合API生成的KEY,大家可以拿来使用,只需要修改上面代码中的下面一行代码为对应的年份,即可生成当年的工作日情况

int year = 2021;

例如上面为2021年,就会生成2021年的工作日历

分类   项目开发逻辑
字数   7406

博客标签    工作日聚合API   工作日API接口  

评论