OBGym Core 是一个用于大山中学体育场馆预约的自动化工具。它提供了一个简单的接口来管理账户、查询场地信息以及预约场地。
在使用本项目前,请务必仔细阅读声明部分。如果您觉得本项目对您有帮助,欢迎点亮 star ⭐,这是对我最大的支持与鼓励。
近年来,随着社会经济的迅猛发展和居民生活水平的显著提升,公众对于体育运动及健康生活方式的关注度持续攀升。特别是在学校中,学生群体对于体育锻炼的需求呈现出明显的增长态势。然而,体育经费的有限性与日益膨胀的运动需求之间的矛盾盾日益突出。例如,学生每年体育经费为500元,而羽毛球场地每小时的费用为30元,这导致一年经费甚至不足以支持半年内每周一次的羽毛球活动。在缺少体育经费的背景下,学生采取了多种方式进行体育锻炼,包括蹭他人场地、在场地无人时使用、蹭体育课以及请求他人代为预约等。本项目受到网络购物中的锁定库行为的启发,开发了一种预约场地的方法。
OBGym 项目由两个主要组件构成:
- OBGym Core: 作为项目的核心引擎,实现所有基础功能,并提供了完整的 API 接口供调用
- OBGym App: 基于 OBGym Core 开发的 Web 应用程序,提供了直观友好的用户界面,由 AI 开发
本项目采用 Docker 容器化部署方案,极大简化了部署流程。用户只需在后台启动容器服务,即可通过 Web 界面进行场地预约操作。系统会自动在后台处理并执行用户的所有预约指令。
-
安装并启动 Docker 环境
访问 Docker 官方网站 下载并安装 Docker Desktop。
注意:下载过程可能需要使用代理服务。安装完成后,启动 Docker Desktop 应用程序。
-
获取配置文件
从项目仓库下载
docker-compose.yml配置文件:下载地址注意:下载过程可能需要使用代理服务。
-
准备运行环境
使用快捷键
Win+R打开运行窗口,输入wt并回车以启动终端。在终端中导航至已下载的
docker-compose.yml文件所在目录。 -
获取 Docker 镜像
在终端中执行以下命令拉取所需的 Docker 镜像:
docker compose pull
-
启动服务
执行以下命令启动 OBGym 服务:
docker compose up
demonstration.mp4
-
打开浏览器,访问系统地址
http://127.0.0.1:16080 -
使用管理员账号登录系统
- 账号:
admin - 密码:
admin
- 账号:
-
添加您的个人账户信息
- 使用中央身份验证系统的账号密码
- 支持添加多个账户
-
预约场地
- 选择目标校区和场馆
- 选择具体场地和时间段
- 确认预约信息无误
-
提交预约任务
- 系统将在后台自动执行预约
- 可在任务列表中查看预约进度
-
账号密码的安全性说明
本项目承诺不会以任何方式窃取您的账户信息,账号密码将加密存储在您的本地设备中,为确保账号安全,请注意以下事项:
- 请勿在他人部署的项目中添加您的账号信息
- 由于密码通过 HTTP 明文传输,远程访问 Web 界面时存在被中间人攻击的风险
- 请仅在可信任的个人设备上部署使用,若本地数据库被恶意获取,虽然密码非明文存储,但密码仍会泄露
-
为什么不使用 Cookies 登录方式?
由于 Cookies 的有效期较短,需要频繁重新登录。
-
“仅预约”功能是什么?
“仅预约”是指系统只进行场地预约而不自动支付。系统会在后台每隔30分钟自动尝试预约,直到所选场地的使用时间结束。这样可以让用户有更多时间决定是否付费使用该场地。故请勿在所选场地的使用时间结束前关闭程序。
-
登录失败的常见原因
- 不在校内网络环境
- 请确保输入的账号密码正确
- AI 验证码识别出现错误
-
如何修改 Web 界面访问密码?
如需修改访问密码,请编辑
docker-compose.yml文件,找到并修改以下环境变量:AUTH_USER: 登录用户名AUTH_PASS: 登录密码
-
遇到未知错误如何处理?
如果遇到系统异常或未知错误,请按以下步骤处理:
- 保存完整的系统运行日志
- 记录故障发生的具体时间
- 详细描述故障现象和操作步骤
- 在项目 GitHub 页面提交 issue,附上以上信息
本系统提供了完整的 API 接口,详细的接口定义和使用说明请参考 obgym_api.py 文件。以下将介绍主要的 API 功能和数据结构。
-
GymCampus: 校区信息- name: 校区名称
- code: 校区唯一标识码
-
GymFacility: 场馆设施信息- name: 设施名称
- serviceid: 设施服务ID
-
GymArea: 场地信息- sname: 场地名称
- sdate: 预约日期
- timeno: 时间段编号
- serviceid: 设施服务ID
- areaid: 场地ID
- stockid: 库存ID
-
GymOrder: 预约订单信息- orderid: 订单ID
- createdate: 创建日期
-
Job: 任务信息- status: 任务状态(PENDING/RUNNING/RETRY/SUCCESS/FAILED)
- job_level: 任务级别(MAIN/USER)
- job_id: 任务ID
- description: 任务描述
- job_type: 任务类型(UNKNOW/RENEW/BOOK/BOOK_AND_PAY)
- result: 任务结果列表
- failed_count: 失败次数
- created_at: 创建时间
- updated_at: 更新时间
- task_todo: 待执行任务信息(可选)
-
add_account(account: str, password: str) -> Dict- 功能:添加新账户
- 输入:
- account: 账户用户名
- password: 账户密码
- 返回:包含操作结果的字典
-
remove_account(account: str) -> Dict- 功能:删除账户
- 输入:
- account: 要删除的账户用户名
- 返回:包含操作结果的字典
-
get_accounts() -> List[Dict]- 功能:获取所有账户列表
- 输入:无
- 返回:账户信息列表
-
renew_account(account: str) -> Dict- 功能:更新账户登录状态
- 输入:
- account: 账户用户名
- 返回:包含操作结果的字典
-
get_campus(account: str) -> List[GymCampus]- 功能:获取校区列表
- 输入:
- account: 账户用户名
- 返回:GymCampus对象列表
-
get_facility(campus: GymCampus, account: str) -> List[GymFacility]- 功能:获取场馆设施列表
- 输入:
- campus: 校区对象
- account: 账户用户名
- 返回:GymFacility对象列表
-
get_area(facility: GymFacility, date: str, account: str) -> List[GymArea]- 功能:获取场地信息
- 输入:
- facility: 场馆设施对象
- date: 日期字符串
- account: 账户用户名
- 返回:GymArea对象列表
-
only_book(area: GymArea, account: str) -> Dict- 功能:创建预约任务
- 输入:
- area: 场地对象
- account: 账户用户名
- 返回:包含job_id的字典
-
book_and_pay(area: GymArea, account: str) -> Dict- 功能:创建预约并支付任务
- 输入:
- area: 场地对象
- account: 账户用户名
- 返回:包含job_id的字典
-
get_all_jobs() -> Dict- 功能:获取所有任务列表
- 输入:无
- 返回:包含任务列表的字典
-
get_job_info(job_id: str) -> Job- 功能:获取任务详细信息
- 输入:
- job_id: 任务ID
- 返回:Job对象,包含任务的详细信息
-
remove_job(job_id: str) -> Dict- 功能:删除任务
- 输入:
- job_id: 要删除的任务ID
- 返回:包含操作结果的字典
本项目采用木兰宽松许可证第2版(Mulan PSL v2)进行许可。
欢迎提交 Issue 和 Pull Request!
本项目按“现状”提供,仅供技术学习和交流使用,不提供任何明示或暗示的保证。在任何情况下,作者或版权所有者不对任何索赔、损害或其他责任负责。本项目使用本项目所产生的任何违规行为与作者无关。
如有任何问题或侵权行为,请及时与作者联系,我将立即删除相关内容。
使用本项目即表示您已完全理解并同意:
- 本项目仅用于学习和研究目的
- 不得将本项目用于任何违法或不当用途
- 使用本项目所造成的任何后果由使用者自行承担
