7. 题目管理接口指南


7.1 概述

码学堂为商户提供8种题型(判断题、单选题、多选题、填空题、程序填空题、函数题、编程题及主观题)的接入服务,商户可以自己的系统中通过接口管理题目。

7.2 新增题目

7.2.1 请求参数说明

序号 参数 名称 是否必须提供 是否加入签名 描述
01 merchant_id 商户号
02 email 教师账号 机构下的教师码学堂账号
03 timestamp 时间戳 建议提供
04 ptype 题目类型 {1,2,3,4,5,6,7,8},分别对应判断题、单选题、多选题、填空题、程序填空题、函数题、编程题及主观题,参考
05 kp_ids 知识点IDs 对应“节”,多个知识点用英文”,”连接
06 difficulty 题目难度 {1,2,3,4,5}
07 score 题目分数 保留2位小数
08 tags 题目标签
09 upload_file_flag 答题时是否允许上传文件 主观题目时,1表示作答时允许上传文件,0表示作答时不允许上传文件
10 upload_image_flag 答题时是否允许上传图片 主观题目时,1表示作答时允许上传图片,0表示作答时不允许上传图片
11 time 运行时间 单位s,程序填空、函数、编程题时,必须提供,其他类型不用提供
12 memory 内存要求 单位M, 程序填空、函数、编程题时,必须提供,其他类型不用提供
13 language 编程语言 程序填空、函数题时,必须提供编程语言关键字,其他类型不用提供。关键字参考
14 sign 签名 SHA256签名,具体签名示例请移步http://help.maxuetang.cn/project-14/doc-60/
15 in 输入要求说明 程序填空题、函数题、程序题时,必须提供,其他类型不用提供
16 in_mk 输入要求说明markdown 程序填空题、函数题、程序题时,可选(推荐上传)
17 out 输出要求说明 程序填空题、函数题、程序题时,必须提供,其他类型不用提供
18 out_mk 输出要求说明markdown 程序填空题、函数题、程序题时,可选(推荐上传)
19 sample_in_out 输入输出样例 json数据格式,如[[“样例输入1”,”样例输出"],[“样例输入2”,”样例输出2”]]
20 tip 提示信息 程序填空题、函数题、程序题时有效
21 tip_mk 提示信息markdown 程序填空题、函数题、程序题时有效
22 src 题目来源 程序填空题、函数题、程序题时有效
23 test_data_in_out 测试数据集 程序填空题、函数题、程序题时必须提供,大小不超过1M,如果测试数据集较大时请使用“批量上传测试数据集”接口上传,格式:[[“输入”,”输出”,分数,”说明”],[“输入”,”输出”,分数,”说明”]],如:[[“3 4”,”7”,10.0,”data1”],[“10 20”,”30”,10.0,”data2”]]
24 desc 题面描述 可以为html格式
25 markdown 题面描述markdown 题面描述markdown格式,建议提供
26 source 题目资源/选项 当题目类型为判断、单选、多选、程序填空、函数题时必须传入(参考),当为主观题时(评分标准及答案)可选,其他类型时无效
27 source_mk 评分标准与答案的markdown 主观题目时,评分标准与答案的markdown
28 score_json 分数分布/得分点 主观题目时必须上传,其他题型不用上传

7.2.2 请求地址及方式

请求地址:https://mp.api.maxuetang.cn/problem-insert
请求方式:POST

7.2.3 返回JSON示例与参数说明

  1. {
  2. "success": true,
  3. "msg": "保存成功",
  4. "data": {
  5. "pid": "9220", //题目编号
  6. "ptype": "7", //题目类型
  7. "source": "{\"0\":1,\"1\":0}", //题目资源/选项
  8. "uid": "54****************7", //教师ID
  9. "score": "2", //分数
  10. "email": "xxxx@qq.com"
  11. }
  12. }

7.2.4 增加题目接入示例

  1. //hutool-all-4.6.7.jar
  2. //新增一个题目
  3. public static void addProblem() {
  4. String url = "https://mp.api.maxuetang.cn/problem-insert";
  5. Map params = new TreeMap();
  6. params.put("merchant_id", "商户ID");
  7. params.put("email", "xxxx@qq.com");//机构下的码学堂教师账号
  8. params.put("timestamp", System.currentTimeMillis());
  9. params.put("ptype", 7);//题目类型,必须
  10. params.put("kp_ids", "2502,2503");//知识点ID,对应“节”,多个知识点用英文","分割,必须
  11. params.put("difficulty", 1);//题目难度,{1,2,3,4,5},可选
  12. params.put("score", 2.0);//题目分数,必须
  13. params.put("tags", "C语言,Java");//标签,可选
  14. params.put("upload_file_flag", 1);//主观题目时,1表示作答时允许上传文件,0表示作答时不允许上传文件,可选
  15. params.put("upload_image_flag", 1);//主观题目时,1表示作答时允许上传图片,0表示作答时不允许上传图片,可选
  16. params.put("time", 1);//时间要求,单位s,程序填空、函数、编程题时,必须
  17. params.put("memory", 32);//内存要求,单位M, 程序填空、函数、编程题时,必须
  18. params.put("sign", SignHelper.sign(params, "商户密钥"));//签名
  19. //以下内容不参与签名
  20. params.put("in", "输入要求说明html");//输入要求说明,程序填空题、函数题、程序题时,必须
  21. params.put("in_mk", "输入要求说明markdown");//输入要求说明,程序填空题、函数题、程序题时,可选(推荐上传)
  22. params.put("out", "输出要求说明");//输出要求说明,程序填空题、函数题、程序题时,必须
  23. params.put("out_mk", "输出要求说明markdown");//输入要求说明,程序填空题、函数题、程序题时,可选(推荐上传)
  24. params.put("sample_in_out", "[[\"样例输入1\",\"样例输出1\"],[\"样例输入2\",\"样例输出2\"]]");//附加的多个程序样例输入与输出,程序填空题、函数题、程序题时,可选
  25. params.put("tip", "提示html");//提示,程序填空题、函数题、程序题时,可选
  26. params.put("tip_mk", "提示markdown");//提示markdown,程序填空题、函数题、程序题时,可选
  27. params.put("src", "题目来源");//题目来源,程序填空题、函数题、程序题时,可选
  28. params.put("test_data_in_out", "[[\"3 4\",\"7\",10.0,\"data1\"],[\"10 20\",\"30\",10.0,\"data2\"]]");//测试输入输出,程序填空题、函数题、程序题时,必须
  29. params.put("desc", "这里是题面描述html-1");//题面描述,可以为html格式,必须
  30. params.put("markdown", "这里是题面描述markdown");//题面描述,markdown格式,可选,不传入时,不能在码学堂中修改题目
  31. params.put("source", "{\"0\":1,\"1\":0}");//题目资源/选项,当题目类型为判断、单选、多选、程序填空、函数题时必须传入,当为主观题时(评分标准及答案)可选,其他类型时无效
  32. params.put("source_mk", "$x_y$");//主观题目时,评分标准与答案的markdown,可选
  33. params.put("score_json", "{\"0\":\"10\",\"1\":\"10\"}");//主观题目时必须上传
  34. String result = HttpUtil.post(url, params);
  35. System.out.println("执行结果:"+result);
  36. }

7.3 修改题目

7.3.1 请求参数说明

序号 参数 名称 是否必须提供 是否加入签名 描述
01 merchant_id 商户号
02 email 教师账号 机构下的教师码学堂账号
03 timestamp 时间戳 建议提供
04 ptype 题目类型 {1,2,3,4,5,6,7,8},分别对应判断题、单选题、多选题、填空题、程序填空题、函数题、编程题及主观题
05 pid 题目ID 码学堂题目编号
06 kp_ids 知识点IDs 对应“节”,多个知识点用英文”,”连接
07 difficulty 题目难度 {1,2,3,4,5}
08 score 题目分数 保留2位小数
09 tags 题目标签
10 upload_file_flag 答题时是否允许上传文件 主观题目时,1表示作答时允许上传文件,0表示作答时不允许上传文件
11 upload_image_flag 答题时是否允许上传图片 主观题目时,1表示作答时允许上传图片,0表示作答时不允许上传图片
12 time 运行时间 单位s,程序填空、函数、编程题时,必须提供,其他类型不用提供
13 memory 内存要求 位M, 程序填空、函数、编程题时,必须提供,其他类型不用提供
14 language 编程语言 程序填空、函数题时,必须提供编程语言关键字,其他类型不用提供。关键字参考
15 sign 签名 SHA256签名,具体签名示例请移步http://help.maxuetang.cn/project-14/doc-60/
16 in 输入要求说明 程序填空题、函数题、程序题时,必须提供,其他类型不用提供
17 in_mk 输入要求说明markdown 程序填空题、函数题、程序题时,可选(推荐上传)
18 out 输出要求说明 程序填空题、函数题、程序题时,必须提供,其他类型不用提供
19 out_mk 输出要求说明markdown 程序填空题、函数题、程序题时,可选(推荐上传)
20 sample_in_out 输入输出样例 json数据格式,如[[“样例输入1”,”样例输出"],[“样例输入2”,”样例输出2”]]
21 tip 提示信息 程序填空题、函数题、程序题时有效
22 tip_mk 提示信息markdown 程序填空题、函数题、程序题时有效
23 src 题目来源 程序填空题、函数题、程序题时有效
24 desc 题面描述 可以为html格式
25 markdown 题面描述markdown 题面描述markdown格式,建议提供
26 source 题目资源/选项 当题目类型为判断、单选、多选、程序填空、函数题时必须传入,当为主观题时(评分标准及答案)可选(参考),其他类型时无效
27 source_mk 评分标准与答案的markdown 主观题目时,评分标准与答案的markdown
28 score_json 分数分布/得分点 主观题目时必须上传,其他题型不用上传

7.3.2 请求地址及方式

请求地址:https://mp.api.maxuetang.cn/problem-update
请求方式:POST

7.3.3 返回JSON示例与参数说明

  1. {
  2. "success": true,
  3. "msg": "保存成功",
  4. "data": {
  5. "pid": "9220", //题目编号
  6. "ptype": "7", //题目类型
  7. "source": "{\"0\":1,\"1\":0}", //题目资源/选项
  8. "uid": "54****************7", //教师ID
  9. "score": "2", //分数
  10. "email": "xxxx@qq.com"
  11. }
  12. }

7.3.4 增加题目接入示例

  1. //hutool-all-4.6.7.jar
  2. public static void updateProblem() {
  3. String url = "https://mp.api.maxuetang.cn/problem-update";
  4. Map params = new TreeMap();
  5. params.put("merchant_id", "商户ID");
  6. params.put("email", "xxxx@qq.com");//机构下的码学堂教师账号
  7. params.put("timestamp", System.currentTimeMillis());
  8. params.put("ptype", 7);//题目类型,必须
  9. params.put("pid", 9219);//题目ID,必须
  10. params.put("kp_ids", "2502,2503");//知识点ID,对应“节”,多个知识点用英文","分割,可选
  11. params.put("difficulty", 1);//题目难度,{1,2,3,4,5},可选
  12. params.put("score", 2.0);//题目分数,可选
  13. params.put("tags", "C语言,Java");//标签,可选
  14. params.put("time", 1);//时间要求,单位s,程序填空、函数、编程题时,可选
  15. params.put("memory", 32);//内存要求,单位M, 程序填空、函数、编程题时,可选
  16. params.put("sign", SignHelper.sign(params, "商户密钥"));//签名
  17. //以下内容不参与签名
  18. params.put("in", "输入要求说明html");//输入要求说明,程序填空题、函数题、程序题时,可选
  19. params.put("in_mk", "输入要求说明markdown");//输入要求说明,程序填空题、函数题、程序题时,可选(推荐上传)
  20. params.put("out", "输出要求说明");//输出要求说明,程序填空题、函数题、程序题时,可选
  21. params.put("out_mk", "输出要求说明markdown");//输入要求说明,程序填空题、函数题、程序题时,可选(推荐上传)
  22. params.put("sample_in_out", "[[\"样例输入21\",\"样例输出21\"],[\"样例输入23\",\"样例输出23\"]]");//附加的多个程序样例输入与输出,程序填空题、函数题、程序题时,可选
  23. params.put("tip", "提示html");//提示,程序填空题、函数题、程序题时,可选
  24. params.put("tip_mk", "提示markdown");//提示markdown,程序填空题、函数题、程序题时,可选
  25. params.put("src", "题目来源");//题目来源,程序填空题、函数题、程序题时,可选
  26. params.put("desc", "这里是修改后的题面描述html");//题面描述,可以为html格式,必须
  27. params.put("markdown", "这里是修改后的题面描述markdown");//题面描述,markdown格式,可选,不传入时,不能在码学堂中修改题目
  28. params.put("source", "{\"0\":0,\"1\":1}");//题目资源/选项,当题目类型为判断、单选、多选、程序填空、函数题时传入,其他类型时无效
  29. params.put("score_json", "{\"0\":\"10\",\"1\":\"10\"}");//主观题目时上传
  30. String result = HttpUtil.post(url, params);
  31. System.out.println("执行结果:"+result);
  32. }

7.4 删除题目

7.4.1 请求参数说明

序号 参数 名称 是否必须提供 是否加入签名 描述
01 merchant_id 商户号
02 email 教师账号 机构下的教师码学堂账号
03 timestamp 时间戳 建议提供
04 ptype 题目类型 {1,2,3,4,5,6,7,8},分别对应判断题、单选题、多选题、填空题、程序填空题、函数题、编程题及主观题
05 pid 题目ID 码学堂题目编号
06 sign 签名 SHA256签名,具体签名示例请移步http://help.maxuetang.cn/project-14/doc-60/

7.4.2 请求地址及方式

请求地址:https://mp.api.maxuetang.cn/problem-delete
请求方式:POST

7.4.3 返回JSON示例与参数说明

  1. {
  2. "success": true,
  3. "msg": "保存成功"
  4. }

7.4.4 增加题目接入示例

  1. //hutool-all-4.6.7.jar
  2. //删除题目
  3. public static void deleteProblem() {
  4. String url = "https://mp.api.maxuetang.cn/problem-delete";
  5. Map params = new TreeMap();
  6. params.put("merchant_id", "商户ID");
  7. params.put("email", "xxxx@qq.com");//机构下的码学堂教师账号
  8. params.put("timestamp", System.currentTimeMillis());
  9. params.put("ptype", 7);//题目类型,必须
  10. params.put("pid", 9219);//题目ID,必须
  11. params.put("sign", SignHelper.sign(params, "商户密钥"));//签名
  12. String result = HttpUtil.post(url, params);
  13. System.out.println("执行结果:"+result);
  14. }

码学堂管理员 2023年6月6日 12:33 收藏文档