- 零依赖 — 仅使用 Go 标准库
- 全量接口 — 覆盖 ClassIn 平台 70+ 个开放 API
- 自动签名 — 内部自动处理 v1/v2 签名,无需手动计算
- 文件上传 — 支持头像、课程封面、云盘文件上传(最大 500 MB)
go get github.com/Qingche99/eeo-gopackage main
import (
"fmt"
"github.com/Qingche99/eeo-go/eeo"
)
func main() {
// 使用机构 UID 和密钥初始化客户端
client := eeo.NewClient(123456, "your_school_secret")
// 注册用户(手机号或邮箱,自动识别)
result, err := client.Register("13800138000", "password123", nil, nil, nil)
if err != nil {
panic(err)
}
fmt.Println(result)
}Note
方法中的 extra map[string]interface{} 用于传递选填字段,不需要时传 nil;
指针类型参数(如 *string、*int64)传 nil 表示不传该字段。
client.Register(account, password string, nickname, addToSchoolMember *int, filePath *string)
client.RegisterMultiple(userJson []map[string]interface{})
client.ModifyPassword(uid int64, oldMd5pass string, password, md5pass *string)
client.AddTeacher(teacherAccount, teacherName string, filePath *string)
client.EditTeacher(teacherUID int64, teacherName string, filePath *string)
client.StopUsingTeacher(teacherUID int64)
client.RestartUsingTeacher(teacherUID int64)
client.AddSchoolStudent(studentAccount, studentName string)
client.EditSchoolStudent(studentUID int64, studentName string)
client.ModifyCourseStudentNickName(studentUIDs []int64) // v2
client.UpdateClassStudentComment(classID int64, commentJson []map[string]interface{})client.AddCourse(courseName string, filePath *string, extra map[string]interface{})
client.EditCourse(courseID int64, filePath *string, extra map[string]interface{})
client.EndCourse(courseID int64)
client.ModifyCourseTeacher(courseID, teacherUID int64)
client.RemoveCourseTeacher(courseID, teacherUID int64)
client.AddCourseTeacher(courseID int64, teacherUIDs []int64) // v2,支持批量
client.AddCourseGroup(courseID int64, groupName string, groupList []map[string]interface{})
client.EditCourseGroup(courseID, groupID int64, groupName string, groupList []map[string]interface{})
client.DelCourseGroup(courseID, groupID int64)
client.AddCourseLabels(courseList []map[string]interface{})// 创建课节
client.AddCourseClass(courseID int64, className string, teacherUID, beginTime, endTime int64, extra map[string]interface{})
client.AddCourseClassMultiple(courseID int64, classJson []map[string]interface{}) // 最多 50 个
// 编辑 / 删除
client.EditCourseClass(courseID, classID int64, extra map[string]interface{})
client.DelCourseClass(courseID, classID int64)
// 学生(课程级别)
client.AddCourseStudent(courseID, studentUID int64, identity int, studentName *string)
client.AddCourseStudentMultiple(courseID int64, userList []map[string]interface{}, identity int)
client.DelCourseStudent(courseID, studentUID int64, identity int)
client.DelCourseStudentMultiple(courseID int64, userList []int64, identity int)
// 学生(课节级别)
client.AddClassStudentMultiple(courseID, classID int64, studentJson []map[string]interface{}, identity int)
client.DelClassStudentMultiple(courseID, classID int64, studentUIDs []int64, identity int)
client.AddCourseClassStudent(courseID, studentUID int64, classJson []int64)
// 直播 / 录播 / 视频
client.SetClassVideoMultiple(courseID int64, classJson []map[string]interface{})
client.DeleteClassVideo(classID int64, fileID *int64)
client.GetWebcastUrl(courseID int64, classID *int64)
client.UpdateClassLockStatus(classID int64, isLock int)
// 其他
client.ModifyClassSeatNum(courseID, classID int64, seatNum *int, extra map[string]interface{})
client.GetLoginLinked(uid, courseID, classID int64, extra map[string]interface{})
client.ModifyGroupMemberNickname(courseID int64)
// 课节标签
client.AddSchoolLabel(labelName string)
client.UpdateSchoolLabel(labelID int64, labelName string)
client.DeleteSchoolLabel(labelID int64)
client.AddClassLabels(courseID int64, classList []map[string]interface{})// 单元
client.CreateUnit(courseID int64, unitName string, publishFlag int, extra map[string]interface{})
client.UpdateUnit(courseID, unitID int64, extra map[string]interface{})
client.DeleteUnit(courseID, unitID int64)
client.MoveUnit(courseID, unitID, toUnitID int64)
// 活动(作业、测验、录播、资料、讨论等)
client.CreateActivityNoClass(courseID, unitID int64, activityType int, name string, teacherUID int64, extra map[string]interface{})
client.ReleaseActivity(courseID int64, activityIDs []int64)
client.DeleteActivity(courseID, activityID int64)
client.AddActivityStudent(courseID, activityID int64, studentUIDs []int64)
client.DeleteActivityStudent(courseID, activityID int64, studentUIDs []int64)
// LMS 课堂
client.CreateLmsLesson(courseID int64, lessonName string, teacherUID, startTime, endTime int64, extra map[string]interface{})
client.UpdateLmsLesson(courseID, activityID int64, extra map[string]interface{})// 一个主课节最多绑定 100 个子课节
client.AddDoubleTeacherLesson(mainCourseID, mainClassID int64, subClassJson []map[string]interface{})
client.EditDoubleTeacherLesson(courseID, classID int64, extra map[string]interface{})
client.DelDoubleTeacherLesson(courseID, classID int64)// 文件夹
client.GetFolderList()
client.GetCloudList(folderID *int64)
client.GetTopFolderID()
client.CreateFolder(folderID int64, folderName string)
client.RenameFolder(folderID int64, folderName string)
client.DelFolder(folderID int64)
// 文件(最大 500 MB)
client.UploadFile(folderID int64, filePath string)
client.RenameFile(fileID int64, fileName string)
client.DelFile(fileID int64)// extra 可选:allowViewReplay、allowNewStudentViewReplay
client.ModifySchoolConf(extra map[string]interface{}) // v2SDK 内部自动处理签名,无需手动介入。
| 类型 | 适用场景 | 实现方式 |
|---|---|---|
| v1 | 用户、课程、课节、云盘接口 | POST form,含 SID、timeStamp、safeKey(MD5(secret+timestamp)) |
| v2 | LMS 接口及部分特殊路径 | JSON body + 请求头 X-EEO-SIGN / X-EEO-UID / X-EEO-TS |
使用 v2 签名的非 LMS 路径:/course/addCourseTeacher、/schooluser/modifyCourseStudentNickName、/school/modifySchoolConf
eeo-go/
├── go.mod
└── eeo/
├── client.go # Client struct + HTTP 请求封装
├── urls.go # 所有 API 端点定义
├── utils.go # 签名工具、请求辅助函数
├── api_user.go # 用户管理接口
├── api_course.go # 课程管理接口
├── api_class.go # 课节 / 学生 / 标签接口
├── api_lms.go # LMS + 在线双师 + 机构设置
└── api_cloud.go # 云盘接口
本项目为 Python SDK eeo 的 Go 语言等价实现,接口行为与参数语义保持一致。
如有问题请联系官方支持:eeoapisupport@eeoa.com | 官方 API 文档