大数据基础数据之中国法定节假日API

这篇具有很好参考价值的文章主要介绍了大数据基础数据之中国法定节假日API。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

中国法定节假日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 sys

def 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)
                continue
            else :
                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_status

def 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_year
        start_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_path
        start_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=bigdata

if [ $# -eq 0 ]; then
    current_year=$(date  +'%Y')
    begin_year=${current_year}
    end_year=${current_year}
elif [ $# -eq 1 ]; then
    begin_year=$1
    end_year=$1
elif [ $# -eq 2 ]; then
    begin_year=$1
    end_year=$2
else
    echo "USAGE: $0 begin_year end_year"
    exit 0
fi

CUR_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 ; fi

if [ ${YEAR_DATA_CNT} -gt 0 ];then
    echo "===>当前年度【${CUR_YEAR}】的节假日数据已存在,为防请求过多导致IP拦截,不进行请求"
    CHECK_STATUS=1
else
    CHECK_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 ; fi

hdfs 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 ; fi

UPDATE_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
    (
    SELECT
    f_date_id,
    f_year_id,
    f_status,
    row_number() over(partition by f_date_id order by f_date_id ) rank
    FROM
        (
        --增量数据
        select
        f_date_id,
        f_year_id,
        f_status
        from tmp.dim_state_legal_holiday
        union all
        --原有数据
        select
        f_date_id,
        f_year_id,
        f_status
        from 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++));
do
    check_year_data_exist ${cur_year}

    if [ ${CHECK_STATUS} -eq 1 ];then
        continue
    fi

    update_holiday_data ${cur_year}

done

}

main

exit 0

如有用处,烦请点赞收藏^_^文章来源地址https://www.toymoban.com/news/detail-448395.html

到了这里,关于大数据基础数据之中国法定节假日API的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JAVA判断当前时间是否为节假日、周末、工作日,调休日,不报错:IOException!

    有这么个需求,需要判断传的这个日期是否为节假日,周末,工作日,然后做剩下的操作。 1.首先需要拿到节假日api 节假日API地址 其实这个api里有接口可以直接判断某天是否为周末,节假日,工作日; 但是这个接口访问多了会报一个403的错误,也就是请求太多导致的; 而我

    2024年02月14日
    浏览(39)
  • 基于Anylogic仿真系统的节假日城市轨道交通大客流优化—以春熙路地铁站为例

    目 录 1绪论 1 1.1研究背景与意义 1 1.2国内外研究现状 1 1.2.1国外研究现状 1 1.2.2国内研究现状 2 1.3研究内容 2 2春熙路地铁站交通特性分析 4 2.1车站布局分析 4 2.1.1春熙路站概况 4 2.1.2站厅层设施布局分析 4 2.1.3站台层设施布局分析 5 2.2车站运营流程分析 6 2.2.1乘客进出站流程 6

    2024年02月02日
    浏览(42)
  • “中国法研杯”司法人工智能挑战赛:基于UTC的多标签/层次分类小样本文本应用,Macro F1提升13%+

    相关文章推荐: 本项目主要完成基于UTC的多标签应用,更多部署细节请参考推荐文章。本项目提供了小样本场景下文本多标签分类的解决方案,在 UTC的基础上利用提示学习取得比微调更好的分类效果,充分利用标注信息。 项目背景: 近年来,大量包含了案件事实及其适用法

    2024年02月05日
    浏览(52)
  • 【Python 实战基础】 如何绘制中国地图展示省份GDP数据

    目录 一、实战场景 二、主要知识点 文件读写 基础语法 字符串处理 文件生成 数据构建 循环遍历 三、菜鸟实战 1、创建 python 文件 2、运行结果 实战场景: 如何绘制中国地图展示省份GDP数据 马上安排! Hello,菜鸟实战 实战场景:  如何绘制中国地图展示省份GDP数据  * Serv

    2024年02月10日
    浏览(35)
  • 中国院士称“我国已具备 ChatGPT 发展基础”

    中国工程院院士王坚称「我国已具备支撑 ChatGPT 发展的算力基础」,“解好电力行业的关键问题,有可能会引领下一波AI浪潮。”中国工程院院士、阿里云icon创始人王坚2月17日在南方电网总部参加第四届电力调度AI应用大赛时表示。 我认为要开发出chatGPT这样的软件需要有以下

    2024年02月07日
    浏览(39)
  • 算法基础-数学知识-欧拉函数、快速幂、扩展欧几里德、中国剩余定理

    互质就是两个数的最大公因数只有1,体现到代码里面就是 a和b互质,则b mod a = 1 mod a (目前我不是很理解,但是可以这样理解:a和b的最大公因数是1,即1作为除数和b作为除数时,对于被除数a来说余数是一样的,即1/a的余数和b/a是一样的,即 b mod a = 1 mod a ) 欧拉函数的作用是

    2024年02月09日
    浏览(42)
  • Android高级UI进阶之路(七)——SVG基础使用(绘制中国地图)

    Android高级UI进阶之路(一) —— View的基础知识 Android高级UI进阶之路(二) —— 深入理解Android8.0 View的触摸事件分发机制 Android高级UI进阶之路(三) —— 理解View的工作原理及自定义View入门 Android高级UI进阶之路(四) —— Paint渲染滤镜xfermode使用 Android高级UI进阶之路(五) —— Canva

    2024年02月05日
    浏览(37)
  • Android-高级-UI-进阶之路-(七)-SVG-基础使用-+-绘制中国地图

    输入搜索动画 利用在线绘制 SVG 图标网站 制作搜索图标 可以自己随意捣鼓绘制,绘制好了之后点击视图-源代码,将 SVG 代码复制出来保存成 search_svg.xml 在线转换 svg2vector 点击空白或者直接将 SVG 拖拽指定区域进行转换 将转换好的 Android 格式的 vector 导入 AS 开始制作动画关联

    2024年03月20日
    浏览(52)
  • 联想全面打造AI导向的智能基础设施,领跑中国智能化变革

    8月18日,“智算无限 全栈智能   联想AI算力战略暨AI服务器新品发布会” 在银川 成功 举办 。 会上,联想 对外 发布 联想AI算力战略以及两款AI服务器新品, 同时还推出了联想智算中心解决方案和服务核心产品 。 联想通过 AI内嵌的智能终端、AI导向的基础设施、AI原生的方案

    2024年02月12日
    浏览(42)
  • 再获认可!万里数据库参编中国信通院数据库研究报告 GreatSQL入选中国数据库产业图谱

    当前,全球数字经济加速发展,数据正在成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。 数据库作为存储与处理数据的关键技术,在数字经济浪潮下,不断涌现新技术、新业态、新模式。 7月4-5日, 由中国通信标准化协会和中国信息通信研究院主

    2024年02月13日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包