事件背景是经常有很多琐碎的事情需要在某个时间点去做,光靠人力去记,容易出现偏差,尤其是对容易迷糊的选手。

所以动手写了一套代码,可以按需要通过微信发送消息,不论是给自己充当自动提醒的备忘录还是给其他人发送定时消息,都可以在这套代码的基础上实现。

首先放上最终成果示例:

图中的文字都是可以根据自身需要而进行修改的,所以文章中附上的代码也只是抛砖引玉,读者可以根据自身需要而进行调整。本篇文章会分三个部分,依次介绍实现的方式,分别是

  1. 文本内容的确定
  2. 微信端发送消息的实现
  3. 定时任务的设置

第一步:文本内容的确定

这里说的“文本内容”实际指的就是你想要发送的信息,所以其内容是大相径庭的,需要根据自身需要进行调整,作者也就简单介绍一下截图里内容对应的代码,截图中的第一行“每日早安”是微信发消息时设置的,第二行是简单的打招呼,纯文字即可,此处按下不表。
第三行“现在是2021-10-07 11:25,星期四”,发送消息时的日期与星期数,其对应的python脚本如下:

# 发送内容 今日日期与星期数
import datetime
import calendar
import time
sysdate = datetime.date.today()  # 只获取日期
now_time = datetime.datetime.now()  # 获取日期加时间
week_day = sysdate.isoweekday()  # 获取周几
week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
text_date = '现在是' + str(now_time)[0:16] + ',' + week[week_day -1 ]
print(text_date)

第四行“天气情况是晴,温度是8~19摄氏度”,这里会涉及一个简单的爬虫,需要我们去天气网站上爬取当前天气情况,脚本如下:

#发送内容:天气情况
import requests
from bs4 import BeautifulSoup
import datetimeurl = 'http://www.weather.com.cn/weather/101010300.shtml'
sysdate=datetime.date.today()
r = requests.get(url, timeout=30)  # 用requests抓取网页信息
r.raise_for_status()  # 可以让程序产生异常时停止程序
r.encoding = r.apparent_encoding #编码格式
html=r.textfinal_list = []
soup = BeautifulSoup(html, 'html.parser')  # 用BeautifulSoup库解析网页 #soup里有对当前天气的建议
body = soup.body #从soup里截取body的一部分
data = body.find('div', {'id': '7d'})
ul = data.find('ul')
lis = ul.find_all('li')for day in lis:temp_list = []date = day.find('h1').string  # 找到日期if date.string.split('日')[0]==str(sysdate.day):temp_list = []date = day.find('h1').string  # 找到日期temp_list.append(date)info = day.find_all('p')  # 找到所有的p标签temp_list.append(info[0].string)if info[1].find('span') is None:  # 找到p标签中的第二个值'span'标签——最高温度temperature_highest = ' '  # 用一个判断是否有最高温度else:temperature_highest = info[1].find('span').stringtemperature_highest = temperature_highest.replace('℃', ' ')if info[1].find('i') is None:  # 找到p标签中的第二个值'i'标签——最高温度temperature_lowest = ' '  # 用一个判断是否有最低温度else:temperature_lowest = info[1].find('i').stringtemperature_lowest = temperature_lowest.replace('℃', ' ')temp_list.append(temperature_highest)  # 将最高气温添加到temp_list中temp_list.append(temperature_lowest)  # 将最低气温添加到temp_list中final_list.append(temp_list)  # 将temp_list列表添加到final_list列表中text_weather = '天气情况是' + final_list[0][1] + ',温度是' + final_list[0][3].strip() + '~' + final_list[0][2].strip() + '摄氏度'

第五行“刚发的工资,请对它好一点哦”,这里是计算出距离发工资日期的天数,毕竟打工人最关心的莫过于此了。

import datetime
import calendar
import time
import emoji
# 获取当前月最后一天
next_month = sysdate.replace(day=28) + datetime.timedelta(days=4)  # 获取到下个月
minus = datetime.timedelta(days=next_month.day)  # 获取next_month的天数
salary_date=next_month - minus  # next_month减去自身的天数,即可得到本月的月底最后一天# 判断实际发工资日期,目前只考虑了周末,未考虑节假日
if salary_date.isoweekday() == 6:salary_date_actual = salary_date - datetime.timedelta(days=1)  # 若发工资日期为周六,则实际会在周五发放,提前1天
elif salary_date.isoweekday() == 7:salary_date_actual = salary_date - datetime.timedelta(days=2)  # 若发工资日期为周日,则实际会在周五发放,提前2天
else:salary_date_actual=salary_date  # 实际发放工资日期# 获取当前日期与发工资日的天数差距
day_between = salary_date_actual.day - sysdate.day
if day_between == 0:text_salary = '今天发工资啦!冲鸭!!!'
elif day_between < 0 or day_between > 20:text_salary = '刚发的工资,请对它好一点哦' + emoji.emojize(':wink:', use_aliases=True)
else:text_salary = '距离发工资还有' + str(day_between) + '天'

至此,截图中的文本内容已经得以实现,可以看到,这一步的代码是和实际需求紧密相关的,所以各位读者可以根据自身需要完成这一步。

第二步:微信端发送消息的实现

当我们确定好文本内容后,就需要通过微信将信息发送出去,前几年还有itchat之类的第三方库使用,但最近这些库好像都没法使用,所以就只能寻找其他思路。微信公众号是有一个主动给用户发送消息的权限,所以考虑通过微信公众号来实现这一功能,所以作者尝试使用自己申请的个人微信公众号,但发现主体为个人的,是没有这个权限的,而如果要申请企业类型的,还得自掏腰包,所以就只能放弃使用自己的微信公众号。

转而将目光转移到市面上现有的可提供主动发消息的微信公众号:喵提醒。
直接搜索这个名字应该就可以搜到,关注后找到“添加提醒”,按顺序完成即可,注意我们在第一步里按下不表的第一行内容“每日早安”这四个字,实际就是在喵提醒里设置的,即这个提醒的名称。“提醒方式”则选择“公众号文字提醒”,毕竟只有这个是免费的。

当你在喵提醒内完成提醒的设置后,系统会给你返回一个“喵码”,这个喵码是一定要存下来的,只有当你访问这个喵码对应的网址时,公众号才会给对你进行消息的发送。

当你完成这一步之后,就只需要通过python脚本访问喵码对应的网址,并传上你需要发送的内容,公众号就会将内容再发到微信上了,访问的代码如下:

from urllib import request, parse
import json
#访问喵提醒,发送微信消息
class Message(object):def __init__(self,text):self.text = textdef push(self):# 重要,在id中填写自己绑定的idpage = request.urlopen("http://miaotixing.com/trigger?" + parse.urlencode({"id": "此处填写喵码", "text": self.text, "type": "json"}))result = page.read()jsonObj = json.loads(result)if (jsonObj["code"] == 0):print("\nReminder message was sent successfully")else:print("\nReminder message failed to be sent,wrong code:" + str(jsonObj["code"]) + ",describe:" + jsonObj["msg"])text = f"""
早上好呀❤❤❤❤❤❤❤❤
{text_date}
{text_weather}
{text_salary}
"""
message = Message(text)
message.push() # 完成推送

这段代码里的text就是你需要发送的内容,代码中“此处填写喵码”是需要将上面提到的喵码复制进来,“早上好呀”这个打招呼的内容就是在这里手动写上去的,而{text_date}、{text_weather}、{text_salary}就是我们在第一步里准备好的内容。
有一点需要注意,这里是通过喵码发送信息,所以这个喵码对应的用户是谁,这条信息就会发给谁,所以如果是由你的账户申请的喵码,但内容又是希望发给别人的,则需要手动转发或者换成别人的喵码。
但是这个方法目前是存在一个弊端的,以文本方式发送的话,需要你每48小时给微信公众号发送任意一条消息,不然公众号将失去给你主动发消息的权限,不过就实际使用情况来说,这个弊端还是能接收的,因为当公众号给你发消息后,随便回一条消息即可,当然如果有更好的方式,还请各位读者进行指点。

第三步:定时任务的设置

前两步完成后,当你调用python脚本,就可以实现让微信公众号给你发送消息了,但在实际场景中,肯定是希望定时自动调用脚本,而非手动执行,为了实现这个目标,本来是考虑通过schedule库来定时操作,但后来发现用这个库的话,这个脚本需要一直在后台运行,而且还不能进行其他操作,所以我们在这里选用了WIN10系统自带的“计划程序”功能,对应路径是:控制面板-系统和安全-管理工具-任务计划程序。
在进行设置计划之前,还有一个准备工作需要做,因为WIN10系统无法直接调用python脚本,所以我们需要先准备一个txt文件,其内容是
python xxx.py
xxx对应的就是写好的python脚本名称,完成内容后,再将这个txt文件的后缀修改为.bat,并让这个bat文件和python脚本在同一个文件夹内,这样就形成了一个可以由WIN10系统调用的bat文件了,并且这个bat文件的内容就是调用你指定的python脚本。
完成这个准备工作后,我们在“计划程序”面板,选择“创建基本任务”

填写计划名称和描述,点击下一步后,是选择调度的频率,根据自身需要选择即可

如果是选择每天的话,还需要选择具体时间,根据自身需要选择即可。
下一步的“操作”也只能选择“启动程序”

再下一步的“启动程序”,就需要我们提前准备好的bat文件了,在“程序或脚本”下面选择bat文件,“起始于”后面的框框里填上bat文件所在的文件路径。

事情到这里还差最后一点点。
当完成上述操作后,在计划程序面板会出现你刚刚命名的计划,选中后右键,进入“属性”,选择“不管用户是否登录都要运行”,避免用户不同导致程序没有执行。

再去“条件”中修改电源配置,建议取消限制,如果是笔记本电脑的话,勾选了红框内的方框,则在没有连接电源的情况下,是不会执行脚本的。

至此,大功告成,各位读者可以根据自身需求修改对应内容,如文章内有何错误,或有其他建议,烦请各位不吝赐教。
全文完整代码如下:

from urllib import request, parse
import json
import emoji# 发送内容 今日日期与星期数
import datetime
import calendar
import time
sysdate = datetime.date.today()  # 只获取日期
now_time = datetime.datetime.now()  # 获取日期加时间
week_day = sysdate.isoweekday()  # 获取周几
week = ['星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期天']
text_date = '现在是' + str(now_time)[0:16] + ',' + week[week_day -1 ]# 获取当前月最后一天
next_month = sysdate.replace(day=28) + datetime.timedelta(days=4)  # 获取到下个月
minus = datetime.timedelta(days=next_month.day)  # 获取next_month的天数
salary_date=next_month - minus  # next_month减去自身的天数,即可得到本月的月底最后一天# 判断实际发工资日期,目前只考虑了周末,未考虑节假日
if salary_date.isoweekday() == 6:salary_date_actual = salary_date - datetime.timedelta(days=1)  # 若发工资日期为周六,则实际会在周五发放,提前1天
elif salary_date.isoweekday() == 7:salary_date_actual = salary_date - datetime.timedelta(days=2)  # 若发工资日期为周日,则实际会在周五发放,提前2天
else:salary_date_actual=salary_date  # 实际发放工资日期# 获取当前日期与发工资日的天数差距
day_between = salary_date_actual.day - sysdate.day
if day_between == 0:text_salary = '今天发工资啦!冲鸭!!!'
elif day_between < 0 or day_between > 20:text_salary = '刚发的工资,请对它好一点哦' + emoji.emojize(':wink:', use_aliases=True)
else:text_salary = '距离发工资还有' + str(day_between) + '天'#发送内容:天气情况
import requests
from bs4 import BeautifulSoup
import datetimeurl = 'http://www.weather.com.cn/weather/101010300.shtml'
sysdate=datetime.date.today()
r = requests.get(url, timeout=30)  # 用requests抓取网页信息
r.raise_for_status()  # 可以让程序产生异常时停止程序
r.encoding = r.apparent_encoding #编码格式
html=r.textfinal_list = []
soup = BeautifulSoup(html, 'html.parser')  # 用BeautifulSoup库解析网页 #soup里有对当前天气的建议
body = soup.body #从soup里截取body的一部分
data = body.find('div', {'id': '7d'})
ul = data.find('ul')
lis = ul.find_all('li')for day in lis:temp_list = []date = day.find('h1').string  # 找到日期if date.string.split('日')[0]==str(sysdate.day):temp_list = []date = day.find('h1').string  # 找到日期temp_list.append(date)info = day.find_all('p')  # 找到所有的p标签temp_list.append(info[0].string)if info[1].find('span') is None:  # 找到p标签中的第二个值'span'标签——最高温度temperature_highest = ' '  # 用一个判断是否有最高温度else:temperature_highest = info[1].find('span').stringtemperature_highest = temperature_highest.replace('℃', ' ')if info[1].find('i') is None:  # 找到p标签中的第二个值'i'标签——最高温度temperature_lowest = ' '  # 用一个判断是否有最低温度else:temperature_lowest = info[1].find('i').stringtemperature_lowest = temperature_lowest.replace('℃', ' ')temp_list.append(temperature_highest)  # 将最高气温添加到temp_list中temp_list.append(temperature_lowest)  # 将最低气温添加到temp_list中final_list.append(temp_list)  # 将temp_list列表添加到final_list列表中text_weather = '天气情况是' + final_list[0][1] + ',温度是' + final_list[0][3].strip() + '~' + final_list[0][2].strip() + '摄氏度'#访问喵提醒,发送微信消息
class Message(object):def __init__(self,text):self.text = textdef push(self):# 重要,在id中填写自己绑定的idpage = request.urlopen("http://miaotixing.com/trigger?" + parse.urlencode({"id": "此处填写喵码", "text": self.text, "type": "json"}))result = page.read()jsonObj = json.loads(result)if (jsonObj["code"] == 0):print("\nReminder message was sent successfully")else:print("\nReminder message failed to be sent,wrong code:" + str(jsonObj["code"]) + ",describe:" + jsonObj["msg"])text = f"""
早上好呀❤❤❤❤❤❤❤❤
{text_date}
{text_weather}
{text_salary}
"""
message = Message(text)
message.push() # 完成推送

全文到此结束。

用python给女朋友写了个自动提醒的程序相关推荐

  1. PYTHON/JAVA实现固定时间且自动发送邮件的程序

    PYTHON 实现固定时间且自动发送邮件的程序 import smtplib from email.mime.text import MIMEText from email.header import ...

  2. 单身暴击!程序员用 Python 给女朋友写了个翻译软件

    作者 | veelion 责编 | 仲培艺 宝宝生日前后的那几天,她正好不在家,我一个人在家孤独.寂寞.冷.没有她的骚扰就可以安心写程序了! 别人家的宝宝过生日,无非是鲜花.包包和红包什么的,可我是程 ...

  3. python股票自动交易从零开始-怎样用 Python 写一个股票自动交易的程序-数字货币代理...

    1个赞 股票自动交易助手提供了一个 Python 自动下单接口,参考代码#股票自动交易助手 Python 自动下单使用 例子#把此脚本和 StockOrderApi.py Order.dll 放到你自 ...

  4. python 员工考勤_用python写的考勤自动打卡程序

    from selenium import webdriver import webbrowser import time,datetime import random import configpar ...

  5. 华泰证券 python 自动交易_怎样用 Python 写一个股票自动交易的程序?(不包含交易算法)?...

    前言 股票或期货的价格波动,总会有一些可以规律可以遵循的.其中,"背离"也算是其中的一种,并且可以作为判断趋势结束或阶段调整的预警信号. 通常情况下,我们所说的"背离&q ...

  6. python实现秒杀商品的微信自动提醒功能(附代码)

    技术实现原理:获取京东的具体的商品信息,然后再使用微信发送提醒 1.收集自己想要的商品url 我们就以京东来举例,获取京东的秒杀商品信息: 首先,我们在网页上打开京东,搜索我们想要的商品,这边我就以我 ...

  7. Python 实现 淘宝秒杀 聚划算 自动提醒 源码

    说明 本实例能够监控聚划算的抢购按钮,在聚划算整点聚的时间到达时发出提醒(音频文件自己定义位置)并自动弹开页面(URL自己定义). 同时还可以通过命令行参数自定义刷新间隔时间(默认0.1s)和监控持续 ...

  8. python list转字符串_我用python写了个自动生成给文档生成索引的脚本!懒人智慧...

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库: PiperLiu / ACMOI_Journey ,记录自己的刷题轨迹,并总结一下方法.心得.想到一个 ...

  9. qq机器人自动回复带脚本可以实现吗_有人用Python写了个自动亏钱脚本,还能微信实时通知!

    本系列所有文章的开头都会用一两句话总结一下对应文章的内容.对这个话题感兴趣的话可以继续往下读,不感兴趣可以直接关掉,绝不浪费读者的时间. 总结 本篇文章用 Python 实现了一个简单的自动交易脚本, ...

最新文章

  1. kafka--storm--mongodb
  2. SLAVE为什么一直不动了
  3. 关于最近练习PYTHON代码的一点心得
  4. 操作系统习题7—文件系统
  5. 使用XFire+Spring构建Web Service(一)——helloWorld篇
  6. 前端学习(1661):前端系列实战课程之获取点击位置
  7. Qt5.7+Opencv2.4.9人脸识别(六)Tcp,Mysql,3DES,XML综合
  8. 野生前端的数据结构基础练习(2)——队列
  9. 两年前端菜鸟回忆篇(1)
  10. 2016OSC源创会年终盛典-架构数据场-陈沙克
  11. 2022最新短信验证码平台汇总
  12. stata陈强:第四章 stata操作基础
  13. 普通文本与富文本,超文本之间的区别
  14. 高级安全Windows防火墙管理单元无法加载。请重新启动正在管理的计算机上的Windows防火墙服务,报错代码:0x6D9
  15. oracle 落落是谁,落落是老虎妖精吗?落落的父母是什么身份?
  16. 火柴棒游戏(暴力枚举)C++
  17. 创业要素:如何推广自己的产品
  18. 如何换config.plist、换clover和添加引导的教程
  19. 二十八、动词不定式 2 做表语、宾语、后置定语、状语
  20. 联想小新一键恢复小孔_联想小新笔记本如何一键恢复出厂设置_联想小新air恢复出厂设置教程...

热门文章

  1. [区块链] 密码学中Hash算法(基础)
  2. oracle基础|oracle的认知|Select用法详解
  3. 为什么生产MES系统对工厂管理如此重要?
  4. 我是什么情况下开始学python,现在能用python做什么
  5. 信息网络传播权 服务器,信息网络传播权的特征
  6. PCA主成分分析 R语言
  7. EBS中AP发票分配行的解释
  8. 神的意念高过人的意念
  9. Spring事务源码详解
  10. 【日常Exception】第二十回:SQL 错误 [3185] [HY000]: Can‘t find master key from keyring, please check in the xxx