Files
ClassFeedback/OJ作业数据API使用说明.md
chengzi 3b75170862 feat: 添加第12课课评、班级总结及学生画像更新
- K4周日1900班第12课《花朵随心画》课评(梁境城、钟嘉逸、王睿意补课)
- AICODE03/CSP03各班级第12课课评及班级总结
- 更新多班级学生画像
- 课评生成技能优化
2026-05-24 20:48:34 +08:00

4.5 KiB
Raw Permalink Blame History

OJ 数据 API 使用说明

本文档面向所有老师,介绍如何通过 Claude Code 快速获取学生的 OJ 做题数据(含源代码和错误详情)。

一句话总结

在 Claude Code 对话中输入 "获取 CSP05-02 的OJ数据",系统自动调 API 拉取、分析、保存结果。


前提条件

  1. 项目根目录有 .env 文件,包含 OJ 登录凭据:
OJ_BASE_URL=https://oj.qonnwolf.com
OJ_USERNAME=你的用户名
OJ_PASSWORD=你的密码
  1. OJ 插件 HydroOJ-Course-Keli365 已部署(目前已在 oj.qonnwolf.com 上运行)

使用方式

方式1直接对话推荐

在 Claude Code 中输入:

获取 CSP05-02 的OJ数据

系统自动完成:登录 OJ → 找到课程 → 找到课次 → 拉取全部学生数据 → 保存分析结果。

方式2指定班级筛选

获取 CSP05-02 的OJ数据只看 CSP05克力周六1600 班的

方式3不指定课次列出所有可选课次

获取 CSP05 的OJ数据

系统会先展示 CSP05 下所有课次列表,你选择要分析哪一个。


能获取到什么数据

每个学生每道题API 返回:

数据 说明 举例
完成状态 AC=通过WA=答案错误RE=运行错误等 AC
分数 0-100 分 100
提交次数 该学生这道题总共提交了几次 3
源代码 学生提交的完整代码 #include <bits/stdc++.h>...
编译错误 代码编译失败时的错误信息 expected ';' after expression
测试点详情 每个测试点的通过/失败情况 测试点1: AC, 测试点2: WA
提交历史 每次提交的变化轨迹 第1次WA→第2次WA→第3次AC

作业包分类

数据按三个作业包分别统计:

作业包 含义 常见题量
课堂练习 课上完成的题 3-5 题
课后作业 课后做的题 2-3 题
拓展练习 选做的挑战题 5-7 题

数据保存在哪里

.claude/memory/oj/analysis/
├── CSP05-02_student_analysis.json    ← 原始数据API 返回的完整 JSON
└── CSP05-02_analysis.md              ← AI 分析报告(可选)

重要:数据保存后,后续生成课评时会自动读取,不需要重复获取。


手动调 API给开发者参考

如果不用 Claude Code也可以直接用 Python 调 API

import httpx
from pathlib import Path

# 1. 读取凭据
env = {}
for line in Path('.env').read_text().split('\n'):
    if '=' in line and not line.startswith('#'):
        k, v = line.split('=', 1)
        env[k] = v

# 2. 登录
client = httpx.Client(base_url=env['OJ_BASE_URL'], follow_redirects=True)
client.post('/login', json={"uname": env['OJ_USERNAME'], "password": env['OJ_PASSWORD']})

# 3. 获取课程列表
r = client.get('/course/api/list')
print(r.json())

# 4. 获取课程详情(替换 {cid} 为实际课程 ID
r = client.get(f'/course/api/detail/{cid}')
print(r.json())

# 5. 获取章节分析(替换 {cid} 和 {csid}
r = client.get(f'/course/api/analysis/{cid}/{csid}?withHistory=true')
print(r.json())

三个 API 端点

端点 用途 说明
GET /course/api/list 课程列表 返回所有课程的标题、ID、人数
GET /course/api/detail/{课程ID} 课程详情 返回所有课次的标题和 ID
GET /course/api/analysis/{课程ID}/{课次ID} 学生分析 返回每个学生每道题的完整数据

可选参数

参数 默认值 说明
withCode true 设为 false 跳过源代码,只返回状态(速度快)
withHistory false 设为 true 获取全部提交历史(含每次提交的代码和错误)

常见问题

Q课程代码怎么填 A就是 OJ 上的课程编号,比如 CSP05-02、CSP06-05。跟大纲编号可能不一样以 OJ 实际的为准。

Q提示"未找到课程"怎么办? A可能是阶段名不匹配。试试只说"获取 OJ 数据",系统会列出所有可用课程让你选。

Q数据太多等很久怎么办 A如果班级学生多15人以上获取源代码会比较慢。可以加 withCode=false 只获取状态,速度快很多。

Q数据多久更新一次 A每次调用 API 都是实时获取最新数据。但课评生成时会优先使用已保存的 JSON避免重复请求。需要刷新时重新获取即可。