In solitude, be a multitude to urself

MENU

运用python对vps的补货进行监控并发送邮件

April 19, 2018 • Python

注意,以下所有code都是基于python3,在python2环境下可能会出错

才疏学浅,写出来的code见笑了🤣,仅提供思路参考

以rfchost为例,首先先找到需要监控的购买页面链接(Ps.rfchost不检测user agent用户浏览器代理,所以下面的代码没有添加对此的设置,有爬虫检测防止措施的的idc商家(如BandwagonHost)以下代码可能无法正确获取到html页面信息,需要对User-Agent甚至代理进行设置)
比如rfc美西GIA的中档配置,购买链接为:https://my.rfchost.com/cart.php?a=add&pid=98
这里运用python的urllib来获取页面的内容并解码为utf-8:

def get_html_info():
    from urllib import request
    response = request.urlopen('https://my.rfchost.com/cart.php?a=add&pid=98')
    html = response.read()
    html = html.decode("utf-8")
    return html

在获取到页面信息之后用断货的关键词(特征词)的存在进行补货依据的判断,我是用find指令查找rfchost断货页面最为明显的“目前处于缺货中”作为判断的依据,-1即为查找不到缺货关键词,库存不再为0,python返回True代表已补货
同理反推也可以用有货的关键词,例如“加入购物车”一类来判定是否有货,用find指令查找,如果为结果-1找不到有货的关键词代表断货库存为0,判定没有补货返回False,不要把思维栓死

def judge_status(html):
    judge = html.find('目前处于缺货中')
    if judge != -1:
        return False
    else:
        return True

接下来就是在判定已补货的情况进行邮件的发送,也就是我们的主程序部分,这里我使用的是python的smtplib,如下:

def main():
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    my_sender="这里填写发件人"
    my_user="这里填写邮箱"
    my_pass="这里填写邮箱的smtp连接密钥,注意,qq邮箱密钥与登录名密码不同"
    if judge_status(get_html_info()) == True:
        msg=MIMEText('rfchost补货了,购买地址:https://my.rfchost.com/cart.php?a=add&pid=99','plain','utf-8')
        msg['From']=formataddr(["这里写发件人",my_sender])
        msg['To']=formataddr(["这里写收件人",my_user])
        msg['Subject']="RFC补货提醒"
        server=smtplib.SMTP_SSL("这里填写smtp服务器", 这里写端口)
        server.login(my_sender, my_pass)
        server.sendmail(my_sender,[my_user,],msg.as_string())
        server.quit()
        print('rfc补货')#注意,这只是为了方便测试脚本输出结果,并不是必须的

成品:

def get_html_info():
    from urllib import request
    response = request.urlopen('https://my.rfchost.com/cart.php?a=add&pid=98')
    html = response.read()
    html = html.decode("utf-8")
    return html

def judge_status(html):
    judge = html.find('目前处于缺货中')
    if judge != -1:
        return False
    else:
        return True

def main():
    import smtplib
    from email.mime.text import MIMEText
    from email.utils import formataddr
    my_sender="这里填写发件人"
    my_user="这里填写邮箱"
    my_pass="这里填写邮箱的smtp连接密钥,注意,qq邮箱密钥与登录名密码不同"
    if judge_status(get_html_info()) == True:
        msg=MIMEText('rfchost补货了,购买地址:https://my.rfchost.com/cart.php?a=add&pid=99','plain','utf-8')
        msg['From']=formataddr(["这里写发件人",my_sender])
        msg['To']=formataddr(["这里写收件人",my_user])
        msg['Subject']="RFC补货提醒"
        server=smtplib.SMTP_SSL("这里填写smtp服务器", 这里写端口)
        server.login(my_sender, my_pass)
        server.sendmail(my_sender,[my_user,],msg.as_string())
        server.quit()
        print('rfc补货')#注意,这只是为了方便测试脚本输出结果,并不是必须的
#最后别忘了加上对主程序的运行
main()

监控脚本部分到此结束,如果需要监控还需要正确配置smtp发信邮箱以及对脚本的周期性运行,抽空会写一下linux中如何用cron来定期运行脚本以及如何添加User-Agent,Thanks reading🍻

Tags: None
Archives QR Code
QR Code for this page
Tipping QR Code