记图书馆自助预约软件的诞生

需求分析:

        大四的最后一学期,毕业在即,终日泡在图书馆准备毕业设计,偶然碰到萍萍,才知道我们学校图书馆可以提前一天六点预约第二天的座位,我恍然大悟怪不得每天早上去三楼以上座无虚席。

        当时还在二月,天气还冷,二楼、三楼座位多,不过大多都在大厅没有空调,坐在那就一个感觉冷,代码都敲不下去。当我从她那听到那个消息后,回去就订了第二天早上六点的闹钟,虽然抢到了位,但是是真是不好受,六点醒了以后仿佛就睡不着了,到图书馆一点精神没有,连着两天终于受不了了,决定写个程序完成自动预约的功能。


开始分析:

        首先大致了解一下图书馆整个流程,发现不是很难,应该可以做出来。

大致步骤如下:

  1. 登陆
  2. 获取座位预约信息
  3. 开始预约

咋一看还挺简单,随着功能越来越完善,就越来越复杂。


具体步骤: 

  1. 登陆

记图书馆自助预约软件的诞生

        这种纯数字验证码,而且还没有加干扰线,只是做了倾斜处理,属于最简单的验证码了,没什么好说的,形同虚设。

记图书馆自助预约软件的诞生

        f12打开 浏览器开发者工具,username,password都是原生的,毫无疑问verify就是验证码。先加上headers,cookie,发现可以登录,OK 到这完成了第一步。

        在这先贴上登录成功返回的json数据后面会用到,刚开始我没注意到这个问题导致我走了好多弯路。。

记图书馆自助预约软件的诞生

  

        2.获取座位信息

记图书馆自助预约软件的诞生

         经过我多次刷新页面,归纳总结得出17就是每个楼层每个区的编号,二三楼层有三个区每个区的编号都不一样。四楼以上每层楼只有一个区,每层楼就只有唯一的编号。而后面的id在获取座位信息的时候会用到,说到这里我就想到我踩的一个坑,刚开始只分析了一天的数据,我以为那个id(就是后来用到的segment)是固定的,只是第二天比第一天加一,后来我才知道是递增的。。

记图书馆自助预约软件的诞生

        在获取座位信息的时候用到了上一个请求结果的两个参数,写到这我又想到另一个坑,就是startTime,endTime。如果是预约当天的座位startTime就是发起请求的时间,如果预约第二天的座位startTime是08:00。而且day也是第二天的日期,在这我又百度了个轮子,可以自动获取第二天的日期。

         下面是座位预约信息的响应结果

 

记图书馆自助预约软件的诞生

         这里面需要的信息就是id:代表唯一的座位号,name和no都一样:代表座位号,status:1代表空闲,0,代表已预约。这是我又踩了一个坑。自助预约0.9版本当想预约的座位预约是已预约的状态,会自动循环其他座位,但由于列表索引与座位号相差一位,我的程序会显示预约成功而实际预约的是错一位的座位号。还有一个bug,如果当前预约的座位是空闲而下一个座位是已预约,程序会陷入死循环,一直获取空间预约信息,分析代码发现,我只在上一个判断中return,而下面的判断没有return,而是continue!!!

        3.最后就到了预约,这儿我就直接贴代码吧

记图书馆自助预约软件的诞生

         可以看到预约用到的token,expire,就是登陆成功响应的结果。

        

 


 

补充及总结:

        程序使用ConfigParser来设置配置文件,方便其他人修改信息及使用。

        使用schedule调度器让程序每天早上六点自动运行,(bug:如果调度器设置为06:00会提示未到预约时间,一般设置为06:00:05)

        0.9版本中一次只能输入一个座位号,如果预约不到就只能从循环中随机预约,

        1.0版本将座位号改为类似列表的形式,可以自己设置候补座位。

        程序结合任务计划管理程序简直完美,任务计划程序可以让我的程序每天早上五点五十万自动运行,一小时后自动关闭,而不是晚上一直让程序运行。不过昨天早上成功了,今天早上我的电脑自动关机了,不知道怎么回事,准备今晚上再试试。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览208564 人正在系统学习中

来源:LingRannn

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年2月12日
下一篇 2022年2月12日

相关推荐