关于datawhale接口的调研 #2

Open
opened 2026-07-24 00:12:51 +08:00 by ANGJustinl · 0 comments
Contributor
<html><head></head>

截至 2026-07-23,结论是:能拿到,而且数据比较完整。但只有“成员可视化 GraphQL”属于有公开文档的 API;Datawhale 官网和 AILC 使用的是前端内部接口,匿名可访问,但不应视为稳定的官方开放平台。

数据来源 | 可获得内容 | 匿名访问 | 浏览器跨域 | 稳定性判断 -- | -- | -- | -- | -- Datawhale 首页 | 轮播、推荐课程 | 可以 | WhaleTown 域名会被 403 | 内部 API 课程 | 列表、详情、章节树、内容 JSON | 可以 | 会被 403 | 内部 API 活动 | 列表、详情、时间、报名状态、关联课程 | 可以 | 会被 403 | 内部 API 资讯 | 列表、详情、正文 JSON | 可以 | 会被 403 | 内部 API AILC | 任务专题、任务树、积分、社区、参与人数、认证配置 | 可以 | 当前允许跨域 | 内部 API 成员可视化 | 成员、榜单、项目、贡献、组织统计 | 可以 | Access-Control-Allow-Origin: * | 有公开文档

Datawhale 官网

已验证以下接口返回 HTTP 200:

  • 首页轮播
  • 课程列表
  • 课程信息:GET /api/learn/v2/queryLearnInfo?learnId=212
  • 课程章节:GET /api/learn/v2/detail?learnId=212
  • 活动列表
  • 活动详情:GET /api/activity/v2/queryActivityDetail?activityId=569
  • 资讯列表
  • 资讯详情:GET /api/article/v2/query?id=743

课程章节和资讯详情还会返回 OSS 上的正文 JSON 地址,因此技术上可以在游戏内渲染完整内容。

限制是:从 WhaleTown Web 域名直接调用这些接口会返回 403 Invalid CORS request。Godot Web 不能直接请求,必须通过鲸落镇后端同步或代理。服务端无 Origin 请求可以正常访问。

AILC 学习中心

AILC 的接口域名是:

https://ailc-backend.datawhale.cn

已确认可匿名读取:

GET /tasks/frontend/tasks/task-groups?page=1&size=8&sort=latest
GET /tasks/frontend/tasks/task-group-item?groupId=100000977
GET /tasks/frontend/tasks/communities
GET /tasks/frontend/tasks/total-active-learners
GET /tasks/frontend/tasks/total-task-count
GET /tasks/frontend/tasks/total-points-issued
GET /tasks/frontend/tasks/task-group-cert-state?taskGroupId=...

能获得:

  • 专题、课程阶段和任务树
  • 学习任务类型和积分
  • 课程内容地址、测验 ID、表单配置
  • 参与人数和完成数量
  • 证书名称、证书模板、认证配置

但匿名用户的个人完成状态、证书签发状态都返回 false。也就是说:

  • 可以做“课程/任务展示”
  • 暂时不能可靠同步某个玩家的真实学习进度
  • 更不能直接认定其已完成任务并发放鲸币

个人进度融合需要 Datawhale 提供正式登录授权、账号绑定、签名回调或服务端 Token。

另外,AILC 响应中包含部分参与者头像地址。建议只同步人数等汇总数据,不存储或展示这些头像,除非经过隐私和授权确认。

成员可视化 GraphQL

这是目前最适合直接集成的来源,具有正式的 GraphQL API 文档

POST https://members-visualization.vercel.app/api/graphql
Content-Type: application/json

我实际验证了匿名查询:

{
  stats {
    totalMembers
  }
}

当前返回成员数 776。还支持:

  • members
  • stats
  • leaderboards
  • projects
  • organizations
  • commitStats

该接口允许任意域名跨域调用,数据来自静态 JSON,并由 GitHub Actions 定期更新。因此很适合鲸落镇荣誉榜、贡献者名片和开源项目展示。

对鲸落镇的建议

第一阶段可以直接接入:

  1. 课程、活动、资讯目录。
  2. AILC 专题和公开任务树。
  3. 成员榜单、项目贡献和组织统计。
  4. 点击后跳转 Datawhale 原站学习。

第二阶段再与 Datawhale 协商:

  1. WhaleTown 与 Datawhale 账号绑定或 SSO。
  2. 学习完成事件的签名回调。
  3. 证书和积分状态查询。
  4. 将可信完成事件映射为鲸币、任务书进度或游戏成就。

现有项目已经接入了课程列表,并采用后端同步模式:[course_resources.service.ts (line 10)](/home/server/whaletown/whale-town-end-v2/src/business/course_resources/course_resources.service.ts:10) 和 [CourseBoardPanel.gd (line 11)](/home/server/whaletown/whale-town-front-v2/scenes/ui/CourseBoardPanel.gd:11)。因此下一步最自然的是扩展成统一的 DatawhaleConnector,而不是让 Godot 分别直接访问这些站点。此次仅进行了调研,没有修改代码。

</html>截至 2026-07-23,结论是:能拿到,而且数据比较完整。但只有“成员可视化 GraphQL”属于有公开文档的 API;Datawhale 官网和 AILC 使用的是前端内部接口,匿名可访问,但不应视为稳定的官方开放平台。
数据来源 可获得内容 匿名访问 浏览器跨域 稳定性判断
Datawhale 首页 轮播、推荐课程 可以 WhaleTown 域名会被 403 内部 API
课程 列表、详情、章节树、内容 JSON 可以 会被 403 内部 API
活动 列表、详情、时间、报名状态、关联课程 可以 会被 403 内部 API
资讯 列表、详情、正文 JSON 可以 会被 403 内部 API
AILC 任务专题、任务树、积分、社区、参与人数、认证配置 可以 当前允许跨域 内部 API
成员可视化 成员、榜单、项目、贡献、组织统计 可以 Access-Control-Allow-Origin: * 有公开文档

Datawhale 官网

已验证以下接口返回 HTTP 200:

课程章节和资讯详情还会返回 OSS 上的正文 JSON 地址,因此技术上可以在游戏内渲染完整内容。

限制是:从 WhaleTown Web 域名直接调用这些接口会返回 403 Invalid CORS request。Godot Web 不能直接请求,必须通过鲸落镇后端同步或代理。服务端无 Origin 请求可以正常访问。

AILC 学习中心

AILC 的接口域名是:

https://ailc-backend.datawhale.cn

已确认可匿名读取:

GET /tasks/frontend/tasks/task-groups?page=1&size=8&sort=latest
GET /tasks/frontend/tasks/task-group-item?groupId=100000977
GET /tasks/frontend/tasks/communities
GET /tasks/frontend/tasks/total-active-learners
GET /tasks/frontend/tasks/total-task-count
GET /tasks/frontend/tasks/total-points-issued
GET /tasks/frontend/tasks/task-group-cert-state?taskGroupId=...

能获得:

  • 专题、课程阶段和任务树
  • 学习任务类型和积分
  • 课程内容地址、测验 ID、表单配置
  • 参与人数和完成数量
  • 证书名称、证书模板、认证配置

但匿名用户的个人完成状态、证书签发状态都返回 false。也就是说:

  • 可以做“课程/任务展示”
  • 暂时不能可靠同步某个玩家的真实学习进度
  • 更不能直接认定其已完成任务并发放鲸币

个人进度融合需要 Datawhale 提供正式登录授权、账号绑定、签名回调或服务端 Token。

另外,AILC 响应中包含部分参与者头像地址。建议只同步人数等汇总数据,不存储或展示这些头像,除非经过隐私和授权确认。

成员可视化 GraphQL

这是目前最适合直接集成的来源,具有正式的 [GraphQL API 文档](https://members-visualization.vercel.app/api/docs):

POST https://members-visualization.vercel.app/api/graphql
Content-Type: application/json

我实际验证了匿名查询:

{
  stats {
    totalMembers
  }
}

当前返回成员数 776。还支持:

  • members
  • stats
  • leaderboards
  • projects
  • organizations
  • commitStats

该接口允许任意域名跨域调用,数据来自静态 JSON,并由 GitHub Actions 定期更新。因此很适合鲸落镇荣誉榜、贡献者名片和开源项目展示。

<html><head></head><body><p>截至 2026-07-23,结论是:能拿到,而且数据比较完整。但只有“成员可视化 GraphQL”属于有公开文档的 API;Datawhale 官网和 AILC 使用的是前端内部接口,匿名可访问,但不应视为稳定的官方开放平台。</p><div><div> 数据来源 | 可获得内容 | 匿名访问 | 浏览器跨域 | 稳定性判断 -- | -- | -- | -- | -- Datawhale 首页 | 轮播、推荐课程 | 可以 | WhaleTown 域名会被 403 | 内部 API 课程 | 列表、详情、章节树、内容 JSON | 可以 | 会被 403 | 内部 API 活动 | 列表、详情、时间、报名状态、关联课程 | 可以 | 会被 403 | 内部 API 资讯 | 列表、详情、正文 JSON | 可以 | 会被 403 | 内部 API AILC | 任务专题、任务树、积分、社区、参与人数、认证配置 | 可以 | 当前允许跨域 | 内部 API 成员可视化 | 成员、榜单、项目、贡献、组织统计 | 可以 | Access-Control-Allow-Origin: * | 有公开文档 </div></div><h3>Datawhale 官网</h3><p>已验证以下接口返回 HTTP 200:</p><ul><li><a href="https://backend.datawhale.cn/api/carousel/queryList?category=HOME"><span><span>首页轮播</span></span></a></li><li><a href="https://backend.datawhale.cn/api/learn/v2/queryLearnPage?page=1&amp;size=12&amp;sort=listpagePrio,createTime,desc"><span><span>课程列表</span></span></a></li><li>课程信息:<code>GET /api/learn/v2/queryLearnInfo?learnId=212</code></li><li>课程章节:<code>GET /api/learn/v2/detail?learnId=212</code></li><li><a href="https://backend.datawhale.cn/api/activity/v2/queryActivityPage?page=1&amp;size=12&amp;sort=createTime,desc"><span><span>活动列表</span></span></a></li><li>活动详情:<code>GET /api/activity/v2/queryActivityDetail?activityId=569</code></li><li><a href="https://backend.datawhale.cn/api/article/v2/list?page=1&amp;size=10&amp;sort=stickyPrior,createTime,desc&amp;onShelve=true"><span><span>资讯列表</span></span></a></li><li>资讯详情:<code>GET /api/article/v2/query?id=743</code></li></ul><p>课程章节和资讯详情还会返回 OSS 上的正文 JSON 地址,因此技术上可以在游戏内渲染完整内容。</p><p>限制是:从 WhaleTown Web 域名直接调用这些接口会返回 <code>403 Invalid CORS request</code>。Godot Web 不能直接请求,必须通过鲸落镇后端同步或代理。服务端无 <code>Origin</code> 请求可以正常访问。</p><h3>AILC 学习中心</h3><p><a href="https://ailc.datawhale.cn/"><span><span>AILC</span></span></a> 的接口域名是:</p><pre><code>https://ailc-backend.datawhale.cn</code></pre><p>已确认可匿名读取:</p><pre><code>GET /tasks/frontend/tasks/task-groups?page=1&amp;size=8&amp;sort=latest GET /tasks/frontend/tasks/task-group-item?groupId=100000977 GET /tasks/frontend/tasks/communities GET /tasks/frontend/tasks/total-active-learners GET /tasks/frontend/tasks/total-task-count GET /tasks/frontend/tasks/total-points-issued GET /tasks/frontend/tasks/task-group-cert-state?taskGroupId=...</code></pre><p>能获得:</p><ul><li>专题、课程阶段和任务树</li><li>学习任务类型和积分</li><li>课程内容地址、测验 ID、表单配置</li><li>参与人数和完成数量</li><li>证书名称、证书模板、认证配置</li></ul><p>但匿名用户的个人完成状态、证书签发状态都返回 <code>false</code>。也就是说:</p><ul><li>可以做“课程/任务展示”</li><li>暂时不能可靠同步某个玩家的真实学习进度</li><li>更不能直接认定其已完成任务并发放鲸币</li></ul><p>个人进度融合需要 Datawhale 提供正式登录授权、账号绑定、签名回调或服务端 Token。</p><p>另外,AILC 响应中包含部分参与者头像地址。建议只同步人数等汇总数据,不存储或展示这些头像,除非经过隐私和授权确认。</p><h3>成员可视化 GraphQL</h3><p>这是目前最适合直接集成的来源,具有正式的 <a href="https://members-visualization.vercel.app/api/docs"><span><span>GraphQL API 文档</span></span></a>:</p><pre><code>POST https://members-visualization.vercel.app/api/graphql Content-Type: application/json</code></pre><p>我实际验证了匿名查询:</p><pre><code>{ stats { totalMembers } }</code></pre><p>当前返回成员数 <code>776</code>。还支持:</p><ul><li><code>members</code></li><li><code>stats</code></li><li><code>leaderboards</code></li><li><code>projects</code></li><li><code>organizations</code></li><li><code>commitStats</code></li></ul><p>该接口允许任意域名跨域调用,数据来自静态 JSON,并由 GitHub Actions 定期更新。因此很适合鲸落镇荣誉榜、贡献者名片和开源项目展示。</p><h3>对鲸落镇的建议</h3><p>第一阶段可以直接接入:</p><ol start="1"><li>课程、活动、资讯目录。</li><li>AILC 专题和公开任务树。</li><li>成员榜单、项目贡献和组织统计。</li><li>点击后跳转 Datawhale 原站学习。</li></ol><p>第二阶段再与 Datawhale 协商:</p><ol start="1"><li>WhaleTown 与 Datawhale 账号绑定或 SSO。</li><li>学习完成事件的签名回调。</li><li>证书和积分状态查询。</li><li>将可信完成事件映射为鲸币、任务书进度或游戏成就。</li></ol><p>现有项目已经接入了课程列表,并采用后端同步模式:[course_resources.service.ts (line 10)](/home/server/whaletown/whale-town-end-v2/src/business/course_resources/course_resources.service.ts:10) 和 [CourseBoardPanel.gd (line 11)](/home/server/whaletown/whale-town-front-v2/scenes/ui/CourseBoardPanel.gd:11)。因此下一步最自然的是扩展成统一的 <code>DatawhaleConnector</code>,而不是让 Godot 分别直接访问这些站点。此次仅进行了调研,没有修改代码。</p></body></html>截至 2026-07-23,结论是:能拿到,而且数据比较完整。但只有“成员可视化 GraphQL”属于有公开文档的 API;Datawhale 官网和 AILC 使用的是前端内部接口,匿名可访问,但不应视为稳定的官方开放平台。 | 数据来源 | 可获得内容 | 匿名访问 | 浏览器跨域 | 稳定性判断 | |---|---|---:|---:|---| | Datawhale 首页 | 轮播、推荐课程 | 可以 | WhaleTown 域名会被 403 | 内部 API | | 课程 | 列表、详情、章节树、内容 JSON | 可以 | 会被 403 | 内部 API | | 活动 | 列表、详情、时间、报名状态、关联课程 | 可以 | 会被 403 | 内部 API | | 资讯 | 列表、详情、正文 JSON | 可以 | 会被 403 | 内部 API | | AILC | 任务专题、任务树、积分、社区、参与人数、认证配置 | 可以 | 当前允许跨域 | 内部 API | | 成员可视化 | 成员、榜单、项目、贡献、组织统计 | 可以 | `Access-Control-Allow-Origin: *` | 有公开文档 | ### Datawhale 官网 已验证以下接口返回 HTTP 200: - [[首页轮播](https://backend.datawhale.cn/api/carousel/queryList?category=HOME)](https://backend.datawhale.cn/api/carousel/queryList?category=HOME) - [[课程列表](https://backend.datawhale.cn/api/learn/v2/queryLearnPage?page=1&size=12&sort=listpagePrio,createTime,desc)](https://backend.datawhale.cn/api/learn/v2/queryLearnPage?page=1&size=12&sort=listpagePrio,createTime,desc) - 课程信息:`GET /api/learn/v2/queryLearnInfo?learnId=212` - 课程章节:`GET /api/learn/v2/detail?learnId=212` - [[活动列表](https://backend.datawhale.cn/api/activity/v2/queryActivityPage?page=1&size=12&sort=createTime,desc)](https://backend.datawhale.cn/api/activity/v2/queryActivityPage?page=1&size=12&sort=createTime,desc) - 活动详情:`GET /api/activity/v2/queryActivityDetail?activityId=569` - [[资讯列表](https://backend.datawhale.cn/api/article/v2/list?page=1&size=10&sort=stickyPrior,createTime,desc&onShelve=true)](https://backend.datawhale.cn/api/article/v2/list?page=1&size=10&sort=stickyPrior,createTime,desc&onShelve=true) - 资讯详情:`GET /api/article/v2/query?id=743` 课程章节和资讯详情还会返回 OSS 上的正文 JSON 地址,因此技术上可以在游戏内渲染完整内容。 限制是:从 WhaleTown Web 域名直接调用这些接口会返回 `403 Invalid CORS request`。Godot Web 不能直接请求,必须通过鲸落镇后端同步或代理。服务端无 `Origin` 请求可以正常访问。 ### [AILC](https://ailc.datawhale.cn/) 学习中心 [AILC](https://ailc.datawhale.cn/) 的接口域名是: ```text https://ailc-backend.datawhale.cn ``` 已确认可匿名读取: ```text GET /tasks/frontend/tasks/task-groups?page=1&size=8&sort=latest GET /tasks/frontend/tasks/task-group-item?groupId=100000977 GET /tasks/frontend/tasks/communities GET /tasks/frontend/tasks/total-active-learners GET /tasks/frontend/tasks/total-task-count GET /tasks/frontend/tasks/total-points-issued GET /tasks/frontend/tasks/task-group-cert-state?taskGroupId=... ``` 能获得: - 专题、课程阶段和任务树 - 学习任务类型和积分 - 课程内容地址、测验 ID、表单配置 - 参与人数和完成数量 - 证书名称、证书模板、认证配置 但匿名用户的个人完成状态、证书签发状态都返回 `false`。也就是说: - 可以做“课程/任务展示” - 暂时不能可靠同步某个玩家的真实学习进度 - 更不能直接认定其已完成任务并发放鲸币 个人进度融合需要 Datawhale 提供正式登录授权、账号绑定、签名回调或服务端 Token。 另外,AILC 响应中包含部分参与者头像地址。建议只同步人数等汇总数据,不存储或展示这些头像,除非经过隐私和授权确认。 ### 成员可视化 GraphQL 这是目前最适合直接集成的来源,具有正式的 [[GraphQL API 文档](https://members-visualization.vercel.app/api/docs)](https://members-visualization.vercel.app/api/docs): ```text POST https://members-visualization.vercel.app/api/graphql Content-Type: application/json ``` 我实际验证了匿名查询: ```graphql { stats { totalMembers } } ``` 当前返回成员数 `776`。还支持: - `members` - `stats` - `leaderboards` - `projects` - `organizations` - `commitStats` 该接口允许任意域名跨域调用,数据来自静态 JSON,并由 GitHub Actions 定期更新。因此很适合鲸落镇荣誉榜、贡献者名片和开源项目展示。
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: xiangwang25/whale-town-front-v2#2