前言
众所周知,明日方舟的官方美术设定集有那么一点水,于是在收到了众多博士的反馈和建议后,鹰角做了个业界史无前例的决定:将对设定集进行优化,并免费寄给购买了设定集的博士!鹰角yyds!!!
各位博士到时需要在这个网站上填写相关信息《明日方舟官方美术设定集VOL.1》RESET版 (hypergryph.com)
但是因为疫情原因,网站暂时无法立刻开启登记通道,后续通道开启具体时间将由微博【明日方舟朝陇山】发布
但咱平时也不玩微博,可能没法第一时间得到相关信息,别到时候开启了登记通道都不知道,为了避免这样的情况发生,我打算写个脚本监测一下官网,有消息第一时间通知我,借此还能学一学python如何发送邮件
python发送邮件
发送邮件需要用到SMTP协议
需要用到的模块为smtplib
和email
,Python自带
email
模块负责构造邮件,smtplib
模块负责发送邮件
想要发送邮箱,就需要一个SMTP服务器,这里以QQ邮箱为例
在设置中开启IMAP/SMTP服务,可以获得授权码,使用这个授权码即可登录QQ邮箱的SMTP服务器
再来看一下smtplib
模块
# 发信服务器
smtp_server = 'smtp.qq.com'
server = smtplib.SMTP_SSL()
指定SMTP服务器,同时有SSL认证,不用SSL的话是smtplib.SMTP()
,但是不安全,现在都是smtplib.SMTP_SSL()
还有就是在python 3.7及后面版本这样写会报错server_hostname cannot be an empty string or start with a leading dot
,这是因为python 3.7 修改了 ssl.py ,导致了smtplib.SMTP_SSL
的问题,修改为如下即可
# 发信服务器
smtp_server = 'smtp.qq.com'
server = smtplib.SMTP_SSL(smtp_server)
指定了SMTP服务器后进行连接登录
# 发信方的信息:发信邮箱,QQ邮箱授权码
from_addr = 'xxx@qq.com'
password = '授权码'
# SMTP_SSL默认端口为465,SMTP默认端口为25
server.connect(smtp_server,465)
server.login(from_addr, password)
最后发送邮件并关闭服务器
# 发送邮件
server.sendmail(from_addr, to_addr, message.as_string())
# 关闭服务器
server.quit()
现在来构造邮件内容
from email.mime.text import MIMEText
from email.header import Header
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('hello,world', 'plain', 'utf-8')
# 发件人
message['From'] = Header('xiaolong22333')
# 收件人
message['To'] = Header('xiaolong')
# 标题
message['Subject'] = Header('Python 邮件发送测试')
测试一下
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 发信方的信息:发信邮箱,QQ邮箱授权码
from_addr = 'xxx@qq.com'
password = '授权码'
# 发信服务器
smtp_server = 'smtp.qq.com'
# 收信方邮箱
to_addr = 'xxx@qq.com'
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server,465)
server.login(from_addr, password)
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('hello,world', 'plain', 'utf-8')
# 发件人
message['From'] = Header('xiaolong22333')
# 收件人
message['To'] = Header('xiaolong')
# 标题
message['Subject'] = Header('Python 邮件发送测试')
# 发送邮件
server.sendmail(from_addr, to_addr, message.as_string())
# 关闭服务器
server.quit()
so easy~
编写脚本
我的想法是根据返回包的长度来判断官网有没有更新,长度变了就发邮件
# -*- coding: utf-8 -*-
'''
@File: Arknights.py
@Time: 2022/05/01 17:01:47
@Author: xiaolong
@Version: 1.0
@Link: https://xiaolong22333.top
'''
import smtplib
import requests
from email.mime.text import MIMEText
from email.header import Header
def senfMail():
# 发信方的信息:发信邮箱,QQ邮箱授权码
from_addr = 'xxx@qq.com'
password = '授权码'
# 发信服务器
smtp_server = 'smtp.qq.com'
# 收信方邮箱
to_addr = 'xxx@qq.com'
server = smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server,465)
server.login(from_addr, password)
# 三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('博士,网站更新了,快去看看吧~\nhttps://ak.hypergryph.com/artworks_vol1', 'plain', 'utf-8')
# 发件人
message['From'] = Header('xiaolong22333')
# 收件人
message['To'] = Header('xiaolong')
# 标题
message['Subject'] = Header('博士,有最新消息,请注意查收')
# 发送邮件
server.sendmail(from_addr, to_addr, message.as_string())
# 关闭服务器
server.quit()
def isComingSoon():
url1 = 'https://ak.hypergryph.com/artworks_vol1'
url2 = 'https://web.hycdn.cn/arknights/artworks_vol1/index.d89673.js'
headers = {
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:99.0) Gecko/20100101 Firefox/99.0",
"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
}
result1 = requests.get(url=url1,headers=headers)
result2 = requests.get(url=url2,headers=headers)
if (len(result1.content) != 1203) or (len(result2.content) != 247343):
senfMail()
if __name__ == '__main__':
isComingSoon()
应该没什么问题
定时
上传到服务器,每天早上8点半和晚上8点半执行
30 8 * * * /usr/bin/python3 /root/Arknigths/Arknights.py
30 20 * * * /usr/bin/python3 /root/Arknigths/Arknights.py