知校用于抓取西南大学公开官方通知,按学院、学生层次、校区和业务标签归类,并通过 REST API 和可选 Webhook 提供给公网前端。采集服务与 Next.js 前端分离,SQLite 仅作为本地运行时缓存。
- 按学院、学生层次、校区、标签和关键词筛选通知。
- 支持开始日期和结束日期查询,结果按规范化年月日倒序排列。
- 新通知会重新访问官方详情页核验标题;核验成功后标记为“已核实”,失败记录保留明确状态。
- 后台守护进程按间隔持续抓取,管理员接口可调整抓取间隔和缓存上限,并查看日/月访问量。
- Next.js 前端和 Python API 可以独立启动、构建和部署。
- Python 3.10 或更高版本。
- Node.js 20.9 或更高版本。
- pnpm 10 或可用的 Corepack。
后端只使用 Python 标准库运行;开发工具不需要访问本机路径或提交数据库文件。
在项目根目录执行:
# 执行一轮抓取
python3 main.py --crawl
# 仅启动 API,默认监听 0.0.0.0:8080
python3 main.py --server
# 启动常驻抓取和 API 服务
python3 main.py --daemon
Windows PowerShell 可将 python3 替换为 py -3。首次运行会自动创建 data/swu_notices.db;数据库和日志文件已加入忽略规则,不应提交到仓库。
常用接口:
GET /api/health
GET /api/notices?date_from=2026-01-01&date_to=2026-12-31&tag=选课
GET /api/categories
GET /api/stats
cd web
corepack enable
corepack pnpm install --frozen-lockfile
cp .env.example .env.local
corepack pnpm dev
PowerShell 使用 Copy-Item .env.example .env.local 替代 cp。开发页面默认地址为 http://localhost:3000,.env.local 中的 NEXT_PUBLIC_API_BASE_URL 默认指向 http://localhost:8080。
生产构建和启动:
cd web
corepack pnpm typecheck
corepack pnpm build
corepack pnpm start
生产环境建议让 Caddy 或 Nginx 提供 HTTPS,并将 /api/* 反向代理到后端、其它路径反向代理到 Next.js。可直接参考 部署/00-swu-notice.caddy 和 部署/swu-notice-web.service 模板。
后端通过环境变量读取运行配置,示例值仅用于说明:
SWU_CORS_ORIGIN=https://your-frontend.example
SWU_ADMIN_TOKEN=replace-with-a-random-admin-token
SWU_WEBHOOK_URL=https://your-public-server.example/api/ingest
SWU_WEBHOOK_SECRET=replace-with-a-random-webhook-secret
管理员 Token 和 Webhook 密钥只放在服务器私有环境文件或密钥管理服务中,禁止写入前端代码、README、日志和 Git 历史。前端管理员界面通过 X-Admin-Token 请求头完成服务器校验,不持久化真实密钥。
抓取地址集中维护在 config/sources.json,当前包括:
- 西南大学主站:通知公告(https://swu.edu.cn/tzgg.htm)、公告公示(https://swu.edu.cn/tzgg1.htm)
- 本科生院:通知公告(http://ugs.swu.edu.cn/sylm/tzgg.htm)、教学运行(http://ugs.swu.edu.cn/jxxx/jxyx.htm)、成绩学籍(http://ugs.swu.edu.cn/jxxx/cjxj.htm)
- 荣昌校区管委会:通知公告(http://rcxq.swu.edu.cn/index/tzgg.htm)
- 研究生院:培养工作通知(http://yjsyygb.swu.edu.cn/pygz/tzgg.htm)、综合通知公告(http://yjsyygb.swu.edu.cn/index/tzgg.htm)
- 党委学生工作部:通知公告(http://xsc.swu.edu.cn/index/sylm/tzgg.htm)
- 国际学院:学院主页(http://gjxy.swu.edu.cn/)
- 计算机与信息科学学院/软件学院:通知公告(http://cis.swu.edu.cn/sylm/tzgg/gztz.htm)
- 人工智能学院:通知公告(http://ai.swu.edu.cn/index/tzgg.htm)
- 经济管理学院:通知公告(http://cem.swu.edu.cn/sylm/tzgg.htm)
- 商贸学院:学院主页(http://smxy.swu.edu.cn/)
这些网址属于外部官方站点,具体页面结构和可用性可能变化;修改来源后请先运行 python3 main.py --crawl 验证解析结果。
config/ 抓取参数和官方信息源
core/ HTTP 客户端、页面解析和标签分类
services/ 采集调度与 Webhook 推送
storage/ SQLite 数据访问层
api/ REST API 服务
web/ Next.js 前端
部署/ Caddy 和 systemd 模板
data/ 运行时数据库目录(数据库文件不提交)
main.py 后端 CLI 入口
python3 -m compileall -q api core services storage main.py
cd web
corepack pnpm typecheck
corepack pnpm build
本项目只处理公开通知页面。请遵守学校网站使用条款和服务器出口策略,控制抓取频率,不要绕过登录、验证码或访问控制。