mirror of
https://github.com/Hommy-master/capcut-mate.git
synced 2026-10-30 18:44:19 +08:00
贴纸配置瘦身:只保留 title/sticker_id/image_url 三个字段。
config/sticker.json 从 58MB / 135 万行降到 22MB / 7.9 万行,79,368 条条目数 与顺序均不变。删掉的字段及依据: - preview_cover:全部 79,368 条均为空串,零信息。 - sticker_package(含 height_per_frame/size/width_per_frame)与 sticker_type: 无任何代码读取。add_sticker 完全不读本配置,它只用调用方传入的 sticker_id, 草稿素材是极简的(id/resource_id/sticker_id/source_platform/type)。 - track_thumbnail:与 large_image 是同一素材的 120×120 与 1920×1920 两种尺寸, 但签名不同、无法互相推导,本次一并去掉。 保留的三个字段构成检索到使用的完整链路:title 是唯一的搜索键,sticker_id 是 add_sticker 唯一需要的入参,image_url 供调用方展示预览。 顺带把序列化格式改为一条一行(原为 indent=2,每条 4 行),与 config/text_template.json 的大清单一风格一致,便于 diff。 这是对外契约变更:响应由嵌套(sticker.large_image.image_url)改为扁平 (image_url),故同步更新 schemas/search_sticker.py(StickerItem 拉平, StickerInfo/StickerPackage/LargeImage 三个类删除)、双语文档(含旧版本字段 说明与调用方调整提示)与 openapi.yaml(8 个响应示例 + 响应结构定义)。 service/search_sticker.py 删掉一行死 import:它导入了上述四个类,实际一个都 没用到,删类后会直接 ImportError。 tools/query_sticker.py 新增 flatten_sticker():上游返回的仍是嵌套结构,不转换 的话工具产出的文件与新配置格式对不上;对已是扁平的输入幂等,缺 title/sticker_id 的条目跳过并计数。 无损验证:79,368 条逐条比对 title/sticker_id/image_url 全部一致,条目顺序一致; openapi.yaml 的 8 个示例同样逐条比对一致。测试 56 项通过(3 个贴纸 + 53 个字幕/ 模板/气泡),端到端 SearchStickerResponse 校验通过。 已知事项:image_url 是带签名的临时 URL,有效期至 2026-12-15,到期后预览图失效 (title/sticker_id 不受影响,add_sticker 不依赖该字段),届时需重新抓取。 Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
+79369
-1349257
File diff suppressed because it is too large
Load Diff
+7
-26
@@ -45,21 +45,9 @@ Search stickers by keywords. This interface is used to search for related sticke
|
|||||||
"message": "success",
|
"message": "success",
|
||||||
"data": [
|
"data": [
|
||||||
{
|
{
|
||||||
"sticker": {
|
"title": "大笑",
|
||||||
"large_image": {
|
|
||||||
"image_url": "https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=r18I9uLQzgm%2FcvF8WNLbgw8BRwg%3D"
|
|
||||||
},
|
|
||||||
"preview_cover": "",
|
|
||||||
"sticker_package": {
|
|
||||||
"height_per_frame": 540,
|
|
||||||
"size": 305932,
|
|
||||||
"width_per_frame": 540
|
|
||||||
},
|
|
||||||
"sticker_type": 1,
|
|
||||||
"track_thumbnail": "https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=NqeKYGyeqIjCzF0Ls07ctnP%2BehI%3D&format=.png"
|
|
||||||
},
|
|
||||||
"sticker_id": "7521200021564427545",
|
"sticker_id": "7521200021564427545",
|
||||||
"title": "大笑"
|
"image_url": "https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=r18I9uLQzgm%2FcvF8WNLbgw8BRwg%3D"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -70,18 +58,11 @@ Search stickers by keywords. This interface is used to search for related sticke
|
|||||||
| Field | Type | Description |
|
| Field | Type | Description |
|
||||||
|-------|------|-------------|
|
|-------|------|-------------|
|
||||||
| data | array | Sticker data list |
|
| data | array | Sticker data list |
|
||||||
| sticker | object | Detailed sticker information |
|
| title | string | Sticker title (the only search key) |
|
||||||
| large_image | object | Large image information |
|
| sticker_id | string | Sticker ID, the input for `add_sticker` |
|
||||||
| image_url | string | Image URL |
|
| image_url | string | Sticker preview image URL (1920×1920) |
|
||||||
| preview_cover | string | Preview cover |
|
|
||||||
| sticker_package | object | Sticker package information |
|
> Earlier versions also returned `sticker.large_image`, `sticker.track_thumbnail`, `sticker.sticker_package`, `sticker.sticker_type` and `sticker.preview_cover`. These have been removed: `preview_cover` is an empty string in every entry, and the rest are read by no code. The response is now flat instead of nested, so callers must be updated accordingly.
|
||||||
| height_per_frame | number | Height per frame |
|
|
||||||
| size | number | Sticker package size |
|
|
||||||
| width_per_frame | number | Width per frame |
|
|
||||||
| sticker_type | number | Sticker type |
|
|
||||||
| track_thumbnail | string | Track thumbnail |
|
|
||||||
| sticker_id | string | Sticker ID |
|
|
||||||
| title | string | Sticker title |
|
|
||||||
|
|
||||||
### Error Response
|
### Error Response
|
||||||
|
|
||||||
|
|||||||
@@ -45,21 +45,9 @@ POST /openapi/capcut-mate/v1/search_sticker
|
|||||||
"message": "success",
|
"message": "success",
|
||||||
"data": [
|
"data": [
|
||||||
{
|
{
|
||||||
"sticker": {
|
"title": "大笑",
|
||||||
"large_image": {
|
|
||||||
"image_url": "https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=r18I9uLQzgm%2FcvF8WNLbgw8BRwg%3D"
|
|
||||||
},
|
|
||||||
"preview_cover": "",
|
|
||||||
"sticker_package": {
|
|
||||||
"height_per_frame": 540,
|
|
||||||
"size": 305932,
|
|
||||||
"width_per_frame": 540
|
|
||||||
},
|
|
||||||
"sticker_type": 1,
|
|
||||||
"track_thumbnail": "https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=NqeKYGyeqIjCzF0Ls07ctnP%2BehI%3D&format=.png"
|
|
||||||
},
|
|
||||||
"sticker_id": "7521200021564427545",
|
"sticker_id": "7521200021564427545",
|
||||||
"title": "大笑"
|
"image_url": "https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/29351205dbd943658d94c8feb17e5ed4~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=r18I9uLQzgm%2FcvF8WNLbgw8BRwg%3D"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -70,18 +58,11 @@ POST /openapi/capcut-mate/v1/search_sticker
|
|||||||
| 字段名 | 类型 | 说明 |
|
| 字段名 | 类型 | 说明 |
|
||||||
|--------|------|------|
|
|--------|------|------|
|
||||||
| data | array | 贴纸数据列表 |
|
| data | array | 贴纸数据列表 |
|
||||||
| sticker | object | 贴纸详细信息 |
|
| title | string | 贴纸标题(唯一的搜索键) |
|
||||||
| large_image | object | 大图信息 |
|
| sticker_id | string | 贴纸ID,`add_sticker` 的入参 |
|
||||||
| image_url | string | 图片URL |
|
| image_url | string | 贴纸预览图URL(1920×1920) |
|
||||||
| preview_cover | string | 预览封面 |
|
|
||||||
| sticker_package | object | 贴纸包信息 |
|
> 早期版本还返回 `sticker.large_image`、`sticker.track_thumbnail`、`sticker.sticker_package`、`sticker.sticker_type`、`sticker.preview_cover` 等字段,现已移除:`preview_cover` 在全部条目中均为空串,其余字段无任何代码读取。响应结构由嵌套改为扁平,请调用方相应调整。
|
||||||
| height_per_frame | number | 每帧高度 |
|
|
||||||
| size | number | 贴纸包大小 |
|
|
||||||
| width_per_frame | number | 每帧宽度 |
|
|
||||||
| sticker_type | number | 贴纸类型 |
|
|
||||||
| track_thumbnail | string | 轨道缩略图 |
|
|
||||||
| sticker_id | string | 贴纸ID |
|
|
||||||
| title | string | 贴纸标题 |
|
|
||||||
|
|
||||||
### 错误响应
|
### 错误响应
|
||||||
|
|
||||||
|
|||||||
+13
-104
@@ -11978,103 +11978,30 @@ components:
|
|||||||
keyword: 人
|
keyword: 人
|
||||||
RespExample:
|
RespExample:
|
||||||
data:
|
data:
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/91ada02f8fec440798fbce5b6c8052f4~tplv-3jr8j4ixpe-image.image?x-expires=1797257777&x-signature=JGLXAdKzUC1SNFOG1DBIj7deSm0%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/91ada02f8fec440798fbce5b6c8052f4~tplv-3jr8j4ixpe-image.image?x-expires=1797257777&x-signature=JGLXAdKzUC1SNFOG1DBIj7deSm0%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 128
|
|
||||||
size: 2233
|
|
||||||
width_per_frame: 128
|
|
||||||
sticker_type: 1
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/91ada02f8fec440798fbce5b6c8052f4~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=OlE4ZjEFzZ0%2BZE2hx984dtqX1JY%3D&format=.png
|
|
||||||
sticker_id: "7128787497496120613"
|
sticker_id: "7128787497496120613"
|
||||||
title: '人物剪影 '
|
title: '人物剪影 '
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/dde1931edf4e4026b24b52bdf83cdcc0~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=C69yhUjUgvAfbKC%2B3lnqRj4d4Mo%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/dde1931edf4e4026b24b52bdf83cdcc0~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=C69yhUjUgvAfbKC%2B3lnqRj4d4Mo%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 512
|
|
||||||
size: 34542
|
|
||||||
width_per_frame: 512
|
|
||||||
sticker_type: 1
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/dde1931edf4e4026b24b52bdf83cdcc0~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=4zY6CNDljdwTfxWGCcNdI7VX54U%3D&format=.png
|
|
||||||
sticker_id: "7075169384330726663"
|
sticker_id: "7075169384330726663"
|
||||||
title: 男性卡通手绘人物
|
title: 男性卡通手绘人物
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/edbd487bfbe347b49183ac297dece704~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=w%2FYtiqgjYd89ZRiBz0CmlhPaYWg%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/edbd487bfbe347b49183ac297dece704~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=w%2FYtiqgjYd89ZRiBz0CmlhPaYWg%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 452
|
|
||||||
size: 172903
|
|
||||||
width_per_frame: 256
|
|
||||||
sticker_type: 1
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/edbd487bfbe347b49183ac297dece704~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=GAb5g%2B0hERhVIOqy9HG%2BGzvBR2E%3D&format=.png
|
|
||||||
sticker_id: "7141375321454021922"
|
sticker_id: "7141375321454021922"
|
||||||
title: 3d 人物
|
title: 3d 人物
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/e42cb5d3d37146738d2b9b714c9a0ce3~tplv-3jr8j4ixpe-resize:1920:1920.gif?x-expires=1797257777&x-signature=5%2BKU1MAEkt4E6uRzqBiqpG6GPKw%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/e42cb5d3d37146738d2b9b714c9a0ce3~tplv-3jr8j4ixpe-resize:1920:1920.gif?x-expires=1797257777&x-signature=5%2BKU1MAEkt4E6uRzqBiqpG6GPKw%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 280
|
|
||||||
size: 122700
|
|
||||||
width_per_frame: 280
|
|
||||||
sticker_type: 2
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/e42cb5d3d37146738d2b9b714c9a0ce3~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=uF1QWPpgsM62Jc%2BgIpKFkH0PwwM%3D&format=.png
|
|
||||||
sticker_id: "7002854862090210590"
|
sticker_id: "7002854862090210590"
|
||||||
title: 人挤人
|
title: 人挤人
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/d05c664aceba49d2896660562ae5fe4d~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=dTV36p4iN055SxRvTcovbiq9QEs%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/d05c664aceba49d2896660562ae5fe4d~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=dTV36p4iN055SxRvTcovbiq9QEs%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 490
|
|
||||||
size: 126967
|
|
||||||
width_per_frame: 463
|
|
||||||
sticker_type: 1
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/d05c664aceba49d2896660562ae5fe4d~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=jmY7LUydyEJr9vVpGFBPQFhYp7Y%3D&format=.png
|
|
||||||
sticker_id: "6989061706173500703"
|
sticker_id: "6989061706173500703"
|
||||||
title: 人物背影
|
title: 人物背影
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/adff9a9ac6b14db291eb1da1964b140f~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=ISDIKQ6grSn9cyZW0TFq%2BF86y5M%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/adff9a9ac6b14db291eb1da1964b140f~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=ISDIKQ6grSn9cyZW0TFq%2BF86y5M%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 419
|
|
||||||
size: 91220
|
|
||||||
width_per_frame: 540
|
|
||||||
sticker_type: 1
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/adff9a9ac6b14db291eb1da1964b140f~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=OQokcDqdpZrfjbbJ5I2miMz9vF8%3D&format=.png
|
|
||||||
sticker_id: "6972844711287524621"
|
sticker_id: "6972844711287524621"
|
||||||
title: 商务人物工作会议人员扁平化职场 (28)
|
title: 商务人物工作会议人员扁平化职场 (28)
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/656e900a0bb6415db5199c58e8148b55~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=MLWZQjACxbpcUkQyznGMzpyHn9I%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/656e900a0bb6415db5199c58e8148b55~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797257777&x-signature=MLWZQjACxbpcUkQyznGMzpyHn9I%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 512
|
|
||||||
size: 33884
|
|
||||||
width_per_frame: 512
|
|
||||||
sticker_type: 1
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/656e900a0bb6415db5199c58e8148b55~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797257777&x-signature=
|
|
||||||
sticker_id: "6972844711287524622"
|
sticker_id: "6972844711287524622"
|
||||||
title: 商务人物工作会议人员扁平化职场 (29)
|
title: 商务人物工作会议人员扁平化职场 (29)
|
||||||
- sticker:
|
- image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/4f77f60ad9924712baa4e32d534e342c~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797258668&x-signature=Co7%2B81Xhn880nPNA7UBRlI2UPyE%3D
|
||||||
large_image:
|
|
||||||
image_url: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/4f77f60ad9924712baa4e32d534e342c~tplv-3jr8j4ixpe-resize:1920:1920.png?x-expires=1797258668&x-signature=Co7%2B81Xhn880nPNA7UBRlI2UPyE%3D
|
|
||||||
preview_cover: ""
|
|
||||||
sticker_package:
|
|
||||||
height_per_frame: 540
|
|
||||||
size: 104066
|
|
||||||
width_per_frame: 540
|
|
||||||
sticker_type: 1
|
|
||||||
track_thumbnail: https://p3-heycan-jy-sign.byteimg.com/tos-cn-i-3jr8j4ixpe/4f77f60ad9924712baa4e32d534e342c~tplv-3jr8j4ixpe-resize:120:120.png?x-expires=1797258668&x-signature=V7SlC36041lGmBHWsvY3lYgEuRk%3D&format=.png
|
|
||||||
sticker_id: "7243670138606718265"
|
sticker_id: "7243670138606718265"
|
||||||
title: 人气爆款标签
|
title: 人气爆款标签
|
||||||
message: 成功
|
|
||||||
str_list_to_objs:
|
str_list_to_objs:
|
||||||
value:
|
value:
|
||||||
ReqExample:
|
ReqExample:
|
||||||
@@ -13888,32 +13815,14 @@ paths:
|
|||||||
data:
|
data:
|
||||||
items:
|
items:
|
||||||
properties:
|
properties:
|
||||||
sticker:
|
image_url:
|
||||||
properties:
|
description: 贴纸预览图URL(1920×1920)
|
||||||
large_image:
|
type: string
|
||||||
properties:
|
|
||||||
image_url:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
preview_cover:
|
|
||||||
type: string
|
|
||||||
sticker_package:
|
|
||||||
properties:
|
|
||||||
height_per_frame:
|
|
||||||
type: number
|
|
||||||
size:
|
|
||||||
type: number
|
|
||||||
width_per_frame:
|
|
||||||
type: number
|
|
||||||
type: object
|
|
||||||
sticker_type:
|
|
||||||
type: number
|
|
||||||
track_thumbnail:
|
|
||||||
type: string
|
|
||||||
type: object
|
|
||||||
sticker_id:
|
sticker_id:
|
||||||
|
description: 贴纸ID,add_sticker 的入参
|
||||||
type: string
|
type: string
|
||||||
title:
|
title:
|
||||||
|
description: 贴纸标题(唯一的搜索键)
|
||||||
type: string
|
type: string
|
||||||
type: object
|
type: object
|
||||||
type: array
|
type: array
|
||||||
|
|||||||
@@ -1,33 +1,17 @@
|
|||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
from typing import List, Optional
|
from typing import List
|
||||||
|
|
||||||
|
|
||||||
class StickerPackage(BaseModel):
|
|
||||||
"""贴纸包信息"""
|
|
||||||
height_per_frame: int = Field(..., description="每帧高度")
|
|
||||||
size: int = Field(..., description="贴纸包大小")
|
|
||||||
width_per_frame: int = Field(..., description="每帧宽度")
|
|
||||||
|
|
||||||
|
|
||||||
class LargeImage(BaseModel):
|
|
||||||
"""大图信息"""
|
|
||||||
image_url: str = Field(..., description="图片URL")
|
|
||||||
|
|
||||||
|
|
||||||
class StickerInfo(BaseModel):
|
|
||||||
"""贴纸信息"""
|
|
||||||
large_image: LargeImage = Field(..., description="大图信息")
|
|
||||||
preview_cover: str = Field(..., description="预览封面")
|
|
||||||
sticker_package: StickerPackage = Field(..., description="贴纸包信息")
|
|
||||||
sticker_type: int = Field(..., description="贴纸类型")
|
|
||||||
track_thumbnail: str = Field(..., description="轨道缩略图")
|
|
||||||
|
|
||||||
|
|
||||||
class StickerItem(BaseModel):
|
class StickerItem(BaseModel):
|
||||||
"""贴纸项"""
|
"""贴纸项
|
||||||
sticker: StickerInfo = Field(..., description="贴纸信息")
|
|
||||||
sticker_id: str = Field(..., description="贴纸ID")
|
只保留检索与实际使用所需的三个字段:``title`` 是唯一的搜索键,
|
||||||
|
``sticker_id`` 是 add_sticker 唯一需要的入参,``image_url`` 供调用方展示预览。
|
||||||
|
贴纸包体积/每帧尺寸、贴纸类型、预览封面等字段无任何代码读取,已从配置中移除。
|
||||||
|
"""
|
||||||
title: str = Field(..., description="贴纸标题")
|
title: str = Field(..., description="贴纸标题")
|
||||||
|
sticker_id: str = Field(..., description="贴纸ID")
|
||||||
|
image_url: str = Field(..., description="贴纸预览图URL")
|
||||||
|
|
||||||
|
|
||||||
class SearchStickerRequest(BaseModel):
|
class SearchStickerRequest(BaseModel):
|
||||||
@@ -37,4 +21,4 @@ class SearchStickerRequest(BaseModel):
|
|||||||
|
|
||||||
class SearchStickerResponse(BaseModel):
|
class SearchStickerResponse(BaseModel):
|
||||||
"""搜索贴纸响应参数"""
|
"""搜索贴纸响应参数"""
|
||||||
data: List[StickerItem] = Field(..., description="贴纸数据列表")
|
data: List[StickerItem] = Field(..., description="贴纸数据列表")
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
from src.utils.logger import logger
|
from src.utils.logger import logger
|
||||||
from typing import List, Dict, Any
|
from typing import List, Dict, Any
|
||||||
from src.schemas.search_sticker import StickerItem, StickerInfo, StickerPackage, LargeImage
|
|
||||||
import json
|
import json
|
||||||
import config
|
import config
|
||||||
import random
|
import random
|
||||||
|
|||||||
+42
-7
@@ -21,10 +21,40 @@ DEFAULT_CONFIG = {
|
|||||||
"output_file": os.path.join(OUTPUT_DIR, "sticker.json")
|
"output_file": os.path.join(OUTPUT_DIR, "sticker.json")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def flatten_sticker(item):
|
||||||
|
"""把上游的嵌套贴纸对象转成 config/sticker.json 的扁平格式
|
||||||
|
|
||||||
|
上游返回形如::
|
||||||
|
|
||||||
|
{"sticker": {"large_image": {"image_url": ...}, "preview_cover": "",
|
||||||
|
"sticker_package": {...}, "sticker_type": 1,
|
||||||
|
"track_thumbnail": ...},
|
||||||
|
"sticker_id": "...", "title": "..."}
|
||||||
|
|
||||||
|
本配置只保留检索与实际使用所需的 title/sticker_id/image_url 三个字段:其余字段
|
||||||
|
无任何代码读取(preview_cover 在全部条目中恒为空串),保留只会让配置膨胀。
|
||||||
|
缺少 title/sticker_id 的条目无法被检索或使用,返回 None 由调用方跳过。
|
||||||
|
"""
|
||||||
|
if not isinstance(item, dict):
|
||||||
|
return None
|
||||||
|
|
||||||
|
sticker_id = item.get("sticker_id") or ""
|
||||||
|
title = item.get("title") or ""
|
||||||
|
if not (sticker_id and title):
|
||||||
|
return None
|
||||||
|
|
||||||
|
image_url = item.get("image_url") or ""
|
||||||
|
large_image = item.get("sticker", {}).get("large_image") if isinstance(item.get("sticker"), dict) else None
|
||||||
|
if isinstance(large_image, dict):
|
||||||
|
image_url = large_image.get("image_url") or image_url
|
||||||
|
|
||||||
|
return {"title": title, "sticker_id": sticker_id, "image_url": image_url}
|
||||||
|
|
||||||
|
|
||||||
def query_stickers(keyword, workflow_id=None, auth_token=None):
|
def query_stickers(keyword, workflow_id=None, auth_token=None):
|
||||||
"""
|
"""
|
||||||
调用 Coze API 获取贴纸信息
|
调用 Coze API 获取贴纸信息
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
keyword (str): 搜索关键词
|
keyword (str): 搜索关键词
|
||||||
workflow_id (str): workflow ID
|
workflow_id (str): workflow ID
|
||||||
@@ -113,10 +143,14 @@ def save_result(result, output_file=None):
|
|||||||
elif not isinstance(sticker_data, list):
|
elif not isinstance(sticker_data, list):
|
||||||
print(f"警告: sticker_data不是列表类型,而是 {type(sticker_data)}")
|
print(f"警告: sticker_data不是列表类型,而是 {type(sticker_data)}")
|
||||||
sticker_data = []
|
sticker_data = []
|
||||||
# 保存结果,只保存贴纸数组部分
|
# 保存结果,只保存贴纸数组部分(扁平化为 title/sticker_id/image_url)
|
||||||
|
flattened = [f for f in (flatten_sticker(item) for item in sticker_data) if f]
|
||||||
|
skipped = len(sticker_data) - len(flattened)
|
||||||
|
if skipped:
|
||||||
|
print(f"跳过 {skipped} 条缺少 title/sticker_id 的贴纸")
|
||||||
with open(output_file, 'w', encoding='utf-8') as f:
|
with open(output_file, 'w', encoding='utf-8') as f:
|
||||||
json.dump(sticker_data, f, indent=2, ensure_ascii=False)
|
json.dump(flattened, f, indent=2, ensure_ascii=False)
|
||||||
|
|
||||||
return output_file
|
return output_file
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"保存结果失败: {e}")
|
print(f"保存结果失败: {e}")
|
||||||
@@ -166,9 +200,10 @@ def query_multiple_keywords(keywords, output_file=None):
|
|||||||
sticker_data = []
|
sticker_data = []
|
||||||
|
|
||||||
print(f"关键词 '{keyword}' 找到 {len(sticker_data)} 个贴纸")
|
print(f"关键词 '{keyword}' 找到 {len(sticker_data)} 个贴纸")
|
||||||
# 合并贴纸数据
|
# 合并贴纸数据(扁平化为 title/sticker_id/image_url)
|
||||||
all_stickers.extend(sticker_data)
|
all_stickers.extend(
|
||||||
|
f for f in (flatten_sticker(item) for item in sticker_data) if f)
|
||||||
|
|
||||||
# 去重处理,根据sticker_id去重
|
# 去重处理,根据sticker_id去重
|
||||||
unique_stickers = []
|
unique_stickers = []
|
||||||
seen_ids = set()
|
seen_ids = set()
|
||||||
|
|||||||
Reference in New Issue
Block a user