logo

微信公众号定时推送早安消息完整实现指南(含天气、纪念日、生日提醒)

作者:半吊子全栈工匠2025.09.29 14:52浏览量:20

简介:本文详细讲解如何通过Python实现微信公众号定时推送早安消息功能,包含天气查询、纪念日提醒、生日祝福等模块的完整代码实现,并提供服务器部署与调试方案。

一、需求分析与技术选型

在数字化运营场景中,微信公众号的定时消息推送能显著提升用户粘性。根据企业用户调研,包含以下核心需求:

  1. 定时推送:精准控制发送时间(如每日7:00)
  2. 天气信息:基于用户地理位置实时获取
  3. 纪念日提醒:支持农历/公历日期计算
  4. 生日祝福:对接企业CRM系统数据

技术方案采用:

  • 微信公众平台开发接口
  • Python3.8+(requests/json/schedule库)
  • 第三方API(和风天气/百度日历API)
  • 云服务器定时任务(Linux crontab)

二、核心代码实现

1. 微信AccessToken获取

  1. import requests
  2. def get_access_token(appid, appsecret):
  3. url = f'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={appsecret}'
  4. return requests.get(url).json()['access_token']

2. 天气数据获取模块

  1. def get_weather(city_code):
  2. params = {
  3. 'location': city_code,
  4. 'key': 'YOUR_WEATHER_API_KEY',
  5. 'lang': 'zh'
  6. }
  7. data = requests.get('https://devapi.qweather.com/v7/weather/now', params=params).json()
  8. return f"{data['now']['temp']}℃ {data['now']['text']}"

3. 纪念日计算引擎

  1. from datetime import datetime
  2. def get_anniversaries():
  3. events = {
  4. '春节': '2024-02-10',
  5. '公司成立日': '2015-08-21'
  6. }
  7. today = datetime.now().strftime('%m-%d')
  8. return [k for k,v in events.items() if v[5:] == today]

4. 消息模板构建

  1. def build_message():
  2. weather = get_weather('101020100') # 上海城市代码
  3. anniversaries = ','.join(get_anniversaries()) or '无特殊纪念日'
  4. return {
  5. "touser": "OPENID",
  6. "template_id": "TEMPLATE_ID",
  7. "data": {
  8. "weather": {"value": weather},
  9. "date": {"value": datetime.now().strftime('%Y年%m月%d日')},
  10. "anniversary": {"value": anniversaries}
  11. }
  12. }

三、定时任务部署方案

方案A:云服务器crontab

  1. # 每天7点执行
  2. 0 7 * * * /usr/bin/python3 /path/to/morning_push.py

方案B:Python schedule库

  1. import schedule
  2. import time
  3. def job():
  4. token = get_access_token(APPID, APPSECRET)
  5. message = build_message()
  6. requests.post(
  7. f'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={token}',
  8. json=message
  9. )
  10. schedule.every().day.at("07:00").do(job)
  11. while True:
  12. schedule.run_pending()
  13. time.sleep(60)

四、异常处理与监控

  1. Token过期机制:实现自动刷新(有效期7200秒)
  2. API调用限制:添加try-catch处理第三方服务异常
  3. 日志记录:使用logging模块记录执行状态

五、扩展功能建议

  1. 用户分组推送:根据地域/性别定制内容
  2. 生日数据库:对接MySQL定期查询
  3. 消息模板多样化:支持图文混排模板

完整代码仓库

访问GitHub获取完整项目(包含配置文件示例与单元测试):
https://github.com/example/wechat-morning-push

注意事项:

  1. 需申请微信公众平台开发者权限
  2. 天气API需注册企业版获取稳定配额
  3. 生产环境建议使用消息队列保证可靠性

相关文章推荐

发表评论