主题
search_sticker
POST /search_sticker
接口说明
按关键词搜索服务端本地保存的剪映贴纸索引,返回贴纸 ID、大小、宽高比例、URL 和格式。这个接口不调用第三方搜索 API,也不保存贴纸图片;用户选中后把 sticker_id 传给 add_sticker。
按关键词搜索剪映贴纸,返回剪映 sticker_id、大小、宽高比例、素材 URL、格式和数量。结果不返回预览图字段。搜索结果随后交给 add_sticker 写入草稿。
这个接口搜索的是什么
它搜索的是剪映贴纸索引,不是服务自己制作的贴纸图片库。
- 索引中的
sticker_id来自剪映贴纸资源。 - 草稿只记录剪映
sticker_id,不下载或转存贴纸图片。 - 打开草稿时,剪映会按该 ID 从剪映素材库加载贴纸。
- 搜索只读取服务器本地 JSON 索引,不调用第三方搜索 API,也不需要 Token。
剪映网页版存在内部搜索接口,但匿名调用会返回 check sign error,必须携带客户端动态签名,不能作为稳定的自建接口使用。因此本服务采用本地索引方式。
请求参数
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
keywords | string | 是 | — | 搜索关键词,例如 生日快乐、箭头、爱心 |
count | integer | 否 | 20 | 返回数量,范围 1-50 |
offset | integer | 否 | 0 | 分页偏移,从 0 开始;offset=2 表示跳过前两条 |
兼容参数名:也可以把 keywords 写成 keyword。
count 是本次返回条数,不是匹配总数。比如搜索“牛逼”共有 47 条匹配,传 count=3 时只返回 3 条,output.total 仍然显示 47。展示结果时只展示 sticker_id、size、aspect_ratio、url、format 和数量,不展示预览图。
请求示例
bash
curl -X POST https://your-domain.example/api/search_sticker \
-H "Content-Type: application/json" \
-H "X-API-Key: $VECTCUT_API_KEY" \
-d '{
"keywords": "帽子",
"count": 3,
"offset": 0
}'返回示例
json
{
"success": true,
"output": {
"data": [
{
"sticker_id": "7050494369782123814",
"size": 113433,
"width": 540,
"height": 540,
"aspect_ratio": "1:1",
"url": "https://cdn.example.com/sticker.png",
"format": "png"
}
],
"total": 91,
"offset": 0,
"count": 3
},
"error": ""
}这里只展示第一条;count=3 时实际会返回 3 条。url 是带签名的临时素材地址,写草稿时应使用稳定的 sticker_id。
返回字段
| 字段 | 类型 | 说明 |
|---|---|---|
output.data | array | 当前页的贴纸列表 |
output.data[].sticker_id | string | 剪映贴纸资源 ID,传给 add_sticker |
output.data[].size | integer | 贴纸大小,单位字节 |
output.data[].width | integer | 素材宽度 |
output.data[].height | integer | 素材高度 |
output.data[].aspect_ratio | string | 宽高比例,例如 1:1、44:35 |
output.data[].url | string | 贴纸素材 URL |
output.data[].format | string | 素材格式,例如 png、jpeg、gif |
output.total | integer | 匹配总数 |
output.offset | integer | 当前分页偏移 |
output.count | integer | 当前页返回数量 |
本地索引配置
默认路径:
text
data/sticker_catalog.json也可以通过配置文件或环境变量修改:
json
{
"sticker_catalog_path": "/opt/vectcutapi/data/sticker_catalog.json"
}bash
export VECTCUT_STICKER_CATALOG_PATH=/opt/vectcutapi/data/sticker_catalog.json索引文件可以是数组,也可以放在 data、items 或 stickers 字段中。服务接受以下常见字段名:
sticker_id、resource_id、resourceId、idtitle、nameimage_url、cover_url、preview_url、thumbnail_urlsticker_type、sticker_package
最小示例:
json
[
{
"sticker_id": "7069661365685832990",
"title": "生日快乐,气球,庆祝",
"keywords": ["生日", "气球", "庆祝"],
"image_url": "https://example.com/sticker.gif",
"thumbnail_url": "https://example.com/sticker-preview.png",
"sticker_type": 2
}
]兼容的剪映贴纸搜索结果可以直接作为导入源,包括 output.data 里的 sticker.large_image.image_url、sticker.track_thumbnail、sticker.sticker_package 和 sticker_type。导入后服务只读取本地索引,不再请求原来的搜索服务。
素材 URL 通常带 x-expires 和 x-signature 参数,是剪映 CDN 的临时签名地址。签名过期后只影响 URL,不影响草稿中的 sticker_id;需要更新 URL 时应重新导入索引。
导入已有剪映贴纸索引
如果你已经有从自己的剪映环境导出的贴纸 JSON,可以运行:
bash
python scripts/import_sticker_catalog.py \
--input /path/to/your-stickers.json \
--output data/sticker_catalog.json需要保留已有条目时加 --merge。
常见错误
| 错误 | 原因 | 处理 |
|---|---|---|
keywords is required | 没有传关键词 | 传 keywords 或 keyword |
sticker catalog not found | 本地索引不存在 | 创建索引并配置 sticker_catalog_path |
invalid sticker catalog JSON | 索引 JSON 格式错误 | 检查逗号、引号和数组结构 |
count must be between 1 and 50 | 返回数量超出范围 | 把 count 调整到 1-50 |