中国法定节假日API

Date: November 16, 2021

1.背景

目前业务需求中,需要分析法定节假日。我们日常查看法定节假日,都是在百度或者某些日历中查看。但是,网上很少有通过API获得节假日的方法。因此,就自己查找资料,整理了一套脚本,获取相关节假日。

2.相关资料查找

能够获取1990年至2050年法定节假日:https://blog.csdn.net/nayi_224/article/details/109068470

百度万年历OPENAPI(只能获取2020年之前的,后面收费了): https://blog.csdn.net/flyingLF/article/details/106426427

开源工具箱 ( https://tool.bitefu.net/ )

其节假日API: https://www.kancloud.cn/xiaoggvip/holiday_vip/1606900

开源工具箱的API比较可靠,可以日常使用,使用方式如下:

API地址:http://tool.bitefu.net/jiari/
请求方式:GET
请求参数:d (日期/年月/年份)
返回参数:请求一天,返回对应节假日状态(0-工作日, 1-休息日, 2-节假日)
请求示例:1.获取某一天的节假日状态:http://tool.bitefu.net/jiari/?d=20111001返回结果: 2
2.获取某月的节假日:http://tool.bitefu.net/jiari/?d=202110返回结果: {"202110":{"1001":2,"1002":2,"1003":2,"1004":1,"1005":1,"1006":1,"1007":1}}
2.获取多月的节假日:http://tool.bitefu.net/jiari/?d=202110,202111返回结果: {"202110":{"1001":2,"1002":2,"1003":2,"1004":1,"1005":1,"1006":1,"1007":1},"202111":false}
3.获取某年的节假日:http://tool.bitefu.net/jiari/?d=2010返回结果: 与月的接口类似

3.相关脚本开发

3.1 解析json数据脚本

以下脚本内容,通过开源 REST API,对结果进行json解析,得到节假日数据。

# -*- coding: utf-8 -*-#python 代码解析法定节假日json#导入请求包
import requests
#导入json包
import json
#导入系统包
import sysdef get_state_legal_holiday(cur_year,file_path):DATE_URL="https://tool.bitefu.net/jiari/?d=%s" % (cur_year)result=requests.get(DATE_URL)if result.status_code != 200 :sys.exit(-1)  #报错退出else:dict_data=result.json()for year_key in dict_data.keys():dict_days=dict_data.get(year_key)  #根据key,获取对应的节假日if dict_days == False:   # false 的情况数据无法获取print("===>当前年份 【%s】数据不存在,跳过" % year_key)continueelse :print("===>当前年份 【%s】数据存在,详细数据如下:%s " % (year_key,dict_days) )for day_key in dict_days.keys():day_status=dict_days.get(day_key) #节假日状态: 0-工作日, 1-休息日, 2-节假日,这里获取的休日实际是调休的节假日day_res=(str(year_key)+day_key ) +',' + str(year_key)+',' + str(day_status) + '\n'with open(file_path,'a',encoding='utf-8') as file:file.write(day_res)         #csv对应字段: f_date_id,f_year_id,f_statusdef main():if(len(sys.argv)<3):  #参数不足,默认参数是脚本本身,传参下标从1开始print('USAGE ERROR,PLEASE USE LIKE THIS: PYTH_SCRIPT_PATH START_YEAR END_YEAR [RESULT_FILE_PATH]' )sys.exit(-1)elif(len(sys.argv)==3):  # 传递2个参数,start_year,end_yearstart_year=int(sys.argv[1])end_year=int(sys.argv[2])result_file_path="./state_holiday.csv"else:  #传递3个参数,start_year,end_year,result_file_pathstart_year=int(sys.argv[1])end_year=int(sys.argv[2])result_file_path=sys.argv[3]print("===>相关参数:起始年份(包含):%s ,截至年份(包含):%s ,数据存储路径:%s " % (str(start_year),str(end_year),result_file_path))for cur_year in range(start_year,end_year+1):print('====> cur_year=%s' % str(cur_year))get_state_legal_holiday(cur_year,result_file_path)if __name__ == '__main__' :main()

3.2 数据更新的脚本

以下脚本,T+1 执行,调用JSON解析脚本,获得结果数据,并写入对应表中。

#!/bin/bash##国家法定节假日查询更新export HADOOP_USER_NAME=bigdataif [ $# -eq 0 ]; thencurrent_year=$(date  +'%Y')begin_year=${current_year}end_year=${current_year}
elif [ $# -eq 1 ]; thenbegin_year=$1end_year=$1
elif [ $# -eq 2 ]; thenbegin_year=$1end_year=$2
elseecho "USAGE: $0 begin_year end_year"exit 0
fiCUR_TIMESTAMP=$(date +'%s')#命令配置
BEELINE_CMD="beeline -u jdbc:hive2://node01:10000 -n bigdata "
IMPALA_CMD="impala-shell -i node02:25003 -u bigdata "WORK_DIR=$PWD/dwd_risk_data_day_flow#数据HIVE存在状态(默认为0,不存在)
CHECK_STATUS=0#查验hive中是否存在该年度数据
function check_year_data_exist(){CUR_YEAR=$1
CHECK_SQL="SELECT COUNT(*) CNT FROM dw.dim_state_legal_holiday where f_year_id='${CUR_YEAR}'  ;"
YEAR_DATA_CNT=$( $IMPALA_CMD -B -q "${CHECK_SQL}"  )if [ $? -ne 0 ];then echo "there is an error!" ; exit 1 ; fiif [ ${YEAR_DATA_CNT} -gt 0 ];thenecho "===>当前年度【${CUR_YEAR}】的节假日数据已存在,为防请求过多导致IP拦截,不进行请求"CHECK_STATUS=1
elseCHECK_STATUS=0
fi}function update_holiday_data(){cur_year="$1"RESULT_FILE="state_holiday-${cur_year}.csv"
RESULT_PATH=$WORK_DIR/$RESULT_FILE
HDFS_LOAD_PATH="/tmp/bigdata/${RESULT_FILE}"/opt/anaconda3/bin/python ${WORK_DIR}/state_legal_holiday_parse.py ${cur_year} ${cur_year} "${RESULT_PATH}"if [ $? -ne 0 ];then echo "there is an error!" ; exit 1 ; fihdfs dfs -rm -f ${HDFS_LOAD_PATH}hdfs dfs -put ${RESULT_PATH} ${HDFS_LOAD_PATH}LOAD_DATA_SQL="LOAD DATA INPATH '${HDFS_LOAD_PATH}' OVERWRITE INTO TABLE tmp.dim_state_legal_holiday ; "$BEELINE_CMD -e "${LOAD_DATA_SQL}"if [ $? -ne 0 ];then echo "there is an error!" ; exit 1 ; fiUPDATE_DATA_SQL="
REFRESH tmp.dim_state_legal_holiday ;
REFRESH dw.dim_state_legal_holiday ;
INSERT OVERWRITE TABLE dw.dim_state_legal_holiday
select
f_date_id,
f_year_id,
f_status
from(SELECTf_date_id,f_year_id,f_status,row_number() over(partition by f_date_id order by f_date_id ) rankFROM(--增量数据selectf_date_id,f_year_id,f_statusfrom tmp.dim_state_legal_holidayunion all--原有数据selectf_date_id,f_year_id,f_statusfrom dw.dim_state_legal_holiday) t) p
where rank=1
;
"$IMPALA_CMD -q "${UPDATE_DATA_SQL}"if [ $? -ne 0 ];then echo "there is an error!" ; exit 1 ; fi}function main(){for((cur_year=${begin_year};cur_year<=${end_year};cur_year++));
docheck_year_data_exist ${cur_year}if [ ${CHECK_STATUS} -eq 1 ];thencontinuefiupdate_holiday_data ${cur_year}done}mainexit 0

如有用处,烦请点赞收藏^_^

大数据基础数据之中国法定节假日API相关推荐

  1. 中国法定节假日天数以及世界各国放假天数

    背景 探讨下中国的法定节假日天数以及对比世界各国. 对比 1.中国 看起来很多对吧?实际是东拼西凑凑出来的.即使作者,也有时候被弄糊涂了,比如五一假期究竟是放假1天还是3天,还以为五一假期放假3天,实 ...

  2. 数据基础---数据可视化

    python中数据可视化 关于统计的几个概念 频率直方图 在统计数据时,按照频数分布表,在平面直角坐标系中,横轴标出每个组的端点(按类别统计时就是按类别分组),纵轴表示频数,每个矩形的高代表对应的频数 ...

  3. kettle 批量多表同步_财务基础数据同步的方式

    全文共计1800字,预计阅读时间: 5 分钟 良人一句三冬暖,伤人一语六月寒! 前言 介绍财务进销存系统框架时,一直在说财务数据需要进行分层,从基础数据到计算层,再到财务数据层,最后是展现层,每层间都 ...

  4. 怎么做到ERP基础数据快速简单管理

     在ERP系统中,ERP项目实施成功靠的是三分技术,七分管理,十二分数据.故数据整理十分重要,而整理ERP基础数据和数据管理是工作量大且很繁琐的过程.很多人会认为很难,但只要找对数据整理方法和合适 ...

  5. 【文末有惊喜!】iOS日历攻略:提醒调休并过滤法定节假日

    本文字数:4281字 预计阅读时间:29分钟 背景 笔者五一之前补班的时候,闹钟没响,早上差点迟到了.笔者闹钟设置的是周一到周五,因为iPhone没有法定节假日和补休的设置....笔者就想要解决这个痛 ...

  6. java 法定节假日_【java】如何获得每年的法定节假日期以及全年的日历

    每年的节假日都在变动,如果人工录入会比较麻烦.有相关方面的接口可以调用吗? 回答 谢谢上面的同学热心帮助,我挨个试过去 还是用easybots来实现比较符合项目要求 通过把12个月份传进去 来获取整年 ...

  7. php根据当前日期判断法定节假日_PHP 判断当前日期是否是法定节假日或者休息日 (原)...

    //判断日期是不是节假日或者双休日接口 @param time [时间(时间戳或者Y-m-d都可)] public function get_type_by_date(){ $t = $_GET['t ...

  8. java节假日算法_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法...

    一.前言 最近工作上遇到一个问题,后端有一个定时任务,需要用JAVA每天判断法定节假日.周末放假,上班等情况,其实想单独通过逻辑什么的去判断中国法定节假日的放假情况,基本不可能,因为国家每一年的假期可 ...

  9. java 农历 节假日_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法...

    一.前言 最近工作上遇到一个问题,后端有一个定时任务,需要用JAVA每天判断法定节假日.周末放假,上班等情况,其实想单独通过逻辑什么的去判断中国法定节假日的放假情况,基本不可能,因为国家每一年的假期可 ...

最新文章

  1. C++ 引用类型简介
  2. 计算机网络玩家需要掌握的八个DOS命令
  3. mysqldumper
  4. C++11 std::function, std::bind, std::ref, std::cref
  5. Windows下判断文件是否存在
  6. docker hub加速访问hub.docker.com
  7. 【caffe学习】caffe第二个比较典型的识别例子CIFAR_10的运行详解
  8. python实战代码目录信息
  9. python优化算法_Python最优化算法实战
  10. HMC5883L校准
  11. Crosses and Crosses POJ - 3537 (博弈)
  12. Asis CTF 2016 b00ks(堆溢出NULL byte off-by-one)
  13. node.js使用ass生成视频字幕(上)
  14. 设计模式(工厂模式)
  15. 玩抖音必知的3个数据分析工具:会用它们,少走很多弯路
  16. JSON解析基础使用知识-Java
  17. 电子信息(非全)考研分析——大连理工VS哈工程
  18. <artifactId>spring-boot-maven-plugin</artifactId> 这一行在POM.xml文件中一直爆红,如何解决.问题记录日期:2020-09-05
  19. R语言辅导高维数据的主成分pca、 t-SNE算法降维与可视化分析案例报告
  20. c语言输出名人名言大全,编程语言之父6大经典名言,C语言之父这一段代码你见过吗?...

热门文章

  1. 简易网页(HTML)
  2. swiper 轮播 多行多列 横向排列
  3. Stm32的GPIO驱动继电器
  4. 华三防火墙配置IPSec隧道
  5. 最基础硬件学习 | 简单闪烁灯制作
  6. mysql---运维角度浅谈MySQL数据库优化
  7. 影视小程序详细搭建教学(非微擎)
  8. 电影沙龙之《黑镜-白熊公园》
  9. tabbaritem 图片太大解决方案
  10. Hacking JWT(JSON Web Token)