使用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中捕捉详细异常信息的代码示例
Sep 18 Python
Python实例一个类背后发生了什么
Feb 09 Python
tensorflow实现简单的卷积网络
May 24 Python
基于python生成器封装的协程类
Mar 20 Python
Python生成rsa密钥对操作示例
Apr 26 Python
Python3列表内置方法大全及示例代码小结
May 10 Python
基于python的列表list和集合set操作
Nov 24 Python
Python os模块常用方法和属性总结
Feb 20 Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
浅析Python 条件控制语句
Jul 15 Python
基于python实现监听Rabbitmq系统日志代码示例
Nov 28 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
php 获取百度的热词数据的代码
2012/02/18 PHP
简单谈谈php延迟静态绑定
2016/01/26 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
doctype后如何获得body.clientHeight的方法
2007/07/11 Javascript
js中parseInt函数浅谈
2013/07/31 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
详解mpvue中使用vant时需要注意的onChange事件的坑
2019/05/16 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
vue实现购物车加减
2020/05/30 Javascript
vue设置全局访问接口API地址操作
2020/08/14 Javascript
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Pycharm学习教程(3) 代码运行调试
2017/05/03 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
在django admin详情表单显示中添加自定义控件的实现
2020/03/11 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
pytorch 把图片数据转化成tensor的操作
2021/03/04 Python
香港卓悦化妆品官网:BONJOUR
2017/09/21 全球购物
学期自我鉴定
2013/11/04 职场文书
超市国庆节促销方案
2014/02/20 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
政风行风评议整改方案
2014/09/15 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
2015年见习期工作总结
2014/12/12 职场文书
旅行社计调工作总结
2015/08/12 职场文书
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS