Mac和iPhone中的日历和提醒事项APP功能强大,但是对内节假日和国务院办公厅发布的《节假日安排通知》支持不友好。

网上也有提供一些个人分享的订阅地址,但问题很多:

  • 有的更新不及时
  • 有的自己手动编辑存在错漏
  • 有的还因为分享人取消失效了

作为开发人员不能忍,自己写个程序来爬国务院办公厅的《节假日安排通知》来生成ics订阅文件

奉上订阅地址:

https://mtjo.net/icalendar/holidays.ics #中国法定节假日
https://mtjo.net/icalendar/holidays.json #中国法定节假日json格式
https://calendars.icloud.com/holidays/cn_zh.ics #中国节假日(苹果官方提供,包含24节气)

怎么订阅

  • iPhone / Mac:点 webcal://mtjo.net/icalendar/holidays.ics,系统会直接打开「日历」并提示添加订阅;也可以在「日历 → 文件 → 新建日历订阅」里粘贴 https://mtjo.net/icalendar/holidays.ics。
  • 其他客户端:用 https://mtjo.net/icalendar/holidays.ics,凡是支持 iCalendar(RFC 5545)的都能导入。
  • JSON:https://mtjo.net/icalendar/holidays.json,给脚本用。

订阅只要做一次,之后日历自己回来取。服务端会带 ETag / Last-Modified,内容没变时直接回 304,不会反复下载整个日历;同时支持 gzip,实际传输两三 KB。

MacOS / IPHONE 点击当前地址订阅

iphone 原相机扫码订阅

iphone 原相机扫码订阅

参数

  • 公告按发布时间倒序取前 num 条,新一年的安排一发布(往年都是 11 月初)就会自动出现,不用改订阅地址
  • 公告列表缓存 1 小时,每份公告的解析结果按年长期缓存并落在服务器上(公告发布后内容不会变),往年数据不再重复抓取,gov.cn 老页面失效也不影响已有年份;假期和补班分开标注,补班是全天事件且不占用时间(TRANSP:TRANSPARENT)

简单说一下原理:

通过国务院办公厅的搜索接口按发布时间倒序取最近的若干份《节假日安排的通知》,再逐份解析正文:

查看数量是否有变化:

 

有更新则执行爬取内容解析成ics