博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
保证图书馆借书不过期
阅读量:5775 次
发布时间:2019-06-18

本文共 4565 字,大约阅读时间需要 15 分钟。

Author: wangxianglong Date: 2016/6/23 8:39:43

背景

我们图书馆其实书更新的挺快,各方面都还可以的,但是没有过期提醒的功能,导致我多次超期罚现,很不爽,是时候来个脚本搞定他了

写脚本

之前关注了学习的官方微信公众号,介个可以查询信息,好就从这里入手,在浏览器中打开开始分析网页的运行情况,来提取出API

chrome浏览器F12->Network,其实分析这些API真的需要耐心,多试试。忘了截图了T_T

看代码吧:

#!/usr/bin/env python#coding: utf-8import urllib2import urllibimport cookielibfrom ast import literal_evalfrom time import localtimeimport datetimeimport smtplib  from email.mime.text import MIMEText url = "https://api.xiyoumobile.com/xiyoulibv2/user/login"                       #登录API, 求求不要攻击我们学校API!!!    rent_url = "https://api.xiyoumobile.com/xiyoulibv2/user/rent"                   #借书信息查询APIuser_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"headers = {"User-Agent": user_agent, "Referer": "https://lib.xiyoumobile.com/" } #创建头部,以防有防盗链给拒了mailto_list = ["xxxxxx@qq.com"]                                                 #通知邮箱mail_host = "smtp.163.com"    mail_user = "xxxxxxxx@163.com"                                                  #发件邮箱mail_pass = "xxxxxxx"                                                           #发件邮箱密码def main():    try:        cookies = cookielib.CookieJar()        request_data = urllib.urlencode({                                       #提交的数据, 方式居然是GET,呵呵                'username': 'student_ID',                'password': 'password'        })                  opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies))     #创建opener        request = urllib2.Request(url=url, data=request_data, headers=headers)              response = opener.open(request)                rst = response.read().decode('utf-8')        rst = literal_eval(rst.replace('true','True').replace('false','False'))     #得到sessionID和path路径,玩的小把戏吧        status, detail = rst["Result"], rst["Detail"]                               #返回来是status,和上面说的sessionID和path                if status:            data = urllib.urlencode({"session": detail})                            #拿到sessionID就可以直接请求了            request = urllib2.Request(rent_url, data)                                           response = urllib2.urlopen(request)            rent_info = response.read().decode('utf-8')                             #请求之后就会返回借书的信息,做些处理就OK了            rent_info = literal_eval(rent_info.replace('true','True').replace('false','False'))            status_rent, rent_detail = rent_info["Result"], rent_info["Detail"]                        if status_rent:                send_info = ''                now_time = localtime()                now_date = datetime.date(now_time.tm_year, now_time.tm_mon, now_time.tm_mday)                for book in rent_detail:                    d = book['Date']                    deadline = datetime.date(int(d[:4]), int(d[4:6]), int(d[6:]))                    delta = (deadline - now_date).days                    if delta <= 2:                        send_info += book['Title']                        if book['CanRenew']:                            send_info += '  可以续借  '                        else:                            send_info += '  不可续借 '                        if delta >= 0:                            send_info += '  剩余:' + str(delta) + " 天"                        else:                            send_info += '  超期了'                        send_info += '\n\n'                if send_info:                    print send_info                    send_mail(mailto_list, '图书馆借书信息', send_info)                #快超期就发邮件提示                else:                    print "书都好着呢"            else:                print "可能接口出问题了。。。"        else:            print "学号或者密码错误"    except urllib2.URLError, e:        if hasattr(e, "code"):            print e.code        if hasattr(e, "reason"):            print e.reason            def send_mail(to_list, sub, content):    me = "图书馆借书信息"+"<"+mail_user+">"    msg = MIMEText(content, _subtype='plain', _charset='utf-8')    msg['Subject'] = sub    msg['From'] = me    msg['To'] = ";".join(to_list)    try:        server = smtplib.SMTP()        server.connect(mail_host)        server.login(mail_user, mail_pass)        server.sendmail(me, to_list, msg.as_string())        server.close()        print "发送成功"        return True    except Exception, e:        print str(e)        print "发送失败"        return Falseif __name__ == "__main__":    main()

计划执行

首先我云主机没钱的,所以crontab没法用了,哎怎么办呢, 嗯Window计划任务貌似可以,试试。可以让脚本在联网的时候就检查一遍。

  1. 打开: window键-> 控制面板 -> 计划任务(搜索一下)
  2. 创建任务 -> 起个名 -> 定义触发器 -> 定义动作
  3. 看图说话

在脚本执行的时候,有的会有黑窗口,类型交互界面一样,不要!

起个名

定义触发器,其中10000表示网络连接的事件ID

RdYIdpO.jpg

定义脚本,注意程序默认执行的程序是python.exe

I3clekU.jpg

在任务网络连接的时候,都记录事件

Rot6AQx.jpg

转载于:https://www.cnblogs.com/wxl-dede/p/5609380.html

你可能感兴趣的文章
5分钟创建并玩转属于自己的区块链
查看>>
Spring MVC-表单(Form)标签-隐藏字段(Hidden Field)示例(转载实践)
查看>>
蚂蚁金服资管规模2.2万亿元;玖富普惠实缴注资增至10亿元 | AI金融评论日报
查看>>
为什么保护容器和微服务很难
查看>>
Ubuntu 16.04桌面版GUI网络配置工具NetworkManager的命令行工具nm-tool无法使用的问题...
查看>>
SpringBoot文件上传下载
查看>>
Java中的泛型
查看>>
中国量子计算机“婴儿”诞生
查看>>
嵌入式Linux学习基础规划篇
查看>>
SAP上阿里云白皮书-第四章 SAP上阿里云规划
查看>>
第7章 使用Keras开发神经网络
查看>>
Linux上的TIME_WAIT和tcp_fin_timeout
查看>>
回顾工作经历,工业“大数据”是发展的必然吗?
查看>>
大二上册生活总结
查看>>
开发手记(一)准备新的征途
查看>>
OS X Keyboard Shortcuts
查看>>
Mutual information and Normalized Mutual information 互信息和标准化互信息
查看>>
python用作监控
查看>>
Centos 升级python2.7到python3.4.2
查看>>
布局小窍门之----让头部和主干内容居中
查看>>