山东大学图书馆预约脚本使用教程


山东大学图书馆预约脚本使用教程前言一、下载和安装二、使用代理三、实际使用1.实际使用前建议仔细研究一下参数2.linux导库问题3.nohup问题四、成功演示后记
前言
此脚本来自2018级山青保研至清华学长在github上的项目,实测可用。
PTYin/sdu-lib-seat: 山东大学图书馆预约脚本,Docker简单部署/提供测试环境/支持所有校区/集成图形界面。(github.com)
https://github.com/PTYin/sdu-lib-seat#图形界面管理
如果说学长的整个项目是做好了饭端到你的嘴边,并附带有完整的进食方法说明,本文章内容就是解决''舌头与牙齿不能很好协调“之类更基础问题的方法。
虽说是自动化预约脚本,用起来也有一定门槛,你至少需要以下的基础:
基本会用linux命令/windows命令
基本了解docker命令
基本了解git
最好有个服务器,没有也行
或者需要一个会这些的男朋友/女朋友,但这个要求过于高了,像多人游戏最难搞到的配置是朋友不是显卡,所以建议大家自己动手,丰衣足食。
一、下载和安装

按照学长的README来,首先会遇到下载的问题
众所周知,菜鸟们基本上无法直接git clone github上的项目,或者能不能成功全靠脸,我很有自知之明的知道我脸黑,至少我开着全局代理在终端clone还是不成功,所以建议直接Download ZIP下载整个项目的压缩包。
下载之后解压,放在你要让这个脚本运行的环境里,此环境需要安装docker,python/python3,pip/pip3。
我选择放在我的服务器上,因为服务器不关机,可以让脚本挂在后台一直运行。
新手可以放在windows下自己能很方便找到的地方,在每天的12.30开始预约之前运行一次就行。
二、使用代理

新装了docker后莫忘把自己加到用户组里,避免每次使用docker命令都需要加上sudo权限
sudo usermod -aG docker $USER
执行完此操作后,需要退出服务器,再重新登录回来,才可以省去sudo权限,不然会提示Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post。
这一步我遇到的问题是,云服务器8888端口已经被宝塔面板占用,即提示Error starting userland proxy: listen tcp 127.0.0.1:8888: bind: address already in use,于是我把命令中的127.0.0.1:8888:8888换成127.0.0.1:6666:6666,并在服务器控制台开放6666端口


建立代理成功。
windows下docker也一样,只不过我不太清楚映射端口这儿该怎么整(所以建议还是用服务器吧)
三、实际使用

1.实际使用前建议仔细研究一下参数
比如,威海校区的Example里,
python app.py --userid 201900800xxx --passwd abc123 --area '威海馆-主楼(3-12)-三楼阅览室' --time 12:31:00 --delta 0 --seats 200 --starttime '08:00' --endtime '12:00'python app.py --userid 201900800xxx --passwd abc123 --area '威海馆-主楼(3-12)-三楼阅览室' --time 12:31:00 --delta 0 --seats 200 --starttime '14:30' --endtime '22:00'
既然预约主楼,主楼不需要分时段预约,所以starttime和endtime可以省略掉。
即:
python app.py --userid 201900800xxx --passwd abc123 --area '威海馆-主楼(3-12)-三楼阅览室' --time 12:31:00 --delta 0 --seats 200
比如参数delta,0代表预约第2天,1代表预约第3天,以此类推,默认预约第2天
如果想要预约今天的,--delta -1   (想不到吧,我也没想到能成功hh,感觉-1这个参数基本上都是出现在出bug的地方)
现在大家基本都是用python3,所以
python3 app.py --userid 201900800xxx --passwd abc123 --area '威海馆-主楼(3-12)-三楼阅览室' --time 12:31:00 --delta 0 --seats 200
座位号一定要按格式,比如--seats 66不对,应该是--seats 066

2.linux导库问题
如果在linux上运行,明明pip3 install -r requirements.txt了之后,确定所有需要的包都安装齐全之后,一运行起来还是提示ModuleNotFoundError: No module named xxx
那么很有可能你的linux上有多个python版本,将不需要的版本remove之后,再重新pip3 install 需要的库,安装过程中时刻注意一下cd /usr/lib/python3/dist-packages/ | ls -al有没有出现库,一般这时候就行了,
详细内容查看↓
linux下No module named requests的解决方法jxqbuct的博客-CSDN博客linux requests
https://blog.csdn.net/jxqbuct/article/details/89098223
3.nohup问题
想要挂在后台一直运行,需要nohup命令,运行时的代码还需要改变一下,即
nohup python3 app.py --userid 20200080xxxx --passwd xxx --area '威海馆-主楼(3-12)-三楼阅览室' --time 7:55:00 --delta -1 --seats 166 &
此时的意思是将命令执行后的输出添加到家目录下的nohup.out,建议时常打开查看一下自己命令的运行状态,比如如果你没在sdu-lib-seat-master/src/main/目录下运行此命令,打开nohuo.out文件查看之后才能发现自己的错误

Linux nohup 命令 | 菜鸟教程 (runoob.com)
https://www.runoob.com/linux/linux-comm-nohup.html
nohup命令运行之后会出现进程号,如果不想预约了就可以用命令kill -9 xxx杀死。
或者直接ps -aux命令显示所有进程,找到COMMAND列里相符合的进程,记住进程号杀死。
四、成功演示
目前只尝试了当天的预约,
命令为
nohup python3 app.py --userid 20200080xxxx --passwd xxx --area '威海馆-主楼(3-12)-三楼阅览室' --time 7:55:00 --delta -1 --seats 166 &
nohup.out的输出为

可以看到,它自动给我选择了没有被占用的092座。
手机端微信小程序上刷新后显示预约:

成功。
后记
    温馨提示,睡觉前别搞这种令人兴奋的东西,否则你会在床上翻来覆去想到五点睡着,七点被闹钟叫醒,醒来第一件事是打开小程序看昨晚挂上的进程有没有给我预约到座位,思考一番发现是delta错误的设置成了预约明天座位,然后起床上周六的怨种早八。

到顶部