
## 接口清单

| 接口 | 方法 | 作用 |
|------|------|------|
| `https://pattern.aiddit.com/api/pattern/category_tree` | `GET` | 获取分类树扁平节点列表，用于组装 `category_tree.json` |
| `https://pattern.aiddit.com/api/pattern/tools/get_library_frequent_itemsets/execute` | `POST` | 获取 execution 对应的频繁项集库 |
| `https://pattern.aiddit.com/api/pattern/tools/get_itemset_detail/execute` | `POST` | 根据 `itemset_id` 获取 itemset 详情和 `post_ids` |
| `https://pattern.aiddit.com/api/pattern/posts/batch` | `POST` | 根据 `post_id` 批量获取帖子详情 |

说明：

- 实测时间：`2026-04-22`
- 当前文档只保留仍有实际用途的接口

---

## 接口详情

### 1. 分类树接口

**接口**

```text
GET https://pattern.aiddit.com/api/pattern/category_tree
```

**用途**

- 获取完整分类树节点
- 返回的是扁平 `categories`
- 本地再组装成 `category_tree.json`

对应代码：

- [collect_node_data.py](./collect_node_data.py)

**参数**

#### `execution_id`

- 位置：query 参数
- 是否必填：是
- 示例：

```bash
curl "https://pattern.aiddit.com/api/pattern/category_tree?execution_id=56"
```

**请求格式**

```text
GET /api/pattern/category_tree?execution_id=56
```

**返回格式**

```json
{
  "success": true,
  "categories": [
    {
      "id": 14886,
      "source_stable_id": 57,
      "source_type": "实质",
      "name": "装饰元素",
      "description": "用于装饰或美化的图案、纹理、文字等视觉元素",
      "category_nature": "领域",
      "path": "/表象/符号/装饰符号/装饰元素",
      "level": 4,
      "parent_id": 15718,
      "element_count": 8,
      "elements": []
    }
  ]
}
```

常见字段：

- `id`
- `source_stable_id`
- `source_type`
- `name`
- `description`
- `category_nature`
- `path`
- `level`
- `parent_id`
- `element_count`
- `elements`

### 2. 频繁项集库接口

**接口**

```text
POST https://pattern.aiddit.com/api/pattern/tools/get_library_frequent_itemsets/execute
```

**用途**

- 获取一个 execution 对应的频繁项集库
- 当前最稳定的用法是“按 execution 取全库”

对应代码背景：

- 旧代码原本调用的是 `get_frequent_itemsets`
- 当前可用的是 `get_library_frequent_itemsets`

**参数**

#### `execution_id`

- 位置：body 顶层
- 是否必填：是
- 最小可用请求：

```bash
curl -X POST "https://pattern.aiddit.com/api/pattern/tools/get_library_frequent_itemsets/execute" \
  -H "Content-Type: application/json" \
  -d '{"execution_id":56}'
```

#### `args.top_n`

- 位置：`args` 内
- 是否必填：否
- 作用：限制返回展示条数
- 示例：

```bash
curl -X POST "https://pattern.aiddit.com/api/pattern/tools/get_library_frequent_itemsets/execute" \
  -H "Content-Type: application/json" \
  -d '{"execution_id":56,"args":{"top_n":5}}'
```

#### `args.sort_by`

- 位置：`args` 内
- 是否必填：否
- 作用：当前至少不会报错
- 实测值：`absolute_support`
- 示例：

```bash
curl -X POST "https://pattern.aiddit.com/api/pattern/tools/get_library_frequent_itemsets/execute" \
  -H "Content-Type: application/json" \
  -d '{"execution_id":56,"args":{"sort_by":"absolute_support"}}'
```

#### `args.category_ids`

- 位置：`args` 内
- 是否必填：否
- 说明：沿用旧接口写法时会返回空结果
- 当前不建议使用

**请求格式**

最小请求：

```json
{
  "execution_id": 56
}
```

带参数请求：

```json
{
  "execution_id": 56,
  "args": {
    "top_n": 20,
    "sort_by": "absolute_support"
  }
}
```

**返回格式**

顶层返回：

```json
{
  "success": true,
  "tool_name": "get_library_frequent_itemsets",
  "result": "{\"total\": 612, \"showing\": 20, \"groups\": {...}}"
}
```

注意：

- `result` 是 JSON 字符串
- 需要再解析一次

解析后格式：

```json
{
  "total": 612,
  "showing": 20,
  "groups": {
    "full/max": {
      "dimension_mode": "full",
      "target_depth": "max",
      "total": 612,
      "itemsets": [
        {
          "id": 132046,
          "item_count": 3,
          "absolute_support": 28,
          "items": [
            {
              "point_type": "关键点",
              "dimension": "形式",
              "category_id": 15055,
              "category_path": "架构>修辞>...>拟人化主体"
            }
          ]
        }
      ]
    }
  }
}
```

常见字段：

- 顶层：`total` `showing` `groups`
- 分组：`dimension_mode` `target_depth` `total` `itemsets`
- itemset：`id` `item_count` `absolute_support` `items`
- item：`point_type` `dimension` `category_id` `category_path`

### 3. Itemset 详情接口

**接口**

```text
POST https://pattern.aiddit.com/api/pattern/tools/get_itemset_detail/execute
```

**用途**

- 根据 `itemset_id` 获取 itemset 详情
- 结果中包含 `post_ids`

对应代码：

- [collect_node_data.py](./collect_node_data.py)
- [get_itemset_posts.py](./get_itemset_posts.py)

**参数**

#### `execution_id`

- 位置：body 顶层
- 是否必填：是

#### `args.itemset_ids`

- 位置：`args` 内
- 是否必填：是
- 类型：整数数组

**请求格式**

```json
{
  "execution_id": 56,
  "args": {
    "itemset_ids": [132046]
  }
}
```

**请求示例**

```bash
curl -X POST "https://pattern.aiddit.com/api/pattern/tools/get_itemset_detail/execute" \
  -H "Content-Type: application/json" \
  -d '{"execution_id":56,"args":{"itemset_ids":[132046]}}'
```

**返回格式**

顶层返回：

```json
{
  "success": true,
  "tool_name": "get_itemset_detail",
  "result": "[{...}]"
}
```

注意：

- `result` 是 JSON 字符串
- 需要再解析一次

解析后格式：

```json
[
  {
    "id": 132046,
    "dimension_mode": "full",
    "target_depth": "max",
    "item_count": 3,
    "absolute_support": 28,
    "support": 0.0,
    "items": [],
    "post_ids": []
  }
]
```

常见字段：

- `id`
- `dimension_mode`
- `target_depth`
- `item_count`
- `absolute_support`
- `support`
- `items`
- `post_ids`

### 4. 帖子批量详情接口

**接口**

```text
POST https://pattern.aiddit.com/api/pattern/posts/batch
```

**用途**

- 根据一批 `post_id` 获取帖子详情
- 常用于：
  - 判断平台是不是 `xiaohongshu`
  - 获取标题、正文、图片、作者等字段

对应代码：

- [collect_node_data.py](./collect_node_data.py)
- [sort_requirements.py](./sort_requirements.py)
- [data_preparation/post_collector.py](./data_preparation/post_collector.py)
- [visualize/fetch_xhs_posts.py](./visualize/fetch_xhs_posts.py)

**参数**

#### `post_ids`

- 位置：body 顶层
- 是否必填：是
- 类型：字符串数组

**请求格式**

```json
{
  "post_ids": [
    "671f7fab000000003c01fffc",
    "63712737"
  ]
}
```

**请求示例**

```bash
curl -X POST "https://pattern.aiddit.com/api/pattern/posts/batch" \
  -H "Content-Type: application/json" \
  -d '{"post_ids":["671f7fab000000003c01fffc","63712737"]}'
```

**返回格式**

```json
{
  "success": true,
  "posts": [
    {
      "post_id": "671f7fab000000003c01fffc",
      "title": "...",
      "body_text": "...",
      "images": [],
      "like_count": 0,
      "comment_count": 0,
      "collect_count": 0,
      "platform": "xiaohongshu",
      "platform_account_name": "...",
      "publish_date": "...",
      "decode_result": {}
    }
  ]
}
```

常见字段：

- `post_id`
- `title`
- `body_text`
- `images`
- `like_count`
- `comment_count`
- `collect_count`
- `platform`
- `platform_account_name`
- `publish_date`
- `decode_result`

---

## 特殊情况

### 1. `execution_id` 的传法不统一

- `category_tree`：放在 query 参数
- `get_library_frequent_itemsets`：放在 body 顶层
- `get_itemset_detail`：放在 body 顶层

### 2. `get_library_frequent_itemsets` 和旧接口不是简单改名

虽然名字相近，但当前行为不同：

- 只传 `execution_id` 就能返回整库 itemset
- `args.top_n` 有效
- 旧接口常用的 `category_ids` 传进去会得到空结果

所以当前不要直接把旧接口 payload 原样搬过去。

### 3. `result` 字段常常是字符串

两个工具接口：

- `get_library_frequent_itemsets`
- `get_itemset_detail`

返回里都有：

```json
{
  "result": "..."
}
```

这里的 `result` 不是最终对象，而是 JSON 字符串，需要再解析一次。

### 4. 旧频繁项集接口已不可用

当前：

- `get_frequent_itemsets/execute` 会返回“不允许调用工具”
- 如果需要 itemset 数据，应改用 `get_library_frequent_itemsets/execute`
