由于本人所在学校的图书馆需要预约座位,抢座,签到,签退,甚是麻烦,所以自己写了个python脚本,实现准时自动抢座,签到,签退的功能。
参考的接口文档:https://github.com/Closty/cx_seat
python脚本:
# -*- codeing = utf-8 -*-
# @Time : 2021/11/2 13:07
# @Author : 大白
# @File : library.py
# @Software : PyCharm
import requests
import urllib
import urllib.request
import hashlib
import time
from concurrent.futures import ThreadPoolExecutor
def md5(str):
import hashlib
m = hashlib.md5()
m.update(str.encode("utf8"))
return m.hexdigest()
def message(content,phone):
statusStr = {
'0': '短信发送成功',
'-1': '参数不全',
'-2': '服务器空间不支持,请确认支持curl或者fsocket,联系您的空间商解决或者更换空间',
'30': '密码错误',
'40': '账号不存在',
'41': '余额不足',
'42': '账户已过期',
'43': 'IP地址限制',
'50': '内容含有敏感词'
}
# smsapi = "http://api.smsbao.com/"
# 短信平台账号
# user = 'bigwhite'
# 短信平台密码
# password = md5('admin@123456')
# 要发送的短信内容
# content = '预约成功'
# 要发送短信的手机号码
# phone = '11111111111'
data = urllib.parse.urlencode({'u': 'bigwhite', 'p': md5('1111111111'), 'm': phone, 'c': content})
# send_url = smsapi + 'sms?' + data
# print(send_url)
send_url = "http://api.smsbao.com/" + 'sms?' + data
print(send_url)
# response = urllib.request.urlopen(send_url)
# the_page = response.read().decode('utf-8')
# print(statusStr[the_page])
username = ['177********','456','789','123213']
passwd = ['@1******','fgh','aaaa0','asda']
def zhuchengxu(i):
url1 = 'https://cx_api.ssss.men/cxapi?active_id=rob&username=%s&passwd=%s'%(username[i],passwd[i]) #预约明天
print(url1)
# time.sleep(5)
# url2 = 'https://cx_api.ssss.men/cxapi?active_id=signback&username=%s&passwd=%s'%(username[i],passwd[i]) #退座
# print(url2)
response = requests.get(url1)
result = response.text
# print(result)
if 'true' in result:
print('成功')
# content1 = "退座位成功"
# message(content1, username[i])
else:
print('失败')
# content2 = "操作失败,请登录app查看"
# message(content2, username[i])
# response = requests.get(url)
# print(response.status_code)
# print(response.text)
if __name__ == '__main__':
with ThreadPoolExecutor(max_workers=100) as pool:
for j in range(1):
pool.submit(zhuchengxu,j)
由于本人刚学习python,比较菜,还请各位大佬多多指点
发短信的那个部分用的是一个短信平台的接口文档,由于月租太贵了,我就取消了这个发短信的功能,大家可以忽视发短信的模块,同时加入了多线程,让几个号能同时预约抢座,只需要把账号密码放入数组中,更改range()里面的值即可,1是只抢177的座位,输入2可以同时抢177和456的座位,由于接口的功能限制,所以只能预约最近一次的预约时间段和座位。
我的学校开放预约的时间是晚上10:30,而且一次只能预约12个小时,所以我先用我的学习通预约了一次早上9点到晚上9点的座位,然后编写了三个python脚本,分别实现的功能是22:30预约,9:00签到,20:59签退,只需要更改脚本里面的url的参数即可,接下来就是怎么让py脚本准时运行呢?
我想的办法是把py脚本编译成可执行文件,放到云服务器上,编写执行文件时间
首先在服务器上运行
pip install pyinstaller
成功后,将三个脚本上传到服务器,在当前目录下运行
pyinstaller -F library_register.py pyinstaller -F library_sign.py pyinstaller -F library_exit.py
然后你会在当前目录下发现dist目录
cd dist
然后ls就能查看编译后的三个可执行文件了,接下来就是定时了,在linux下有个定时执行的文件,我们可以编辑它,输入
vim /etc/crontab
然后编辑配置
我这里的设置就是每天在设置的时间以root权限执行/root/library/dist/下的三个文件。
这个脚本用了一段时间了,帮我和我室友抢座,也祝愿我室友他们都能成功上岸,帮他们分担一点抢座的压力,目前没有出现什么问题,就是今天发现,现在的接口网站没有备案,但是功能还是可以实现的,不影响,今天发现的。目前还是可以用的。仅供给大家参考,大佬们可以自己加以完善,祝愿大家学业有成!
申明!!!
一定要按照自己学校预约规则来,不影响他人,不违反规定!仅供学习参考!请勿用于不法途径!请勿商用!出现任何问题后果自负!与本人无关!



