使用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中字符编码简介、方法及使用建议
Jan 08 Python
Python while 循环使用的简单实例
Jun 08 Python
python3实现抓取网页资源的 N 种方法
May 02 Python
Python中用字符串调用函数或方法示例代码
Aug 04 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
python简单实现AES加密和解密
Mar 28 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
Python通过cv2读取多个USB摄像头
Aug 28 Python
Python操作SQLite数据库过程解析
Sep 02 Python
Python读取xlsx数据生成图标代码实例
Aug 12 Python
Python访问Redis的详细操作
Jun 26 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加密扩展库Mcrypt安装和实例
2013/11/10 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
JavaScript中几种常见排序算法小结
2011/02/22 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
UpdatePanel和Jquery冲突的解决方法
2013/04/01 Javascript
javascript实现倒计时N秒后网页自动跳转代码
2014/12/11 Javascript
基于nodejs+express(4.x+)实现文件上传功能
2015/11/23 NodeJs
JQuery+EasyUI轻松实现步骤条效果
2016/02/22 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
如何使node也支持从url加载一个module详解
2018/06/05 Javascript
基于vue实现web端超大数据量表格的卡顿解决
2019/04/02 Javascript
微信小程序实现商城倒计时
2020/11/01 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
python验证码识别的示例代码
2017/09/21 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
PyQt4实现下拉菜单可供选择并打印出来
2018/04/20 Python
python3使用QQ邮箱发送邮件
2020/05/20 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
python 删除excel表格重复行,数据预处理操作
2020/07/06 Python
Python本地及虚拟解释器配置过程解析
2020/10/13 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
Vita Fede官网:在意大利手工制作,在纽约市设计
2019/10/25 全球购物
印尼第一大家居、生活和家具电子商务:Ruparupa
2019/11/25 全球购物
八一建军节慰问信
2015/02/14 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
html5实现点击弹出图片功能
2021/07/16 HTML / CSS
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python