需要安装lunardate和schedule
pip install lunardate
pip install schedule
完整代码:
import requests
from lunardate import LunarDate
import datetime
import schedule
import time
# 生日
birthdays = {
# '生日示例': {
# 'lunar_birthday': LunarDate(2000, 1, 1),
# 'solar_birthday': datetime.date(2000, 1, 1)
# },
'生日示例': {'lunar_birthday': LunarDate(2000, 1, 1)},
'生日示例': {'solar_birthday': datetime.date(2000, 1, 1)},
}
# 节日
festivals = {
'农历示例': {'lunar_date': LunarDate(2000, 1, 1)},
'公历示例': {'date': datetime.date(2000, 1, 1)},
}
# 发送请求的函数
def send_request(subject):
apiUrl = 'http://xxx.com/send-post.php'
sendkey = "xxx"
data = {
'sendkey': sendkey,
"msgtype": "text",
"text": 'Msg:\n'+subject
}
response = requests.post(apiUrl, data=data)
if response.status_code == 200:
print('请求发送成功')
else:
print(f'请求发送失败,状态码:{response.status_code}')
#
def check_and_send_birthday_msg():
# 配置参数
BIRTHDAY_REMIND_DAYS = 7 # 生日提前提醒天数
FESTIVAL_REMIND_DAYS = 7 # 节日提前提醒天数
# 获取当前日期
now = datetime.datetime.now()
today_solar = datetime.date.today()
today_lunar = LunarDate.fromSolarDate(
today_solar.year, today_solar.month, today_solar.day)
# 日期偏移计算(使用配置参数)
birthday_offset = datetime.timedelta(days=BIRTHDAY_REMIND_DAYS)
festival_offset = datetime.timedelta(days=FESTIVAL_REMIND_DAYS)
n_birthdayDays_later_solar = today_solar + birthday_offset
n_birthdayDays_later_lunar = today_lunar + birthday_offset
n_festivalDays_later_solar = today_solar + festival_offset
n_festivalDays_later_lunar = LunarDate.fromSolarDate(
n_festivalDays_later_solar.year, n_festivalDays_later_solar.month, n_festivalDays_later_solar.day)
# 生日提醒处理
def process_birthdays():
for friend, info in birthdays.items():
# 农历生日处理
if 'lunar_birthday' in info:
# 提前3天提醒
if (info['lunar_birthday'].month == n_birthdayDays_later_lunar.month and
info['lunar_birthday'].day == n_birthdayDays_later_lunar.day):
send_request(
f'{BIRTHDAY_REMIND_DAYS}天后是 {friend} 的农历生日[蛋糕]')
# 当天提醒
if (info['lunar_birthday'].month == today_lunar.month and
info['lunar_birthday'].day == today_lunar.day):
send_request(f'今天是 {friend} 的农历生日[蛋糕]')
# 阳历生日处理
if 'solar_birthday' in info:
# 提前3天提醒
if (info['solar_birthday'].month == n_birthdayDays_later_solar.month and
info['solar_birthday'].day == n_birthdayDays_later_solar.day):
send_request(
f'{BIRTHDAY_REMIND_DAYS}天后是 {friend} 的阳历生日[蛋糕]')
# 当天提醒
if (info['solar_birthday'].month == today_solar.month and
info['solar_birthday'].day == today_solar.day):
send_request(f'今天是 {friend} 的阳历生日[蛋糕]')
# 节日提醒处理
def process_festivals():
for festival, info in festivals.items():
# 公历节日处理
if 'date' in info:
solar_date = info['date'].replace(year=today_solar.year)
# 提前7天提醒
if solar_date == n_festivalDays_later_solar:
send_request(f'{FESTIVAL_REMIND_DAYS}天后是 {festival}(公历)!')
# 当天提醒
if solar_date == today_solar:
send_request(f'今天是 {festival}(公历)!')
# 农历节日处理
if 'lunar_date' in info:
# 提前7天提醒
if (info['lunar_date'].month == n_festivalDays_later_lunar.month and
info['lunar_date'].day == n_festivalDays_later_lunar.day):
send_request(f'{FESTIVAL_REMIND_DAYS}天后是 {festival}(农历)!')
# 当天提醒
if (info['lunar_date'].month == today_lunar.month and
info['lunar_date'].day == today_lunar.day):
send_request(f'今天是 {festival}(农历)!')
# 执行处理流程
process_birthdays()
process_festivals()
# 运行一次测试
check_and_send_birthday_msg()
让它每天执行就好了
参考原文: https://www.52pojie.cn/thread-1906430-1-1.html







Comments | NOTHING