# Education APIs

本组API是教务领域相关接口。

# 基本概念

# 时间

两个概念:校历、课节 尚不提供

# 地点

三个概念:校区、大楼、教室 需和资产、房产、网络的数据统一提供,尚不提供

# 人物

三个概念:教师、学生、院系 参见Profile APIs

# 对象

两个概念:学科、专业、课程

# 事件

教学过程中的活动(或事件),基于时间地点任务对象中的基础实体,产生的一些业务实体

  • 入学、注册、升级、异动、毕业
    影响概念:学籍、培养方案、培养计划、行政班
  • 计划、排课
    影响概念:教学计划、教学班
  • 选课
    影响概念: 课表(三个视角:教师课表、学生课表、教室课表) 几乎和1-4中所有概念相关
  • 排考
    影响概念:考场
  • 考试
    影响概念:成绩

# 获取教学班信息

# 功能介绍

根据参数中指定的教学班编码或bsid获取教学班信息,包括课程信息和排课情况。使用授权码(Authorization Code)方式获取scope为lessons的令牌即可访问。

# 请求参数

  • 路径参数 code教学班编码, bsid两者选择其一

# 响应参数

所有API的响应参数都具有相同的通用结构,本文档只描述通用结构中entities数组返回的数据对象。

  • Lesson 课程信息 Structure
{
    "id":{guid},                   // 暂未提供,无意义id
    "name":{string},               // 教学班名称
    "uri":{string},                // 暂无,待议
    "kind":"sjtu.lesson",          // 固定值
    "bsid":{string},               // 即:bsid
    "code":{string},               // 教学班编码
    "course": {
        "id":{guid},               // 无提供
        "code":{string},           // 课程代码
        "name":{string},           // 课程名
        "kind":"sjtu.course",      // 固定值
    }
    "teachers":[{canvas.profile}], // 只给出姓名即可(工号如需要使用code)
    "organize":{
        "id":{guid},
        "code":{string},           // 院系代码
        "name":{string},           // 院系名称
        "kind":"sjtu.organize"
    }
    "hours": {integer},		       // 学时
    "credits":{double},		       // 学分
    "classes":[{                   // 上课安排,未排课的此数据未空
        "schedule": {
            "kind":"sjtu.schedule",
            "week":{int},          // 周次(0-17),如5表示第六周
            "day":{int},           // 星期(0-6),如0表示星期一
            "period":{string},     // 节次(0-17),如0表示第一节
            "last":{int},          // 持续课节,可能因考试、上课的不同而课节定义不同
            "start":{long},        // 具体开始时间的unix时间戳(校历数据不完整时可不提供)
            "finish":{long},       // 具体结束时间的unix时间戳(校历数据不完整时可不提供)
        }
        "classroom":{
            "name":{string},       // 上课地点,如东上院101
            "kind":"sjtu.room"     // 固定值
        }
    }]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
  • Profile 用户 Structure
    请参考Profile API中的用户信息响应参数

# 请求示例

GET /v1/lesson/377669 HTTP/1.1
Host: api.sjtu.edu.cn
1
2

# 响应示例

HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8

{
    "errno": 0,
    "error": "success",
    "total": 0,
    "entities": [
        {
            "name": "2016-2017-1-BI907-377669",
            "kind": "sjtu.lesson",
            "bsid": "377669",
            "code": "2016-2017-1-BI907-377669",
            "course": {
                "code": "BI907",
                "name": "基因与人",
                "kind": "sjtu.course"
            },
            "teachers": [{
                    "name": "李大伟",
                    "kind": "canvas.profile"
            }],
            "organize": {
                "id": "17000",
                "name": "药学院"
            },
            "hours": 32,
            "credits": 2,
            "classes": [
                {
                    "schedule": {
                        "kind": "sjtu.schedule",
                        "week": 14,
                        "day": 1,
                        "period": 7,
                        "start": 1591080900,
                        "finish": 1591083600
                    },
                    "classroom": {
                        "name": "东中院2-401",
                        "kind": "sjtu.room"
                    }
                }
                ...
            ]
        }
    ]
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

# 获取学生课表

# 功能介绍

获取令牌中指定用户的学期课程信息

# 请求参数

  • 路径参数 term 用于指定学期,选填,不指定学期就查询当前学期(学期号格式例如2012-2013-1)

# 响应参数

所有API的响应参数都具有相同的通用结构,本文档只描述通用结构中entities数组返回的数据对象。

同以上课程信息数据结构

# 请求示例

GET /v1/me/lessons HTTP/1.1
Host: api.sjtu.edu.cn
1
2

# 获取学生考试信息

注意

此API尚未实现

# 功能介绍

获取学生考试信息,此API需考试或者成绩scope两者至少一个,如果只有成绩scope无考试scope时,则classroom和schedule信息不给出

# 请求参数

  • 路径参数 term 可选,可指定学期号(格式:2012-2013-1),不指定则查询当前学期

# 响应参数

所有API的响应参数都具有相同的通用结构,本文档只描述通用结构中entities数组返回的数据对象。

  • Examination 考试信息 structure
{
	"kind":"sjtu.examination",		
    "id":{guid},					// GUID,暂未使用
	"name":{string},				// 考试名称,即课程名称?
	"lesson":{sjtu.lesson},			// 对应的lesson
	"classroom":{sjtu.room},		// 位置信息 ,是否给出受scope影响
	"schedule":{sjtu.schedule},		// 时间信息
	"score":{string}				// 成绩信息,可能未空,原因有二:1.未出成绩 2.scope没有权限
}
1
2
3
4
5
6
7
8
9
  • Room 位置信息 structure
{
    "kind":"sjtu.room",     
    "name":{string},       // 上课地点,如东上院101
}   
1
2
3
4
  • Schedule 事件信息
{
    "kind":"sjtu.schedule",
    "week":{int},          // 周次(0-17),如5表示第六周
    "day":{int},           // 星期(0-6),如0表示星期一
    "period":{string},     // 节次(0-17),如0表示第一节
    "last":{int},          // 持续课节,可能因考试、上课的不同而课节定义不同
    "start":{long},        // 具体开始时间的unix时间戳(校历数据不完整时可不提供)
    "finish":{long},       // 具体结束时间的unix时间戳(校历数据不完整时可不提供)
}
1
2
3
4
5
6
7
8
9

# 获取学生绩点信息

注意

此API尚未实现

# 功能介绍

获取学生绩点信息

# 请求参数

除了access_token外无其他参数

# 响应参数

所有API的响应参数都具有相同的通用结构,本文档只描述通用结构中entities数组返回的数据对象。

  • GPA 绩点信息 structure
{     
     "user":{canvas.profile},        // 只含id,name,code
     "gpa":{double},                 // 平均绩点
     "credits":{double},             // 对应gpa总学分
     "timestamp":{long},             // 计算时间,时间戳格式返回
     "year":{string},                // 学年
     "semester":{string},            // 学期
 }
1
2
3
4
5
6
7
8