果子集 OpenAPI 外部发布文章接口文档

为了方便第三方平台(如 OpenClaw、自动化写作脚本等)向“果子集”网站直接推送并发布文章,系统提供了专属的 OpenAPI 接口。

1. 前置准备:配置鉴权 Key

在调用接口之前,您必须在果子集网站的后台管理系统中配置好鉴权密钥:

  1. 登录管理员账号,进入 后台管理 -> 站点配置
  2. 找到 外部 API (OpenAPI) 鉴权配置 区域。
  3. OpenAPI Key 输入框中,设置一个随机且复杂的字符串。
    • 格式要求:建议使用包含大小写字母和数字的组合,避免使用特殊符号。
    • 位数建议:建议长度在 32位到64位 之间,以保证足够的安全性(例如:sk1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p)。
  4. 点击保存。

请求头鉴权格式:

所有 OpenAPI 请求必须在 Header 中携带 Authorization,格式为 Bearer <您的 OpenAPI Key>

2. 接口列表

GET

2.1 查询所有可用知识空间 (Spaces)

请求路径: /api/openapi/spaces

完整URL示例: https://你的域名/api/openapi/spaces

Content-Type: application/json

说明: 返回所有在前台设为可见 (is_visible: true) 的知识空间列表,主要用于获取 space_id 以便在发布文章时使用。

响应示例:

{
  "success": true,
  "message": "Spaces fetched successfully",
  "data": [
    {
      "space_id": "7307678792883945476",
      "name": "果子悟了与Z思维",
      "description": "内容简介...",
      "is_free": true
    }
  ]
}
POST

2.2 发布新文章

请求路径: /api/openapi/article/publish

完整URL示例: https://你的域名/api/openapi/article/publish

Content-Type: application/json

请求体参数 (Body):

参数名类型必填说明
titleString文章标题
contentString文章正文(支持 HTML 格式或纯文本)
space_idString目标知识空间的 ID(可前往后台“知识空间管理”列表中查看 ID)
parent_node_tokenString目标父节点的 ID。如果传空或不传,则默认发布在该空间的根目录下。如果要挂在某个文件夹或文章下,传入其对应的节点 ID。
is_publishedBoolean是否立即在前台公开展示。默认 true
is_freeBoolean是否为免费文章。默认 true
POST

2.3 修改/更新现有文章

请求路径: /api/openapi/article/update

完整URL示例: https://你的域名/api/openapi/article/update

Content-Type: application/json

请求体参数 (Body):

参数名类型必填说明
node_tokenString要修改的目标文章节点 ID(可以在后台“节点与内容管理”中复制 ID)
titleString修改后的文章标题。不传则保持原样
contentString修改后的文章正文(支持 HTML 格式或纯文本)。不传则保持原样
is_publishedBoolean是否公开展示
is_freeBoolean是否免费

注:title, content, is_published, is_free 至少需要提供其中一个参数进行更新。

3. 请求示例

示例 1:使用 cURL (Bash)

curl -X POST http://localhost:3000/api/openapi/article/publish \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-mysupersecretkey2026" \
  -d '{
    "title": "OpenClaw 自动发布的 AI 资讯",
    "content": "<h1>今日 AI 动态</h1><p>这是一篇通过外部 API 自动推送到果子集网站的测试文章。</p>",
    "space_id": "7307678792883945476",
    "is_published": true,
    "is_free": true
  }'

示例 2:使用 Python (requests)

import requests

url = "https://你的域名/api/openapi/article/publish"
headers = {
    "Authorization": "Bearer sk-mysupersecretkey2026",
    "Content-Type": "application/json"
}
payload = {
    "title": "Python 脚本发布测试",
    "content": "<p>这是正文内容,支持 <strong>加粗</strong> 等 HTML 标签。</p>",
    "space_id": "7307678792883945476",
    "parent_node_token": "" # 选填
}

response = requests.post(url, json=payload, headers=headers)
print(response.json())

4. 响应说明

成功响应 (HTTP Status 201)

发布成功后,接口会返回新文章在系统内部生成的唯一节点 ID 和前台访问的 URL。

{
  "success": true,
  "message": "Article published successfully",
  "data": {
    "node_token": "ext_node_1711867200000_abc123",
    "obj_token": "ext_obj_1711867200000_abc123",
    "url": "/space/7307678792883945476/doc/ext_node_1711867200000_abc123"
  }
}

常见错误响应

鉴权失败 (HTTP Status 401 / 403)

{
  "error": "Invalid API Key or OpenAPI feature is not configured"
}

缺少必填参数 (HTTP Status 400)

{
  "error": "Missing required fields: title, content, space_id"
}

目标空间或父节点不存在 (HTTP Status 404)

{
  "error": "Space with space_id 'xxxx' does not exist"
}