# encoding: utf-8
from __future__ import absolute_import, unicode_literals
import json
import datetime
from optionaldict import optionaldict
from .base import BaseAPI
[文档]class ClassRoom(BaseAPI):
"""
教室内相关接口
https://docs.eeo.cn/api/zh-hans/classroom/
"""
[文档] def add_course(
self,
course_name,
folder_id=None,
file_data=None,
expiry_time=None,
main_teacher_uid=None,
course_introduce=None,
classroom_setting_id=None,
course_unique_identity=None,
allow_add_friend=True,
):
"""
创建课程
https://docs.eeo.cn/api/zh-hans/classroom/addCourse.html
:param course_name: 课程名称
:param folder_id: 可用资源文件夹 ID
:param file_data: 上传的课程封面图片
:param expiry_time: 过期时间
:param main_teacher_uid: 班主任 UID
:param course_introduce: 课程简介
:param classroom_setting_id: 教室设置 ID
:param course_unique_identity: 唯一标识
:param allow_add_friend: 是否允许班级成员在群里互相添加好友
"""
if isinstance(expiry_time, datetime.datetime):
expiry_time = int(expiry_time.timestamp())
return self._post(
params={'action': 'addCourse'},
data=optionaldict({
'courseName': course_name,
'folderId': folder_id,
'expiryTime': expiry_time,
'mainTeacherUid': main_teacher_uid,
'courseIntroduce': course_introduce,
'classroomSettingId': classroom_setting_id,
'courseUniqueIdentity': course_unique_identity,
'allowAddFriend': 1 if allow_add_friend else 0,
}),
files=optionaldict({
'Filedata': file_data,
})
)
[文档] def edit_course(
self,
course_id,
folder_id=None,
course_name=None,
expiry_time=None,
main_teacher_uid=None,
stamp=True,
file_data=None,
course_introduce=None,
classroom_setting_id=None,
allow_add_friend=True,
):
"""
编辑课程
https://docs.eeo.cn/api/zh-hans/classroom/editCourse.html
:param course_id: 课程 ID
:param folder_id: 可用资源文件夹 ID
:param course_name: 课程名称
:param expiry_time: 过期时间
:param main_teacher_uid: 班主任 UID
:param stamp: 原班主任是否加入教师列表
:param file_data: 上传的课程封面图片
:param course_introduce: 课程简介
:param classroom_setting_id: 教室设置 ID
:param allow_add_friend: 是否允许班级成员在群里互相添加好友
"""
if allow_add_friend is not None:
allow_add_friend = 1 if allow_add_friend else 0
return self._post(
params={'action': 'editCourse'},
data=optionaldict({
'courseId': course_id,
'courseName': course_name,
'folderId': folder_id,
'expiryTime': expiry_time,
'mainTeacherUid': main_teacher_uid,
'stamp': 1 if stamp else 0,
'courseIntroduce': course_introduce,
'classroomSettingId': classroom_setting_id,
'allowAddFriend': allow_add_friend,
}),
files=optionaldict({
'Filedata': file_data,
})
)
[文档] def end_course(
self,
course_id,
):
"""
结束课程
https://docs.eeo.cn/api/zh-hans/classroom/endCourse.html
:param course_id: 课程 ID
"""
return self._post(
params={'action': 'endCourse'},
data=optionaldict({
'courseId': course_id,
}),
)
[文档] def get_live_partner_url(
self,
account,
nick_name,
live_url,
partner_url='https://www.eeo.cn/live_partner.php',
):
"""
课节直播播放器地址免二次登陆地址
https://docs.eeo.cn/api/zh-hans/classroom/addCourseClass.html
:param account: 账户
:param nick_name: 昵称
:param live_url: 接口获取到的url
:param partner_url: url前缀
"""
return self._client.get_partner_url(account, nick_name, live_url, 'lessonKey', partner_url)
[文档] def add_course_class(
self,
course_id,
class_name,
begin_time,
end_time,
teacher_uid,
folder_id=None,
seat_num=6,
record=False,
live=False,
replay=False,
assistant_uid=None,
is_auto_onstage=False,
is_hd=0,
course_unique_identity=None,
class_introduce=None,
watch_by_login=False,
allow_unlogged_chat=True,
):
"""
创建课节(单个)
https://docs.eeo.cn/api/zh-hans/classroom/addCourseClass.html
:param course_id: 课程 ID
:param class_name: 课节名称
:param begin_time: 上课时间
:param end_time: 下课时间
:param teacher_uid: 教师 UID
:param folder_id: 云盘目录 ID
:param seat_num: 学生上台数
:param record: 是否开启录课
:param live: 是否开启直播
:param replay: 是否开启回放
:param assistant_uid: 助教 UID
:param is_auto_onstage: 学生进入教室时是否自动上台
:param is_hd: 是否高清 0=非高清,1=高清,2=全高清
:param course_unique_identity: 唯一标识
:param class_introduce: 课节简介
:param watch_by_login: 是否只有扽牢固
:param allow_unlogged_chat: 是否允许未登录用户参与直播聊天和点赞
"""
if isinstance(begin_time, datetime.datetime):
begin_time = int(begin_time.timestamp())
if isinstance(end_time, datetime.datetime):
end_time = int(end_time.timestamp())
return self._post(
params={'action': 'addCourseClass'},
data=optionaldict({
'courseId': course_id,
'className': class_name,
'beginTime': begin_time,
'endTime': end_time,
'teacherUid': teacher_uid,
'folderId': folder_id,
'seatNum': seat_num,
'record': 1 if record else 0,
'live': 1 if live else 0,
'replay': 1 if replay else 0,
'assistantUid': assistant_uid,
'isAutoOnstage': 1 if is_auto_onstage else 0,
'isHd': is_hd,
'courseUniqueIdentity': course_unique_identity,
'classIntroduce': class_introduce,
'watchByLogin': 1 if watch_by_login else 0,
'allowUnloggedChat': 1 if allow_unlogged_chat else 0,
}),
)
[文档] def add_course_class_multiple(
self,
course_id,
classes_info
):
"""
创建课节(多个)
https://docs.eeo.cn/api/zh-hans/classroom/addCourseClassMultiple.html
:param course_id: 课程 ID
:param classes_info: 课节信息数组
"""
assert isinstance(classes_info, (list, tuple))
return self._post(
params={'action': 'addCourseClassMultiple'},
data=optionaldict({
'courseId': course_id,
'classJson': json.dumps(classes_info),
}),
)
[文档] def edit_course_class(
self,
course_id,
class_id,
class_name=None,
begin_time=None,
end_time=None,
teacher_uid=None,
folder_id=None,
record=None,
live=None,
replay=None,
assistant_uid=None,
is_auto_onstage=None,
class_introduce=None,
watch_by_login=None,
allow_unlogged_chat=None,
):
"""
修改课节信息
https://docs.eeo.cn/api/zh-hans/classroom/editCourseClass.html
:param course_id: 课程 ID
:param class_id: 课节 ID
:param class_name: 课节名称
:param begin_time: 上课时间
:param end_time: 下课时间
:param teacher_uid: 教师 UID
:param folder_id: 云盘目录 ID
:param record: 是否开启录课
:param live: 是否开启直播
:param replay: 是否开启回放
:param assistant_uid: 助教 UID
:param is_auto_onstage: 学生进入教室时是否自动上台
:param class_introduce: 课节简介
:param watch_by_login: 是否只有扽牢固
:param allow_unlogged_chat: 是否允许未登录用户参与直播聊天和点赞
"""
def _to_bool(_value):
if isinstance(_value, bool):
return 1 if _value else 0
else:
return _value
if isinstance(begin_time, datetime.datetime):
begin_time = int(begin_time.timestamp())
if isinstance(end_time, datetime.datetime):
end_time = int(end_time.timestamp())
return self._post(
params={'action': 'editCourseClass'},
data=optionaldict({
'courseId': course_id,
'classId': class_id,
'className': class_name,
'beginTime': begin_time,
'endTime': end_time,
'teacherUid': teacher_uid,
'folderId': folder_id,
'record': _to_bool(record),
'live': _to_bool(live),
'replay': _to_bool(replay),
'assistantUid': assistant_uid,
'isAutoOnstage': _to_bool(is_auto_onstage),
'classIntroduce': class_introduce,
'watchByLogin': _to_bool(watch_by_login),
'allowUnloggedChat': _to_bool(allow_unlogged_chat),
}),
)
[文档] def modify_class_seat_num(
self,
course_id,
class_id,
seat_num,
is_hd=0
):
"""
修改课节上台学生数
https://docs.eeo.cn/api/zh-hans/classroom/modifyClassSeatNum.html
:param course_id: 课程 ID
:param class_id: 课节 ID
:param seat_num: 上台学生数
:param is_hd: 是否高清 0=非高清,1=高清,2=全高清
"""
return self._post(
params={'action': 'modifyClassSeatNum'},
data=optionaldict({
'courseId': course_id,
'classId': class_id,
'seatNum': seat_num,
'isHd': is_hd,
}),
)
[文档] def del_course_class(
self,
course_id,
class_id,
):
"""
删除课节
https://docs.eeo.cn/api/zh-hans/classroom/delCourseClass.html
:param course_id: 课程 ID
:param class_id: 课节 ID
"""
return self._post(
params={'action': 'delCourseClass'},
data=optionaldict({
'courseId': course_id,
'classId': class_id,
}),
)
[文档] def add_course_student(
self,
course_id,
identity,
student_uid,
student_name=None
):
"""
课程下添加学生/旁听(单个)
https://docs.eeo.cn/api/zh-hans/classroom/addCourseStudent.html
:param course_id: 课程 ID
:param identity: 学生身份(1 为学生,2 为旁听)
:param student_uid: 学生 UID
:param student_name: 机构后台旁听生的姓名
"""
return self._post(
params={'action': 'addCourseStudent'},
data=optionaldict({
'courseId': course_id,
'identity': identity,
'studentUid': student_uid,
'studentName': student_name,
}),
)
[文档] def del_course_student(
self,
course_id,
student_uid,
identity=1,
):
"""
课程下删除学生/旁听(单个)
https://docs.eeo.cn/api/zh-hans/classroom/delCourseStudent.html
:param course_id: 课程 ID
:param identity: 学生身份(1 为学生,2 为旁听)
:param student_uid: 学生 UID
"""
return self._post(
params={'action': 'delCourseStudent'},
data=optionaldict({
'courseId': course_id,
'identity': identity,
'studentUid': student_uid,
}),
)
[文档] def add_course_student_multiple(
self,
course_id,
students_info,
identity=1,
):
"""
课程下添加学生/旁听(多个)
https://docs.eeo.cn/api/zh-hans/classroom/addCourseStudentMultiple.html
:param course_id: 课程 ID
:param identity: 学生身份(1 为学生,2 为旁听)
:param students_info: 需要添加的帐号数组
"""
assert isinstance(students_info, (list, tuple))
return self._post(
params={'action': 'addCourseStudentMultiple'},
data=optionaldict({
'courseId': course_id,
'identity': identity,
'studentJson': json.dumps(students_info),
}),
)
[文档] def del_course_student_multiple(
self,
course_id,
student_uids,
identity=1,
):
"""
课程下删除学生/旁听(多个)
https://docs.eeo.cn/api/zh-hans/classroom/delCourseStudentMultiple.html
:param course_id: 课程 ID
:param identity: 学生身份(1 为学生,2 为旁听)
:param student_uids: 需要删除学生UID数组
"""
assert isinstance(student_uids, (list, tuple))
return self._post(
params={'action': 'delCourseStudentMultiple'},
data=optionaldict({
'courseId': course_id,
'identity': identity,
'studentUidJson': json.dumps(student_uids),
}),
)
[文档] def add_class_student_multiple(
self,
course_id,
class_id,
students_info,
identity=1,
):
"""
课节下添加学生(多个)
https://docs.eeo.cn/api/zh-hans/classroom/addClassStudentMultiple.html
:param course_id: 课程 ID
:param class_id: 课节 ID
:param students_info: 需要添加帐号数组
:param identity: 学生身份(1 为学生,2 为旁听)
"""
assert isinstance(students_info, (list, tuple))
return self._post(
params={'action': 'addClassStudentMultiple'},
data=optionaldict({
'courseId': course_id,
'classId': class_id,
'identity': identity,
'studentJson': json.dumps(students_info),
}),
)
[文档] def del_class_student_multiple(
self,
course_id,
class_id,
student_uids,
identity=1,
):
"""
课节下删除学生(多个)
https://docs.eeo.cn/api/zh-hans/classroom/delClassStudentMultiple.html
:param course_id: 课程 ID
:param class_id: 课节 ID
:param student_uids: 需要删除学生UID数组
:param identity: 学生身份(1 为学生,2 为旁听)
"""
assert isinstance(student_uids, (list, tuple))
return self._post(
params={'action': 'delClassStudentMultiple'},
data=optionaldict({
'courseId': course_id,
'classId': class_id,
'identity': identity,
'studentUidJson': json.dumps(student_uids),
}),
)
[文档] def modify_course_teacher(
self,
course_id,
teacher_uid
):
"""
更换课程老师
https://docs.eeo.cn/api/zh-hans/classroom/modifyCourseTeacher.html
:param course_id: 课程 ID
:param teacher_uid: 老师 UID
"""
return self._post(
params={'action': 'modifyCourseTeacher'},
data=optionaldict({
'courseId': course_id,
'teacherUid': teacher_uid,
}),
)
[文档] def remove_course_teacher(
self,
course_id,
teacher_uid
):
"""
移除课程老师
https://docs.eeo.cn/api/zh-hans/classroom/removeCourseTeacher.html
:param course_id: 课程 ID
:param teacher_uid: 老师 UID
"""
return self._post(
params={'action': 'removeCourseTeacher'},
data=optionaldict({
'courseId': course_id,
'teacherUid': teacher_uid,
}),
)
[文档] def add_course_class_student(
self,
course_id,
student_uid,
class_ids
):
"""
课程下多个课节添加学生
https://docs.eeo.cn/api/zh-hans/classroom/addCourseClassStudent.html
:param course_id: 课程 ID
:param student_uid: 学生 UID
:param class_ids: 课节 ID 数组
"""
assert isinstance(class_ids, (list, tuple))
return self._post(
params={'action': 'addCourseClassStudent'},
data=optionaldict({
'courseId': course_id,
'studentUid': student_uid,
'classJson': json.dumps(class_ids),
}),
)
[文档] def add_class_labels(
self,
course_id,
classes_info
):
"""
添加/修改/删除课节标签
https://docs.eeo.cn/api/zh-hans/classroom/addClassLabels.html
:param course_id: 课程 ID
:param classes_info: 课节数组
"""
assert isinstance(classes_info, (list, tuple))
return self._post(
params={'action': 'addClassLabels'},
data=optionaldict({
'courseId': course_id,
'classList': json.dumps(classes_info),
}),
)