基于 Rust 生态的吉林大学智能选课应用
一个现代化、高效、跨平台的选课助手
✨ 项目特色 • 📥 快速开始 • 📖 使用指南 • 🛠️ 技术架构 • 📱 移动端支持 • ⚖️ 免责声明 • 🚀 本地开发 • 🤝 贡献指南 • 📋 版本历史 • 💖 致谢 • 📈 开发历程
- 前端: Leptos (Rust 编写的响应式 Web 框架)
- 后端: Tauri (轻量级桌面应用框架)
- 核心: 纯 Rust 实现,性能卓越
- 跨平台: 支持 Windows、macOS、Linux 和 Android
- 多线程并发: 12线程独立轮询,各线程从不同课程开始遍历
- 智能间隔: 500ms请求间隔,平衡效率与服务器负载
- 自动重连: 网络中断时自动重连,无需人工干预
- 实时反馈: 详细的选课状态和错误信息展示
- 开箱即用: 无需配置环境,下载即可使用
- 图形界面: 直观的 GUI 操作界面
- 移动支持: Android APP 已成功构建并测试
- 命令行版: 提供 TUI 版本供高级用户使用
- 访问 Releases 页面
- 下载最新版本的
funky-lesson.exe(Windows) 或对应平台的安装包 - 双击运行,无需额外配置
- 从 Releases 页面 下载 APK 文件
- 在 Android 设备上安装并运行
对于喜欢命令行的用户,可以直接使用核心库:
git clone https://github.com/ZoneHerobrine/funky_lesson_core.git
cd funky_lesson_core
cargo run <用户名> <密码> <选课批次ID> <是否循环>- 配置课程: 提前去吉林大学本科生选课网站收藏好你要抢的课
- 启动应用: 抢课前十分钟左右,运行 FunkyLesson 应用程序
- 登录账户: 输入您的学号和教学管理系统密码
- 选择批次: 从可用的选课批次中选择目标批次
- 开始选课: 点击开始按钮,应用将自动进行选课尝试
- 监控状态: 实时查看选课进度和结果,成功后会有提示
- 一般流程: 越接近选课时间,每秒发送成功的请求数会逐渐变少,然后选课网站会503一段时间。这个时候,不要退出软件,不要退出软件,不要退出软件,等网络恢复后,软件会自动继续尝试选课。如果在正卡的时候退出,能否再次登陆成功将会成为一个问题,影响选课成功率。
- 多线程配置: 默认12线程,可根据需要调整
- 请求间隔: 默认500ms,平衡效率与服务器负载
- 自动重试: 网络错误时自动重连
- 状态保存: 应用会记住您的配置
Q: 选课开始时出现"请求错误"怎么办? A: 这是正常现象。选课刚开始时服务器负载较高,请保持应用运行,网络恢复后会自动继续。
Q: 多少个线程比较合适? A: 推荐使用默认的12线程配置,既能保证效率又不会给服务器造成过大压力。
Q: 可以同时选多门课吗? A: 可以,应用支持同时监控多门课程的选课状态。
程序不能保证100%选中课程
选课成功率受多种因素影响,包括网络状况、服务器稳定性、课程余量等。建议:
- 保持应用持续运行
- 同时准备手动选课作为备选方案
- 关注官方选课通知
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Leptos 前端 │ ←→ │ Tauri 桌面 │ ←→ │ funky_lesson_ │
│ (Rust WASM) │ │ 应用框架 │ │ core 核心库 │
└─────────────────┘ └─────────────────┘ └─────────────────┘funky-lesson/
├── src/ # Leptos 前端源码
├── src-tauri/ # Tauri 后端源码
├── src-proxy/ # 代理服务器
├── note/ # 开发笔记
├── public/ # 静态资源
└── target/ # 编译输出- Rust: 1.85+
- Tauri CLI: 最新版本
🎉 最新更新: Android 移动端应用已成功构建并测试!
- ✅ 完整的选课功能
- ✅ 响应式界面设计
- ✅ 与桌面端相同的核心功能
- ✅ 优化的移动端交互体验
- 从 Releases 下载最新的 APK 文件
- 在 Android 设备上允许安装未知来源应用
- 安装并运行应用
注意: 由于应用未在 Google Play 商店发布,Android 可能会显示安全警告,这是正常现象。
请仔细阅读以下免责声明,使用本软件即表示您同意以下条款:
- 📚 用途声明: 本软件仅供学习和研究使用,请勿将其用于任何违反学校或相关法律法规的行为
- 🛡️ 责任声明: 使用本软件所产生的一切后果均由用户自行承担,开发者不对任何因使用本软件造成的直接或间接损失负责
- 📜 法规遵守: 用户在使用本软件的过程中,需遵守所在机构及国家的相关法律法规,如因使用本软件违反相关规定,责任由用户自行承担
- 🏫 官方声明: 本软件未经吉林大学官方授权,与吉林大学无任何直接或间接关联
使用本程序即代表您完全理解并同意以上免责声明的所有条款
- 安装 Rust 工具链:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh- 安装 Tauri CLI:
cargo install tauri-cli- 安装前端依赖:
cargo install trunk# 克隆项目
git clone https://github.com/Islatri/funky-lesson.git
cd funky-lesson
# 开发模式运行
cargo tauri dev
# 构建生产版本
cargo tauri build
# 构建 Android 版本
cargo tauri android build项目提供了便捷的开发脚本:
- Windows:
scripts/dev.ps1- PowerShell 开发脚本 - Unix/Linux:
scripts/dev.sh- Bash 开发脚本 - Windows (新版):
scripts/dev-new.ps1- 改进的 PowerShell 脚本
我们欢迎任何形式的贡献!
- Bug 报告: 发现问题请创建 Issue
- 功能建议: 提出新功能想法
- 代码贡献: 提交 Pull Request
- 文档改进: 完善项目文档
- 遵循 Rust 官方代码风格 (
cargo fmt) - 添加适当的测试用例
- 更新相关文档
- 提交信息使用英文并遵循 约定式提交
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 创建 Pull Request
- ✅ 重大突破: Android 移动端成功构建并测试
- ✅ 完善的桌面端应用
- ✅ 12线程并发选课策略
- ✅ 自动重连机制
- ✅ 现代化 UI 界面
- ❌ Android 构建尝试(部分问题)
- ✅ Proxy 服务器实现
- ✅ 8线程并发选课策略
- ✅ 稳定的桌面端版本
- ✅ 基础选课功能完善
- ✅ Proxy 方案验证成功
- ✅ 核心功能实现
- ❌ Web 端 CORS 问题
- 🔄 技术方案调整
本项目采用 MIT License 开源协议。
- funky_lesson_core: 核心选课逻辑库
- Fuck-Lesson: 原始 Python 实现 (by H4ckF0rFun)
特别感谢以下项目和开发者:
- yy4550 - 我的室友,感谢他的陪伴与试用
- MoonWX - 复刻自 H4ckF0rFun 的 Fuck-Lesson Python 脚本
- H4ckF0rFun - 原始选课脚本 Fuck-Lesson 创作者
- 背景图片 - pid是91403676,很有张力的ジャッジメント
- 应用图标 - pid是96308619,可爱的屑魔女
- Rust 社区 - 提供优秀的生态系统
- Tauri 团队 - 现代化的桌面应用框架
- Leptos 社区 - 强大的 Rust Web 框架
⭐ 如果这个项目对您有帮助,请给它一个 Star!
让更多同学发现这个好用的选课工具 🎓
- ✅ 重大突破: Android 移动端成功构建并通过测试
- ✅ 技术债务清理: 解决了之前版本中的关键问题
- ✅ 完整的跨平台支持: Windows、macOS、Linux、Android 全平台覆盖
当时尝试构建 Android 版本遇到了网络请求问题:
- 开发环境 (
android dev) 运行正常 - 构建 APK 后网络请求失效
- 推测可能与设备浏览器配置相关
现状: 这些问题在 v0.1.0 中已经完全解决!
- **✅ 可靠的桌面端应用
- **✅ 8线程并发策略优化
- **✅ 500ms请求间隔平衡
- **✅ Proxy 服务器方案验证成功
- **✅ 网络请求问题的有效解决方案
- **✅ 为后续版本奠定基础
当时遇到的主要挑战:
- CORS 限制: Web 应用无法直接访问选课网站 API
- 技术路线调整: 从纯 Web 方案转向 Tauri 混合方案
- 流式传输限制:
tauri::command当时不支持流式传输
经验总结: 这次的技术选型调整为项目最终成功奠定了基础,证明了技术决策的重要性。
- 从 Web 到 Tauri: 解决了 CORS 和权限问题
- 从单线程到多线程: 大幅提升选课效率
- 从代理到原生: 简化了部署和使用流程
- 从桌面到移动: 实现了真正的跨平台支持
感谢所有在开发过程中提供帮助和建议的朋友们! 🙏