“我们学校预约体育场馆需要每晚24:00拼手速抢名额,为了代替人工手动预约,我利用Python开发了一个场馆自动预约系统”
基本情况介绍
我们学校的体育场馆预约是在“云财”微信小程序上面完成。
在预约时间上,周内的周二和周五仅对教职工开放,该时段学生没有预约权限,只能预约周一、周三和周四的场地。本项目实现自动预约的关键是获取API接口(俗称的“抓包”),接下来我将分别从小程序登录、场馆界面、实际预约三个部分来介绍如何来“抓包”。
通过Reqable获取微信小程序接口的方法,参考:https://www.bilibili.com/video/BV1Tk4y1A7T6
一、"云财"小程序登录
启动Reqable,并打开“云财”小程序。在小程序中输入我的学号和密码,成功登录后,在Reqable中按下Ctrl+F搜索我的学号或姓名,我成功抓取到以下两个接口:
https://ids.ynufe.cloud/connect/token
https://gate.ynufe.cloud/api/cache/cached-personnel/personnel-by-current-user
下图为在Reqable中对登录接口进行“抓包”的界面:二、"云财"小程序场馆界面
1、进入“场馆列表”界面时
启动抓包工具Reqable并在小程序中成功登录后,依次从“业务应用-体育场馆预约服务-龙泉路校区”进入到如下右图中的“场馆列表”界面时,我在Reqable中我找到了如下接口:https://gate.ynufe.cloud/api/app/stadium?skipCount=0&maxResultCount=100&departmentId=320000
2、进入“场馆可用场地”界面时
下一步,从“南院体育馆(主馆)”进入如下右图中的“场馆可用场地”中的“今日场次”时,我在Reqable中我找到了如下接口:
https://gate.ynufe.cloud/api/app/sport-field/available?stadiumId=60ea925f-82a6-4bd3-039d-08d7fa0dc084&day=0
当进入“场馆可用场地””中的“明日场次”时,我在Reqable中我找到了如下接口:
https://gate.ynufe.cloud/api/app/sport-field/available?stadiumId=60ea925f-82a6-4bd3-039d-08d7fa0dc084&day=1
后经过对比发现,接口中携带的参数stadiumId即对应为羽毛球主馆,参数day即对应场次日期,day=0时为今日场次,day=1时为明日场次。
三、"云财"小程序实际预约
1、输入同行人学号和姓名
在小程序中成功登录、并在“今日场次/明日场次”中选择空闲的场次后,进入下图中的预约界面。当我输入同行人的姓名和学号时,我在Reqable中我找到了如下接口:
https://gate.ynufe.cloud/api/app/sport-field/companion
2、输入完,点击“提交预约”按钮
当我最终点击“提交预约”按钮时,我在Reqable中我找到了如下接口:
https://gate.ynufe.cloud/api/app/sport-appointment/make-appointment
四、结语
通过以上对小程序登录、场馆界面、实际预约三部分的“抓包”,便可基于Python完成“云财”小程序羽毛球场馆的自动预约脚本(完整代码程序的编写可辅助AI完成)。
但有一个小问题——不可能每次我们想要预约时,都来打开电脑运行一遍该程序。要想真正“解放双手”实现全自动化且定时预约,我们可以通过电脑自带的“任务计划程序”完成(只需要在预约时保证电脑联网就行)。
另外,如果我们想要及时接收程序的预约结果,可以让程序预约结束后通过企业微信告诉我们,这就需要调用企业微信的Webhuook地址。
如果大家对这部分感兴趣,也欢迎大家在评论区留言,一起交流讨论~