最近工作比较杂,经常忘事。有时候背完备忘就忘了看备忘,但是我天天看微信,于是想到了基于微信写一个提醒系统。大意是将待办事项记录在在线记事本中。通过建立定时任务,每天早上爬取记录在文档中的待办事项,筛选出当天需要处理的事项,通过服务端sauce发送到你的微信。1任何记录和提取1)。为了方便抓取任务记录,推荐使用网页版的在线记事本。现在有很多这样的工具。操作演示我选择“GraphiteDocument”。记录内容的格式可以根据自己的需要和爬虫来决定。比如我在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,获取待办事项解析Item数据信息后的items。代码如下:当然,有时候我们会在记事本里记录很多需要做的事情,执行日期会比较分散,但是没必要每天都提醒所有的待办事项。对此,我们可以把当天需要处理的事情筛选出来,提醒一下,这样效果无疑会更好。任务筛选的基本思路是获取系统当前日期,将其与每一项的待办日期一一匹配。代码如下:2推送信息到微信1).serversauce说到微信推送信息,不得不介绍一个非常方便的工具——serversauce。简单来说,serversauce就是一个可以向目标微信账号发送消息的工具。她最大的特点是功能简单、易于使用且重量轻。使用serversauce只需要以下几步:登录:使用GitHub账号登录网站,获取自己的SCKEY。绑定:通过微信扫描二维码完成绑定。发送消息:发送GET请求到http://sc.ftqq.com/SCKEY.send,即可在微信中收到消息。此外,serversauce还提供了网页版的在线投放工具,供用户体验和测试。值得一提的是,服务器酱最初的目的是通过手机监控服务器告警和日志。因此,为了避免程序出错,每人每天最多发送500条消息。5分钟内不能重复发送相同内容,1分钟内只能发送不同内容。我可以寄30件。对于这个系统来说,这个数据上限绝对是绰绰有余了。2)信息推送服务器酱介绍完了,我们来试试她的效果。首先我们需要指定发送get请求的地址,也就是上面第三步中的URL。这个URL的key取决于我们自己的SCKEY。之后我们需要设置发送信息的标题和内容,然后向目标URL发送请求完成发送信息。推送,如果顺利,你会立即在微信中收到服务器酱的消息提醒。3定时任务与检测1)定时任务现在我们需要设置一个定时任务,这里是通过APScheduler来实现的。APScheduler是一个基于Quartz的python定时任务框架,它提供了多种类型的调度器。由于我们的定时任务是在当前进程执行的,所以我们选择BlockingScheduler调度器,然后通过add_job动态增加要执行的任务。关于APScheduler,大家不需要了解太多,因为它的基本用法很简单:入口是最主要的功能,用来爬取在线记事本中的信息,筛选出需要处理的项目day,通过服务端sauce发送到微信;day_of_week表示定时任务在一周中的哪几天执行,0-6表示周一到周日,也可以指定一定的值,比如'0'表示只在周一执行;时、分、秒分别代表定时任务执行的时、分、秒。这些参数可以指定某个值或者像day_of_week一样设置范围,甚至可以设置执行间隔频率。将程序放在service中,通过start()方法启动定时任务调度器,这样每天早上7:30微信就会收到当天待办事项的提醒。2).运行监控还有一个问题,就是保证我们的程序一直处于正常的运行状态。上面提到了serversauce是通过向目标URL发送get请求来推送信息的,这个get请求有一个返回值格式为"{'errno':0,'errmsg':'success','dataset':'done'}",其中errno为0表示发送成功,否则会在errmsg中给出错误信息。基于此,我们可以依靠日志记录模块来记录程序每天的运行状态,以便及时发现问题。相关代码如下:logging.basicConfig(filename='log.log',format='%(asctime)s:%(message)s',level=logging.INFO)ifresponse.json()['errno']==0:logging.info('发送成功')else:logging.warning('发送失败%s'%response.json()['errmsg'])(左右扫码)***,下面来演示一下系统的运行效果,以文章开头记事本中的内容为例。11月21日上午,你会在微信里收到这样一条消息(下图),终于不用担心忘记什么重要的工作了。
