背景

工作中经常遇到需要根据作息去做排班系统、跑定时报表任务、统一告警通道、巡检等等场景,之前是比较粗暴的区分周一~周五、周六和周日这样,遇到法定节假日时再手工调整一下
不是自己去调感觉还好,真落到自己头上来整,搞个两次就不想弄了

因此自己就满世界找现成的接口去搞,有点遗憾没找到,这才想着从源头去搞。还好几句爬虫,再上点正则

源代码放在了这里 https://github.com/itnotebooks/chinese-holiday

思路与实现

先看下目标网页内容及排版
https://www.gov.cn/zhengce/content/2022-12/08/content_5730844.htm

看了目标网页,整体思路如下:
1. 请求 BaseSearch url 查询指定年份的放假通知条目
2. 请求第1步查询到的放假通知页面的 URL
3. 分析页面,定位到 id = UCAP-CONTENT 的 div 容器,读取所有的 p 标签条目
4. 通过正则分析每个 p 标签的内容,判断是否为大写数字开头的序号,大写数字开头的序号为具体放假安排
5. 分析具体放假安排,取对应的年月日关键字;通过分析过往几年的通知内容,规律如下:
5.1 休息日还是工作日,会以以下两种文言描述
5.1.1 休息日:放假|补休|调休|公休
5.1.2 工作日:上班
5.2 具体的日期,会以以下三种文言描述:
5.2.1 [xxxx年]x月x日至[xxxx年][x月]x日
5.2.2 x月x日(星期x)、x月x日(星期x)

核心代码示例

调用站内搜索接口获取具体年份安排页面的URL

请求具体年份节假日安排公布页面,获取页面源代码,通过标签ID定位详细内容


如上图所示,对应的处理代码示例如下

逐条内容分析与日期转换

结果展示

将数据落库,封装成接口请求效果展示

查询2023年元旦安排

查询2023-10-08日是否为休息日

查询2023-09-30日是否为休息日

结合巡检任务的自动化处理示例

源代码放在了这里 https://github.com/itnotebooks/chinese-holiday



如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!

手把手搭建CI/CD(一)

gitlab + tekton + argoCD

阅读全文

Golang Terraform 创建阿里云ECS云主机

封装NewTerraform方法 将Terraform的环境相关信息都在这个方法内定义完成 1. Terraform工作目录定义 2. Plugins初始化,考虑到在线初始化太慢,这里是提前下...

阅读全文

Golang text/template 渲染terraform文件

定义模板 这里定义的是阿里云的ECS,考虑通用性,未使用扩展模块,而是使用了循环生成的方式提高灵活性,所以传入的是一个列表 range . 对于当前这个模板来说...

阅读全文

欢迎留言