python简单实现宿舍电费监控

2024-03-017 min 折腾

马上就要毕业进厂了还在整这些小玩意。。。

之前拿python写过校园网自动认证的,期间更新了几次,也用了半年多了,没什么问题,期间我基本上就没访问过学校的认证界面了,算是一次成功的折腾吧。前年买的继电器坏了,台式机没有继电器保护容易崩啊,想着写个监控宿舍电费的,电费不够了就直接发邮件给我提醒,也能及时补上电费,免的断电

前期工作

跟自动认证一样,肯定先是找接口抓包了,学校一般都没写什么人机验证之类的,接口很容易调用。不过之前我一直是用手机app查的电费,手机上怎么抓包懒得研究,索性去官网找了半天,找到了一个服务大厅网页,可以查电费

还是老一套 F12 查接口,看了一下接口,也就是一个 post 请求,连认证跟鉴权都没有,属于是完全暴露的接口了。requests 一跑,超时!!!什么情况,又跑了几遍还是一样的问题,用 apifox 发包,还是超时,这就很奇怪了。返回界面,刷新了一下,靠,服务大厅进不去了……

然后我又用手机app,一直再加载,初步推断是,学校机房又进老鼠了,第二天再弄吧

第二天,apifox 成功,requests 发了几次都不行,检查半天,发现·是 body 参数里多写了个下划线,去掉再发成功。接口返回的是json格式的数据,剩余电量写在 errmsg 里,学校是懂 api 设计的

敲代码

之前做专业实践,深度学习弄了个 conda 的 python 环境管理的东西,索性就用上了,不过意义不大。。

request 部分没什么好说的,相比自动认证,这里只需要发一个请求太方便了,几行代码解决。重要的是邮件提醒(初步方案是发邮件,比较简单),一开始网上搜是用 smtplib,写了一堆代码结果搞了半天死活发送不了,后来找到了 kootenpv/yagmail 这个库,两行解决,轻轻松松,这才是 python 嘛

# 163邮箱服务器地址
mail_host = 'smtp.163.com'
# 163用户名
mail_user = 'xxxx@163.com'
# 密码(授权码)
mail_pass = 'xxxxxxxxxxxxx'
sender = 'xxxx@163.com'

def send_mail(subject, contents):
    yag = yagmail.SMTP(user=mail_user, password=mail_pass, host=mail_host)
    yag.send(to=receivers, subject=subject, contents=contents)

然后就是 schedule 定时任务,进程守护什么的了,每十分钟检测一次,低于 5 元就给我发邮件

评论
正在加载评论组件...