使用Python制作自动推送微信消息提醒的备忘录功能


Posted in Python onSeptember 06, 2018

日常工作生活中,事情一多,就会忘记一些该做未做的事情。即使有时候把事情记录在了小本本上或者手机、电脑端备忘录上,也总会有查看不及时,导致错过的尴尬。如果有一款小工具,可以及时提醒,而不用再主动去查备忘录,化被动为主动,那就再合适不过了。因此,在这里我们就利用Python,实现这样的一款“小工具”。

初步设想

毫无疑问,手机是当前使用最频繁的工具,没有之一。饭可以不吃,手机不可以不带。如果能在某些特定的时点,将备忘记录事项通过某种形式发送到手机端,通过查看手机端消息实现事项提醒,那将是再好不过了。而手机端最常用的实时通讯工具,非微信莫属。关于向手机端推送微信消息的功能,在之前的小项目中已经使用过,这里可以直接套用。

【更新2.0】Python自动监测自如房源状态,推送微信消息提醒状态变更

于是,我们有了以下思路:

•首先,要有一个可以记录事项的文档,用来记录备忘事项的内容、提醒时间、是否办结等;
•其次,扫描这个文档,获取事项内容,判断事项是否办结,如已办结需允许对文档的修改,标记办结标志;
•然后,设置一套提醒逻辑,规定在什么时间、什么情况下提醒;
•随后,特殊情景处理,要能够在不干扰程序正常运行的条件下,添加新的备忘事项,并且新添加事项能够被扫描到;
•最后,在规定的时间和情境下,推送微信消息。

根据以上分析,需要的工具,包含三部分:

•一个可以编写和运行Python代码的编辑器;
•一部装有微信的手机,最好有两个微信号;
•一个用来记录事项的Excel文档。

用图表示如下:

使用Python制作自动推送微信消息提醒的备忘录功能

用Python设计一个可以自动推送微信消息提醒的备忘录! 

运行前准备

Excel文档设计

为了记录事项,需要有一个用来保存事项记录的Excel文档。需要对文档记录逐条读取,获取事项内容、办结时间、办结标志等,因此需要对文档格式进行规范。现在简单的进行了设计,模式如下:

使用Python制作自动推送微信消息提醒的备忘录功能

这是一个非常简单的模式了,第二列内容是具体提醒事项的详细内容;第三列日期列要按照“2018/09/02 18:00”的格式书写,需要获取该列的日期、时间;第四列是事项办结标志,已办结事项标注为“是”。

对于需要提醒事项,需要按照如下格式记录:

使用Python制作自动推送微信消息提醒的备忘录功能

运行结果

直接运行程序,Excel文档内容变化如下:

使用Python制作自动推送微信消息提醒的备忘录功能  

我们看到,日期在当前时间(运行代码的时间)之前的事项,即已办结事项,内容会添加背景色,“是否完成”标注为“是”。另外,程序会整合未办结事项内容,推送微信通知,如下:

使用Python制作自动推送微信消息提醒的备忘录功能

小编在此谢谢大家的观看!Python很容易学!所以小编有弄一个交流,互问互答,资源共享的交流学习基地,如果你也是Python的学习者或者大牛都欢迎你来!㪊:548+377+875!一起 学习共同进步!

几点说明

首先,因为实现非常的简单,过程粗暴、不细腻,一看代码就懂(后附全部代码),故不多介绍实现过程和逻辑,以免贻笑大方;其次,有几点说明一下,如果各位有好的想法,请留言告知,便于我优化完善;最后,想法大于实用,突发奇想,周末又有点时间而已。
•关于微信推送消息:用Python的itchat模块实现,仅仅是登录、指定好友发送消息、退出等这样简单的操作,感兴趣的可以直接去搜索该模块,有很多参考资料;
•xlrd、xlwt和xlutils:xlrd打开Excel是只读的,不能修改;xlwt是可以对Excel文档修改,但是一般是新建一个文档,然后在此基础上修改,对于已有内容的文档,就不适用了,因此借用了xlutils,而xlutils在xlrd和xlwt之间建立了一个桥梁,实现了读和写;
•在添加新的事项时,需要打开Excel文档,如果没有特殊处理,又恰好遇到程序对文档的保存时会报错,因此使用了try…except结构,遇到文档占用,会跳过该次扫描,休息指定时间后重新开始;
•对于未办结事项,什么时间推送消息、一天推送几次,都可以根据自身需要调节;
•对于已办结事项,没有进行删除,而是仅仅改变了格式继续保留下来,程序运行时,还需要对这些事项进行扫描,自然会造成资源浪费,不删除是因为想记录做过的事项,便于日后查看,另外,对我个人而言,短时间内也不会积累大量的事项,不会造成太大的影响,当然可以添加一些机制进行处理,比如移动到另外一个工作表中。

代码

# 导入模块
import xlrd
from xlutils.copy import copy
import xlwt
import itchat
import datetime
import time
# 使用手机扫描二维码登录微信
def WeChatLogin():
 itchat.login()
# 给指定好友发送指定内容的消息
def SendAMassage(friend, message):
 users = itchat.search_friends(name=friend)
 userName = users[0]['UserName']
 itchat.send(message, toUserName = userName)
# 按照指定格式修改excel表格内容
def ModifyContent(row,col,content,sheet,new_remindbook,path,style):
 # 获取工作表内容
 new_sheet = new_remindbook.get_sheet(0)
 # 写入数据
 new_sheet.write(row,col,content,style)
 # 保存文件
 new_remindbook.save(path)
# 判断提醒是否过期
def Overdue(nowtime,deadtime):
 if deadtime<nowtime:
 return True
 else:
 return False
# 程序运行主体
if __name__=='__main__':
 # 首次执行标志
 first_exec = True
 # 微信登录
 WeChatLogin()
 # 指定微信消息推送好友
 friend = '君以沫'
 # 备忘本记录文件地址
 path = r'.记事本.et'
 # 扫描备忘本记录
 while True:
 # 文件占用标志
 occupy = False
 # 打开excel文件,获取文件属性信息
 remindbook = xlrd.open_workbook(path,formatting_info=True)
 sheet = remindbook.sheet_by_index(0)
 nrows=sheet.nrows
 # 建立副本
 new_remindbook=copy(remindbook)
 # 初始化事项序号
 mark = 1
 # 初始化message信息
 message='以下事项未办结:'
 # 执行一次备忘本扫描
 for i in range(2, nrows):
 # 如果已办结事项或者空事项,直接跳过
 if sheet.cell(i,3).value=='是' or sheet.cell(i,2).value=='':
 continue
 # 获取事项截止时间
 deadtime = xlrd.xldate.xldate_as_datetime(sheet.cell(i,2).value, 0)
 deadhour = deadtime.strftime('%H:%M')
 # 获取当前时间
 nowtime = datetime.datetime.now()
 nowhour=nowtime.strftime("%H:%M")
 # 如果过期,则将过期标志设置为是
 if Overdue(nowtime,deadtime):
 # style0
 style0 = xlwt.XFStyle()
 # 设置单元格背景颜色
 pattern= xlwt.Pattern()
 pattern.pattern=1
 pattern.pattern_fore_colour=22
 style0.pattern=pattern
 # 字体设置
 font = xlwt.Font()
 font.name = '仿宋_GB2312'
 font.colour_index = 1
 font.height =280
 style0.font = font
 # 边框设置
 borders = xlwt.Borders()
 borders.left = xlwt.Borders.THIN
 borders.left = xlwt.Borders.THIN
 borders.right = xlwt.Borders.THIN
 borders.top = xlwt.Borders.THIN
 borders.bottom = xlwt.Borders.THIN
 style0.borders = borders
 # 为过期事项添加背景色(按指定格式重填)
 try:
 ModifyContent(i,1,sheet.cell(i,1).value,sheet,new_remindbook,path,style0)
 except:
 occupy = True
 print('文件占用中,休息60s...')
 time.sleep(6)
 break
 # style
 style = xlwt.XFStyle()
 # 设置单元格字体、颜色、字号
 font = xlwt.Font()
 font.name = '仿宋_GB2312'
 font.colour_index = 0
 font.height =280
 font.bold = False 
 style.font = font
 # 设置单元格对齐方式
 alig = xlwt.Alignment()
 alig.horz = xlwt.Alignment.HORZ_CENTER
 alig.vert = xlwt.Alignment.VERT_CENTER
 style.alignment = alig
 # 边框设置
 borders = xlwt.Borders()
 borders.left = xlwt.Borders.THIN
 borders.left = xlwt.Borders.THIN
 borders.right = xlwt.Borders.THIN
 borders.top = xlwt.Borders.THIN
 borders.bottom = xlwt.Borders.THIN
 style.borders = borders
 # 按照指定格式写入数据
 try:
 ModifyContent(i,3,'是',sheet,new_remindbook,path,style)
 except:
 occupy = True
 print('文件占用中,休息60s...')
 time.sleep(6)
 break
 # 未过期事项,添加到提醒信息中
 else:
 # 截止时间单独事项提醒
 if deadhour == nowhour:
 SendAMassage(friend, sheet.cell(i,1).value)
 message = message+'
'+'['+str(mark)+']'+sheet.cell(i,1).value
 mark=mark+1
 # 如果没有被占用
 if not(occupy):
 # 没有未办结事项,结束循环
 if len(message)<=8:
 print('here')
 break
 # 首次运行消息提醒
 if first_exec:
 SendAMassage(friend, message)
 print(message)
 first_exec = False
 release = False
 # 如果是以下时点,则推送微信消息提醒
 if nowhour in ['08:00','10:00','12:00','14:00','16:00']:
 SendAMassage(friend, message)
 # 其他时点
 else:
 print('当前时间:'+ nowtime.strftime("%Y%m%d %H:%M:%S")+' '+'休息30秒...' )
 # 半点整点打印未办结事项
 if nowhour[3:] in ['30','00']:
 print(message)
 time.sleep(30)
 # 所有事项已办结
 message='所有事项已办结。'
 SendAMassage(friend, message)
 print(message)
 # 退出微信登录
 itchat.logout()

---恢复内容结束---

总结

以上所述是小编给大家介绍的使用Python制作自动推送微信消息提醒的备忘录,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Python os模块学习笔记
Jun 21 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
分享一下Python数据分析常用的8款工具
Apr 29 Python
python利用跳板机ssh远程连接redis的方法
Feb 19 Python
Python多版本开发环境管理工具介绍
Jul 03 Python
python利用tkinter实现屏保
Jul 30 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
使用TFRecord存取多个数据案例
Feb 17 Python
浅析Django 接收所有文件,前端展示文件(包括视频,文件,图片)ajax请求
Mar 09 Python
Python能做什么
Jun 02 Python
Python基于数列实现购物车程序过程详解
Jun 09 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
python实现机器学习之多元线性回归
Sep 06 #Python
python实现机器学习之元线性回归
Sep 06 #Python
Python import与from import使用及区别介绍
Sep 06 #Python
用python实现k近邻算法的示例代码
Sep 06 #Python
python K近邻算法的kd树实现
Sep 06 #Python
pyqt5的QComboBox 使用模板的具体方法
Sep 06 #Python
Python多线程编程之多线程加锁操作示例
Sep 06 #Python
You might like
php计算数组不为空元素个数的方法
2014/01/27 PHP
thinkphp浏览历史功能实现方法
2014/10/29 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
javascript作用域问题实例分析
2015/07/13 Javascript
Javascript模仿淘宝信用评价实例(附源码)
2015/11/26 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
2019/08/20 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
python搜索指定目录的方法
2015/04/29 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
python样条插值的实现代码
2018/12/17 Python
python调用staf自动化框架的方法
2018/12/26 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
如何用PyPy让你的Python代码运行得更快
2020/12/02 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
团员学习总结的自我评价范文
2013/10/14 职场文书
政协工作总结2015
2015/05/20 职场文书
医院保洁员管理制度
2015/08/05 职场文书
《蟋蟀的住宅》教学反思
2016/02/17 职场文书
用python开发一款操作MySQL的小工具
2021/05/12 Python
《巫师》是美食游戏?CDPR10月将推出《巫师》官方食谱
2022/04/03 其他游戏