yuvraaj1110/pete-purdue-etransfer

GitHub: yuvraaj1110/pete-purdue-etransfer

一款普渡大学学分转换查询的 Chrome 扩展,通过逆向工程 Banner 接口让用户在任意高校网站上高亮课程即可查看转学分结果。

Stars: 0 | Forks: 0

# Pete — 普渡大学学分转换 🚂 **Pete**(得名于普渡大学的吉祥物)是一个 Chrome (MV3) 扩展程序:在任何大学网站上高亮显示一门课程 —— 例如 Ivy Tech 目录中的 `CSCI 240 – Data Structures` —— 即可立即查看它 是否能转入**普渡大学西拉法叶分校**,对应哪门普渡课程,以及获得哪种学分。批量模式:高亮显示整个课程表,只需 **一次** 请求即可获得一份 带评级结果的学分转换报告卡。 ## 工作原理 不存在现成的 API。我们逆向工程了普渡大学公开的 Banner 自助服务 [等效指南](https://selfservice.mypurdue.purdue.edu/prod/bzwtxcrd.p_select_info) (完整的 Spike 技术说明:[`docs/purdue-endpoint.md`](docs/purdue-endpoint.md))并直接在扩展程序中调用它 —— 无需后端,无需密钥,零基础设施成本。其 Oracle 表单数组绑定恰好支持**每次请求 10 门课程**:这是一个大学从未构建过的批量 API。 ``` content script ──▶ service worker ──▶ Purdue Banner (throttled fetch, 30-day cache) (highlight UI) (orchestrator) │ ▲ ▼ Shadow-DOM card ◀── offscreen document (DOMParser — MV3 workers don't have one) ``` 逻辑的正确性由纯粹的、经过测试夹具测试的模块(`src/parser.ts`、`src/transfer-client.ts`、 `src/school-map.ts`)保证;任何不纯粹的部分都只是一层薄薄的封装。无法识别的页面布局会**明确**报错 为 `UNKNOWN` —— 自信地给出错误的转换建议是唯一不可接受的失败。 ## 开发 ``` npm install npm test # 45 unit tests against captured HTML fixtures npm run typecheck npm run build # -> dist/, load unpacked via chrome://extensions node scripts/live-smoke.mjs # optional: E2E against the live endpoint (not in CI) ``` ## 结果判定 | 判定 | 含义 | |---|---| | ✅ `DIRECT` | 真实的普渡课程学分(例如 MATH 211 → MA 16500) | | 🟡 `ELECTIVE` | 未分配/选修学分(例如 CS 2XUND) | | 🟡 `PARTIAL` | 两者的混合(例如 CHEM 105 → CHM 11510 + 11520 + 1XTRA) | | ❌ `NONE` | 档案中无对接记录 —— 请通过 transfercredit@purdue.edu 申请评估 | | ❓ `UNKNOWN` | 普渡大学的页面已更改或响应无法读取 —— 我们会为您提供原始链接,而不是盲目猜测 | ## 良好公民策略 缓存优先(30天 TTL),令牌桶限流(1 请求/秒),单次重试,不进行批量抓取, 不收集任何个人数据,在每个结果显示状态都有醒目的“非官方”免责声明。
标签:Manifest V3, TypeScript, Web Scraping, 云资产清单, 安全插件, 教育工具, 浏览器扩展, 自动化攻击, 逆向工程