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

博主通过编程实现图书馆座位自动预约功能,解决了图书馆早起占座难题。他们首先解析验证码并登录,然后获取座位信息,识别可用座位,并进行预约操作。程序包括错误处理和优化,如自动获取第二天日期、处理预约状态等。最终,通过调度器让程序每天定时运行,实现了自动化预约的目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求分析:

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

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


开始分析:

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

大致步骤如下:

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

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


具体步骤: 

  1. 登陆

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

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

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

  

        2.获取座位信息

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

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

	def getTommrrow(self):
		inputdate = datetime.datetime.now().strftime('%Y-%m-%d')
		date = inputdate.split('-')
		inputyear = int(date[0])
		inputmonth = int(date[1])
		inputday = int(date[2])
		if inputmonth in [1, 3, 5, 7, 8, 10, 12]:
			enddate = 31
		elif inputmonth in [4, 6, 9, 11]:
			enddate = 30
		elif inputmonth % 4 == 0:
			enddate = 29
		else:
			enddate = 28
		if inputday < enddate:
			outputyear = inputyear
			outputmonth = inputmonth
			outputday = inputday + 1
		elif inputmonth == 12:
			outputyear = inputyear + 1
			outputmonth = 1
			outputday = 1
		else:
			outputyear = inputyear
			outputmonth = inputmonth + 1
			outputday = 1
		print(str(outputyear) + '-' + str(outputmonth).zfill(2) + '-' + str(outputday).zfill(2))
		self.tomorrow = str(outputyear) + '-' + str(outputmonth).zfill(2) + '-' + str(outputday).zfill(2)
		self.segment = int(self.tomorrow.replace('-', '')[-3:]) + self.primary_segment
		return

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

 

         这里面需要的信息就是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版本将座位号改为类似列表的形式,可以自己设置候补座位。

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

用易图书馆管理软件是一款适合中小型图书馆和单位、学校图书馆使用的管理软件。用易图书馆管理软件功能强大,界面美观,容易上手。 适用用户:中小型图书馆和单位、学校图书馆 用易图书馆管理软件能够实现条码签打印,拼音五笔码的快速查询,包括库管理、读者管理两个基本模块;图类别设置、借出天数设置、借出册数设置、超期罚款和复杂罚款设置;借操作、续借操作和还操作;功能强大的库查询、读者查询、借阅信息查询、还信息查询和还罚款统计并提供模糊查询等功能。并自动显示今日到期读者和已经超期的读者,自动费等功能。今日盘点能帮助您很快的统计出今日所进图以及数量和价格、今日借出图、今日归还图、今日登读者和今日罚款汇总。 用易图书馆管理软件又新增加了报表管理,及时报表显示全部图、在馆图和已经借出去的图,并可直接打印并保存为HTML文件或TXT文件。同时,又增加了数据库发送功能,您可将数据表分别发到Word和Excel当中,以及从Word和Excel导入到软件当中,以便您能更清楚的了解库表和读者登情况,并快速打印。为保证您的系统能安全使用,还增加了管理员功能,每个管理员可分别设置自己的管理权限和登录密码。 用易图书馆管理软件支持中图法第四版,用易图书馆管理软件的应用范围非常广泛,可适用于任何图书馆、档案馆、情报所、店、电子网站的各种类型、各种载 体形式的文献、信息的分类。《中图法》电子版能够实现文献、信息的计算机辅助标引,同时为进一步 研究和实现文献、信息的自动标引创造了条件。 《中图法》电子版具有友好的界面,易掌握、易操作。不仅具有一般的类号、类名检索功能,而且具有下列特殊功能: ★类号的精确检索、前方一致检索、后方一致检索; ★用鼠标点击类目可层层展开各级类目; ★使用前方一致、后方一致的方法检索类名和注释中的任意词素; ★可进行类号、类名、注释间的布尔逻辑检索,又可以在任意类下进行语词检索; ★分类表各组成部分及分类款目各要素使用超文本链接,可进行多窗口浏览与切换。 总之,《中图法》电子版具有印刷版所不及的灵活多样、全文多维检索和显示浏览功能。它分单机版和网络版,备有编目接口,分编人员只要配有一台电脑,键入所确定的文献信息主题词,数秒之后就可快速地在《中图法》中查找到相应的类号,标到所需的数据库中,缩短了分类标引时间,大大降低了劳动强度,提高了工作效率。它的出版将为我国文献、信息计算机标引工作带来极大的便利,给传统的文献标引工作带来革命性的变化。 用易图书馆管理软件功能详尽,是中小图书馆和单位、学校图书馆的理想选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值