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",
|
||||
"data": [
|
||||
{
|
||||
"sticker": {
|
||||
"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"
|
||||
},
|
||||
"title": "大笑",
|
||||
"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 |
|
||||
|-------|------|-------------|
|
||||
| data | array | Sticker data list |
|
||||
| sticker | object | Detailed sticker information |
|
||||
| large_image | object | Large image information |
|
||||
| image_url | string | Image URL |
|
||||
| preview_cover | string | Preview cover |
|
||||
| sticker_package | object | Sticker package information |
|
||||
| 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 |
|
||||
| title | string | Sticker title (the only search key) |
|
||||
| sticker_id | string | Sticker ID, the input for `add_sticker` |
|
||||
| image_url | string | Sticker preview image URL (1920×1920) |
|
||||
|
||||
> 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.
|
||||
|
||||
### Error Response
|
||||
|
||||
|
||||
@@ -45,21 +45,9 @@ POST /openapi/capcut-mate/v1/search_sticker
|
||||
"message": "success",
|
||||
"data": [
|
||||
{
|
||||
"sticker": {
|
||||
"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"
|
||||
},
|
||||
"title": "大笑",
|
||||
"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 | 贴纸数据列表 |
|
||||
| sticker | object | 贴纸详细信息 |
|
||||
| large_image | object | 大图信息 |
|
||||
| image_url | string | 图片URL |
|
||||
| preview_cover | string | 预览封面 |
|
||||
| sticker_package | object | 贴纸包信息 |
|
||||
| height_per_frame | number | 每帧高度 |
|
||||
| size | number | 贴纸包大小 |
|
||||
| width_per_frame | number | 每帧宽度 |
|
||||
| sticker_type | number | 贴纸类型 |
|
||||
| track_thumbnail | string | 轨道缩略图 |
|
||||
| sticker_id | string | 贴纸ID |
|
||||
| title | string | 贴纸标题 |
|
||||
| title | string | 贴纸标题(唯一的搜索键) |
|
||||
| sticker_id | string | 贴纸ID,`add_sticker` 的入参 |
|
||||
| image_url | string | 贴纸预览图URL(1920×1920) |
|
||||
|
||||
> 早期版本还返回 `sticker.large_image`、`sticker.track_thumbnail`、`sticker.sticker_package`、`sticker.sticker_type`、`sticker.preview_cover` 等字段,现已移除:`preview_cover` 在全部条目中均为空串,其余字段无任何代码读取。响应结构由嵌套改为扁平,请调用方相应调整。
|
||||
|
||||
### 错误响应
|
||||
|
||||
|
||||
+13
-104
@@ -11978,103 +11978,30 @@ components:
|
||||
keyword: 人
|
||||
RespExample:
|
||||
data:
|
||||
- sticker:
|
||||
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
|
||||
- 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
|
||||
sticker_id: "7128787497496120613"
|
||||
title: '人物剪影 '
|
||||
- sticker:
|
||||
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
|
||||
- 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
|
||||
sticker_id: "7075169384330726663"
|
||||
title: 男性卡通手绘人物
|
||||
- sticker:
|
||||
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
|
||||
- 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
|
||||
sticker_id: "7141375321454021922"
|
||||
title: 3d 人物
|
||||
- sticker:
|
||||
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
|
||||
- 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
|
||||
sticker_id: "7002854862090210590"
|
||||
title: 人挤人
|
||||
- sticker:
|
||||
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
|
||||
- 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
|
||||
sticker_id: "6989061706173500703"
|
||||
title: 人物背影
|
||||
- sticker:
|
||||
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
|
||||
- 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
|
||||
sticker_id: "6972844711287524621"
|
||||
title: 商务人物工作会议人员扁平化职场 (28)
|
||||
- sticker:
|
||||
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=
|
||||
- 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
|
||||
sticker_id: "6972844711287524622"
|
||||
title: 商务人物工作会议人员扁平化职场 (29)
|
||||
- sticker:
|
||||
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
|
||||
- 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
|
||||
sticker_id: "7243670138606718265"
|
||||
title: 人气爆款标签
|
||||
message: 成功
|
||||
str_list_to_objs:
|
||||
value:
|
||||
ReqExample:
|
||||
@@ -13888,32 +13815,14 @@ paths:
|
||||
data:
|
||||
items:
|
||||
properties:
|
||||
sticker:
|
||||
properties:
|
||||
large_image:
|
||||
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
|
||||
image_url:
|
||||
description: 贴纸预览图URL(1920×1920)
|
||||
type: string
|
||||
sticker_id:
|
||||
description: 贴纸ID,add_sticker 的入参
|
||||
type: string
|
||||
title:
|
||||
description: 贴纸标题(唯一的搜索键)
|
||||
type: string
|
||||
type: object
|
||||
type: array
|
||||
|
||||
@@ -1,33 +1,17 @@
|
||||
from pydantic import BaseModel, Field
|
||||
from typing import List, Optional
|
||||
|
||||
|
||||
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="轨道缩略图")
|
||||
from typing import List
|
||||
|
||||
|
||||
class StickerItem(BaseModel):
|
||||
"""贴纸项"""
|
||||
sticker: StickerInfo = Field(..., description="贴纸信息")
|
||||
sticker_id: str = Field(..., description="贴纸ID")
|
||||
"""贴纸项
|
||||
|
||||
只保留检索与实际使用所需的三个字段:``title`` 是唯一的搜索键,
|
||||
``sticker_id`` 是 add_sticker 唯一需要的入参,``image_url`` 供调用方展示预览。
|
||||
贴纸包体积/每帧尺寸、贴纸类型、预览封面等字段无任何代码读取,已从配置中移除。
|
||||
"""
|
||||
title: str = Field(..., description="贴纸标题")
|
||||
sticker_id: str = Field(..., description="贴纸ID")
|
||||
image_url: str = Field(..., description="贴纸预览图URL")
|
||||
|
||||
|
||||
class SearchStickerRequest(BaseModel):
|
||||
@@ -37,4 +21,4 @@ class SearchStickerRequest(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 typing import List, Dict, Any
|
||||
from src.schemas.search_sticker import StickerItem, StickerInfo, StickerPackage, LargeImage
|
||||
import json
|
||||
import config
|
||||
import random
|
||||
|
||||
+42
-7
@@ -21,10 +21,40 @@ DEFAULT_CONFIG = {
|
||||
"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):
|
||||
"""
|
||||
调用 Coze API 获取贴纸信息
|
||||
|
||||
|
||||
Args:
|
||||
keyword (str): 搜索关键词
|
||||
workflow_id (str): workflow ID
|
||||
@@ -113,10 +143,14 @@ def save_result(result, output_file=None):
|
||||
elif not isinstance(sticker_data, list):
|
||||
print(f"警告: sticker_data不是列表类型,而是 {type(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:
|
||||
json.dump(sticker_data, f, indent=2, ensure_ascii=False)
|
||||
|
||||
json.dump(flattened, f, indent=2, ensure_ascii=False)
|
||||
|
||||
return output_file
|
||||
except Exception as e:
|
||||
print(f"保存结果失败: {e}")
|
||||
@@ -166,9 +200,10 @@ def query_multiple_keywords(keywords, output_file=None):
|
||||
sticker_data = []
|
||||
|
||||
print(f"关键词 '{keyword}' 找到 {len(sticker_data)} 个贴纸")
|
||||
# 合并贴纸数据
|
||||
all_stickers.extend(sticker_data)
|
||||
|
||||
# 合并贴纸数据(扁平化为 title/sticker_id/image_url)
|
||||
all_stickers.extend(
|
||||
f for f in (flatten_sticker(item) for item in sticker_data) if f)
|
||||
|
||||
# 去重处理,根据sticker_id去重
|
||||
unique_stickers = []
|
||||
seen_ids = set()
|
||||
|
||||
Reference in New Issue
Block a user