Skip to content

Yatori-go-core V3 总览 ​

Yatori-go-core 是 yatori 系列的 Go 核心库。V3 把多个在线学习平台的登录、课程、章节、学习、作业、考试和签到能力收敛到同一套公开接口,第三方项目只需要导入根包 yatori,就可以通过同一组方法操作不同平台。

V3 是仓库内部的重构版本,Go module 路径仍然是 github.com/yatori-dev/yatori-go-core,没有 /v3 后缀。

一句话理解 V3

一个入口 yatori.New(...),一个接口 yatori.Client,一套模型 Course / Node / Work / Exam;平台不支持的操作返回 yatori.ErrUnsupported。

V3 的核心变化 ​

变化V3 的做法
公开入口根包 yatori,例如 yatori.New(...)
平台差异统一 Client 接口 + Capabilities() 能力位
数据模型Course / Node / Work / Exam / Session 统一模型
错误处理ErrUnsupported、ErrNotLoggedIn、ErrInvalidArgument 等哨兵错误
旧实现api/*、aggregation/* 已下沉到 internal/,不再对外暴露
全局状态新 SDK 不依赖 global.Config、common.InitConfig 或 utils.YatoriCoreInit
动态调用client.Call(ctx, action, params) 支持配置驱动
多平台15 个平台适配器全部注册在根包中

架构 ​

text
github.com/yatori-dev/yatori-go-core
├─ yatori.go / types.go / errors.go      # 唯一公开入口(package yatori)
├─ core/                                 # 接口、模型、错误、能力位、动态分发
│  ├─ client.go                          # Client 接口
│  ├─ model.go / request.go              # Course、Node、Work、Exam、StudyRequest...
│  ├─ capability.go                      # Capability 能力位
│  ├─ errors.go                          # ErrUnsupported 等
│  ├─ dispatch.go                        # Call 动态分发
│  └─ registry.go                        # 平台注册表
├─ internal/driver/                      # 各平台适配器(外部不可导入)
│  ├─ xuexitong/ yinghua/ icve/ ...
│  └─ driverutil/                        # 适配器共享工具
├─ internal/api/                         # 底层协议实现(原 api/)
├─ internal/aggregation/                 # 平台业务动作(原 aggregation/)
├─ que-core/                             # AI 题库与标准题目模型
├─ utils/ models/ config/ global/        # 兼容保留
├─ cmd/hello/                            # 原根目录 main.go
└─ examples/                             # 示例与回归测试

调用链:

text
你的代码
  └─ yatori.New / yatori.Client
       └─ core 统一模型与接口
            └─ internal/driver/<平台> 适配器
                 └─ internal/aggregation + internal/api 旧实现

最小示例 ​

go
package main

import (
	"context"
	"fmt"

	"github.com/yatori-dev/yatori-go-core"
)

func main() {
	client, err := yatori.New(yatori.Config{
		Platform: yatori.XueXiTong,
		Account: yatori.Account{
			Username: "ACCOUNT",
			Password: "PASSWORD",
		},
	})
	if err != nil {
		panic(err)
	}
	defer client.Close()

	ctx := context.Background()
	if err := client.Login(ctx); err != nil {
		panic(err)
	}

	courses, err := client.Courses(ctx)
	if err != nil {
		panic(err)
	}
	for _, course := range courses {
		fmt.Println(course.ID, course.Name, course.Progress)
	}
}

文档导航 ​

文档内容
快速开始安装、环境、第一个可运行程序、Options 配置
Client APIClient 每个方法的签名、参数、返回值和示例
数据模型Course、Node、Work、Exam、Session 等字段说明
能力与错误Capabilities()、ErrUnsupported、平台能力矩阵
会话与持久化Cookie/Token、会话保存与恢复、重登
AI 与题库AIConfig、QuestionBankConfig、AnswerSource
平台说明15 个平台的账号参数、能力和注意事项
动态调用Call(action, params) 的 Action 与参数表
完整示例登录 → 课程 → 章节 → 学习 → 作业 → 考试
V2 迁移 V3旧 api/aggregation 代码如何迁移
常见问题登录、验证码、代理、AI、资源目录、并发等

开发手册 ​

如果你是 core 的贡献者,或者想新增/维护平台适配器,请阅读开发手册:

支持平台 ​

平台常量平台主要能力
yatori.XueXiTong超星学习通登录、Cookie、课程、章节、学习、作业、考试
yatori.YingHua英华学堂登录、课程、节点、学习、作业、考试
yatori.ICVE智慧职教 / 职教云登录、Cookie、课程、节点、学习
yatori.CQIE重庆工程学院登录、Token、课程、视频、学习
yatori.ENAAE中国教育干部网络学院登录、Cookie、项目/课程、视频、学习、考试列表
yatori.WeLearnWeLearn 随行课堂登录、Cookie、课程、章节、学习
yatori.QSXT青书学堂登录、Token、课程、节点、学习、作业
yatori.TTCDWTTCDW登录、Cookie、项目/课堂/课程、视频、学习
yatori.Ketangx课堂行登录、课程、节点、学习
yatori.HaiQiKeJi海旗科技(ZXCPKS)登录、课程、节点、学习、作业、考试
yatori.WeiBan安全微伴登录
yatori.CELACELA登录
yatori.MOOC中国大学 MOOC登录
yatori.ZhiHuiShu智慧树扫码登录
yatori.GongXue工学云签到

平台能力并不完全相同

统一接口不代表每个平台都支持所有方法。调用前请先看 能力与错误,或使用 yatori.Supports(client, yatori.CapWorks) 判断。

下一步 ​

Released under the MIT License.