Python实现微信自动提醒:基于石墨文档与Server酱的定时任务方案
本文介绍如何利用Python构建微信自动提醒系统。通过Selenium模拟登录石墨文档获取待办事项,结合APScheduler设置每日定时任务,并利用Server酱API将筛选后的当日任务推送到微信。方案包含登录模拟、数据解析、消息推送及运行监测完整流程,适用于个人效率管理。
近期工作内容繁杂,容易遗漏事务。尽管记录了备忘录,但常因忘记查看而失效。鉴于微信的高频使用特性,设计并实现了一套基于微信的提醒系统。核心逻辑是将待办事项存储于在线记事本,通过配置定时任务,每日清晨自动爬取文档内容,筛选出当日需处理的项目,并利用Server酱接口将提醒发送至个人微信。
1. 数据记录与提取机制
1). 任务记录规范
为确保数据可被程序高效抓取,建议选用网页版在线记事本。此类工具众多,本文以“石墨文档”为例进行演示。记录格式可根据实际需求及爬虫逻辑自定义,例如在11月20日前预设的任务清单如下所示:
11月21日 9:30 吃饭
11月21日 12:30 睡觉
11月21日 14:00 打豆豆
11月22日 9:00 去南极旅游
11月23日 18:00 请豆豆吃火锅
2). 模拟登录实现
通过爬虫提取待办事项时,发现在线记事本平台具备登录验证机制:
实现模拟登录的方式多样,此处采用Selenium进行自动化操作。在“手机号或邮箱”及“密码”输入框中填入账户凭证,点击“立即登录”按钮完成身份验证。部分核心实现代码如下:
3). 任务数据提取
登录成功后,需导航至存储待办事项的页面。利用selenium.webdriver对象的page_source属性可直接获取页面HTML源码,经解析后即可提取待办事项数据。具体代码如下:
实际使用中,记事本可能包含大量分散日期的事项,无需对全部历史数据进行提醒。优化策略是仅筛选并推送当日需处理的事项,以提升提醒效率。筛选逻辑的核心在于获取系统当前日期,并与各事项的待办日期进行逐一比对,代码实现如下:
2. 信息推送到微信
1). Server酱工具介绍
实现微信消息推送,推荐一款便捷工具——Server酱。其本质是一款向指定微信账号发送消息的服务,具备功能简单、轻量易用等特点。使用Server酱主要包含以下步骤:
- 注册登录:使用GitHub账号登录官网,获取专属SCKEY密钥。
- 微信绑定:通过微信扫描二维码完成账号绑定。
- 发送消息:向 http://sc.ftqq.com/SCKEY.send 发起GET请求,即可在微信端接收消息。
此外,Server酱提供网页版在线工具供体验测试。需注意的是,Server酱初始设计用于服务器报警监测,因此设有频率限制:每人每日上限500条,相同内容5分钟内不可重复发送,不同内容每分钟限发30条。对于本提醒系统而言,该限制完全满足日常需求。
2). 信息推送实现
了解Server酱后,验证其推送效果。
首先确定发送GET请求的目标URL,该URL的关键参数为前文获取的SCKEY。随后设置消息标题与正文内容,向目标URL发起请求即可完成推送。若配置正确,微信端将立即收到Server酱发送的提醒信息。
3. 定时任务配置与运行监测
1). 定时任务设置
为实现自动化提醒,需配置定时任务。此处选用APScheduler框架,该框架基于Quartz开发,提供多种调度器。由于任务在当前进程内执行,选择BlockingScheduler调度器,并通过add_job方法动态添加待执行任务。
APScheduler的基本用法较为直观:
- entrance为主功能函数,负责爬取在线记事本数据、筛选当日待办事项,并通过Server酱推送到微信;
- day_of_week指定任务在一周内的执行日期,0-6分别对应周一至周日,也可指定特定值,如‘0'表示仅在周一执行;
- hour、minute和second分别指定任务执行的时、分、秒。这些参数既可指定具体数值,也可像day_of_week一样设置范围或执行间隔频率。
将程序部署至服务器后,调用start()方法启动调度器。如此,每日早上7:30即可在微信中收到当日待办事项的提醒。
2). 运行状态监测
为确保程序持续稳定运行,需建立监测机制。前文提及,Server酱通过GET请求推送信息,该请求返回JSON格式数据,示例为“{'errno': 0, 'errmsg': 'success', 'dataset': 'done'}”。若errno值为0,表示发送成功;否则errmsg字段将包含错误信息。基于此,可利用logging模块记录每日运行状态,以便及时排查问题。相关代码如下:
logging.basicConfig(filename='log.log', format='%(asctime)s:%(message)s', level=logging.INFO)
if response.json()['errno'] == 0:
logging.info('发送成功')
else:
logging.warning('发送失败 %s' %response.json()['errmsg'])
总结
以上介绍了使用Python实现微信提醒备忘录功能的完整方案,希望能为读者提供帮助。如有疑问欢迎留言,小编将及时回复。感谢大家对本站的支持!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









