因为宿舍供了个小主机当服务器,为了防止没电导致服务器突然down掉,遂想办法搞了电费不足时自动发邮件提醒的脚本。脚本运行一次检测一次,用crontab来定时运行
在LUG群友的提点下搞了这个仓库
通过页面学生宿舍用电须知 (nju.edu.cn)了解到了查询网站
通过自助查询(鼓楼)里面F12检查网络活动发现了一个算API的东西吧
这里我用南园11舍举例(如果要问我为什么是11舍,因为我是11舍黑子)
这些负载data后面就会用到
然后看看响应信息
包含我们想要的剩余电量和电量更新时间,还可以转json格式
import requests
import json
#查询网站网址,仙林与鼓楼不同
url='http://114.212.254.14:8899/query/Default.aspx'
def getNumAndDate():
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'X-Ext-Net': 'delta=true',
'X-Requested-With': 'XMLHttpRequest',
}
#这里我就随便找个11舍为例了(为了防止自己房间号被暴露)
data = {
'submitDirectEventConfig': '{"config":{"extraParams":{"rid":"1082"}}}',
'hid_bui_name': '11舍',
'hid_floor_id': '001',
'hid_floor_name': '第1层',
'hid_r_id': '1082',
'hid_room_name': '101房间',
'__EVENTTARGET': 'ctl04',
'__EVENTARGUMENT': '-|public|RoomQuery'
}
response = requests.post(url=url,data=data,headers=headers)
# print(response.text)
#为了转json,把原本result两边加上双引号
response_text = response.text.replace('result','"result"')
respdata = json.loads(response_text)
respdata = json.loads(respdata['result'])
remainValue = respdata['remain']
updateTime = respdata['dttm']
# print(remainValue,updateTime)
return remainValue,updateTime
这个网上搜索就行,我随便找的一个教程python 学习笔记(5)——SMTP 使用QQ邮箱发送邮件_pythonqq邮箱发送-CSDN博客
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
import traceback
#发送邮箱,我的小号
mailSender = '[email protected]'
#授权码,此次我做了隐藏
authcode = 'ilovebegonia'
#接收邮箱
mailAccepter = '[email protected]'
def mail(message):
try:
msg = MIMEText(message, 'plain', 'utf-8')
#发信源
msg['From'] = formataddr(["bego", mailSender])
#收信者
msg['To'] = formataddr(["贝果", mailAccepter])
#主题
msg['Subject'] = "快没电辣"
#调用IMAP/SMTP服务
server = smtplib.SMTP_SSL("smtp.qq.com", 465)
server.login(mailSender, authcode)
#发送
server.sendmail(mailSender, [mailAccepter, ], msg.as_string())
server.quit() # 关闭连接
except Exception as e:
print("邮件发送出现异常!")
traceback.print_exc()
return False
return True
获取数据
保留日志
判断与发送消息
#设置警告电量
warningNum = 30
if __name__ == "__main__":
#运行脚本用于检测与发邮件,定时系统准备交给crontab,每天12:30和22:30准备定时任务(这个时间舍友都在宿舍也方便让他们一起充电费)
remain, time = getNumAndDate()
#追加方式打开
with open('./electricityNumRecord.txt','a') as f:
f.write(str(time)+' '+str(remain)+'kwh\n')
f.close()
if remain <= warningNum:
message = f"电费不足!还剩余{remain}kwh"
ret = mail(message)
if ret:
print("邮件发送成功")
else:
print("邮件发送失败")
print("执行完毕")
crontab -e
加入以下内容,意为每日12:30与22:30执行一次(这个时间舍友都在,方便叫着一起交电费)
30 12 * * * /usr/bin/python3 /path/to/your/script.py
30 22 * * * /usr/bin/python3 /path/to/your/script.py