使用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中的tkinter模块作图的方法
Feb 07 Python
Python设计实现的计算器功能完整实例
Aug 18 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
Python Tkinter实现简易计算器功能
Jan 30 Python
Python程序运行原理图文解析
Feb 10 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
django实现用户注册实例讲解
Oct 30 Python
flask 实现上传图片并缩放作为头像的例子
Jan 09 Python
如何利用Python识别图片中的文字
May 31 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
Jul 07 Python
浅析Python实现DFA算法
Jun 26 Python
 Python 中 logging 模块使用详情
Mar 03 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开发框架laravel安装与配置教程
2015/03/13 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
javascript new 需不需要继续使用
2009/07/02 Javascript
jQuery ui1.7 dialog只能弹出一次问题
2009/08/27 Javascript
js控制滚动条缓慢滚动到顶部实现代码
2013/03/20 Javascript
js判断背景图片是否加载成功使用img的width实现
2013/05/29 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
js实现匹配时换色的输入提示特效代码
2015/08/17 Javascript
ajax如何实现页面局部跳转与结果返回
2015/08/24 Javascript
JQuery.Ajax()的data参数类型实例详解
2015/11/20 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
AngularJS基础 ng-cut 指令介绍及简单示例
2016/08/01 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
vue全局组件与局部组件使用方法详解
2018/03/29 Javascript
详解Vue中使用Axios拦截器
2019/04/22 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
2018/04/23 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
HTML5 canvas画矩形时出现边框样式不一致的解决方法
2013/10/14 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
市场营销策划方案
2014/06/11 职场文书
个人先进材料范文
2014/12/30 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书