原创内容,转载请注明出处:https://www.myzhenai.com.cn/post/4608.html
因为我的几个博客上都有自动获取节日日期并显示灯笼效果,像一些固定日期的节日比较好处理,问题就在一些农历的节日获取上有一些难度,也不是说不能处理,但是要么需要调用一些接口,要么需要安装一些库和类。
我不太想安装一些库和类,同时调用的一些接口又担心不太稳定,所以一直在找稳定的接口,终于找到了一个,香港天文台的农历接口。
shell获取每年农历节日的日期:https://www.myzhenai.com.cn/post/3711.html
自动获取节日日期并显示灯笼效果的PHP源码:https://www.myzhenai.com.cn/post/3724.html
为了使用稳定的接口,所以我找到了香港天文台的一个接口,这个可以说是非商用和可以稳定的接口了,但香港中文台的接口只能查询一天,我需要的是一次查询一年的,然后在本地调用查询就可以了。
所以在这里需要用到Shell接所有天数的对照都curl一遍。
香港天文台接口地址:https://data.weather.gov.hk/weatherAPI/opendata/lunardate.php?date=2025-01-29
Shell代码
#!/bin/bash # 定义香港天文台 API 的基础 URL API_URL="https://data.weather.gov.hk/weatherAPI/opendata/lunardate.php?date=" # 定义输出文件路径 OUTPUT_FILE="/path/to/your/project/jieri.json" # 当前年份 YEAR=$(date +%Y) # 指定的农历节日名称 FESTIVALS=("除夕" "春节" "元宵" "端午" "七夕" "中秋") # 日期和节日映射数组 declare -A FESTIVAL_DATES # 定义每个节日的农历日期(示例) declare -A LUNAR_DATES LUNAR_DATES=( ["除夕"]="腊月廿九" ["春节"]="正月初一" ["元宵"]="正月十五" ["端午"]="五月初五" ["七夕"]="七月初七" ["中秋"]="八月十五" ) # 遍历每一天,查找匹配的节日 for month in {01..12} do for day in {01..31} do # 当前日期 date="$YEAR-$month-$day" # 调用 API 获取农历信息 response=$(curl -s "$API_URL$date") # 提取农历日期 lunar_date=$(echo "$response" | jq -r '.LunarDate') # 检查是否为指定的农历节日 for festival in "${!LUNAR_DATES[@]}" do if [ "$lunar_date" == "${LUNAR_DATES[$festival]}" ]; then FESTIVAL_DATES["$festival"]="$date" fi done done done # 将结果保存为 JSON 文件 echo "{" > $OUTPUT_FILE for festival in "${!FESTIVAL_DATES[@]}" do echo " \"$festival\": \"${FESTIVAL_DATES[$festival]}\"," >> $OUTPUT_FILE done # 删除最后一个逗号并关闭 JSON sed -i '$ s/,$//' $OUTPUT_FILE echo "}" >> $OUTPUT_FILE echo "节日数据已保存到 $OUTPUT_FILE"
#!/bin/bash # API接口地址 API_URL="https://data.weather.gov.hk/weatherAPI/opendata/lunardate.php" # 当前年份 YEAR=$(date +%Y) # 农历节日对应的农历日期 FESTIVALS=("除夕" "春节" "元宵" "七夕" "端午" "中秋") # 初始化jieri.json echo "[]" > jieri.json # 循环遍历每个农历节日 for FESTIVAL in "${FESTIVALS[@]}" do # 从年初开始查询,直到找到对应的节日 LUNAR_DATE=$(date -d "$YEAR-01-01" +%m-%d) while [ "$LUNAR_DATE" != "$FESTIVAL" ] do JSON=$(curl -s "${API_URL}?date=${YEAR}-${LUNAR_DATE//-/}") LUNAR_INFO=$(echo $JSON | sed 's/.*"LunarDate":" $[^"]*$ ".*/\1/') if [ "$LUNAR_INFO" == "$FESTIVAL" ]; then # 找到对应的节日,将其添加到jieri.json echo ",{\"date\":\"$YEAR-${LUNAR_DATE//-/}\",\"festival\":\"$FESTIVAL\"}" >> jieri.json break fi LUNAR_DATE=$(date -d "$YEAR-${LUNAR_DATE//-/} + 1 day" +%m-%d) done done # 移除jieri.json文件开头的逗号 sed -i 's/^,//' jieri.json
0 0 1 1 * /path/to/your/script.sh
每年1月1日自动执行脚本
sicnature ---------------------------------------------------------------------
I P 地 址: 3.133.135.106
区 域 位 置: 美国
系 统 信 息:
Original content, please indicate the source:
同福客栈论坛 | 蟒蛇科普 | 海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source http://myzhenai.com/post/4608.html
没有评论