资讯详情

对接 Strapi CMS:awesome-seedance-2-prompts cms-client 提示词抓取与去重原理

📅 2026/10/8 21:18:21 | 华诺云谱 👁 阅读
对接 Strapi CMS:awesome-seedance-2-prompts cms-client 提示词抓取与去重原理
对接 Strapi CMSawesome-seedance-2-prompts cms-client 提示词抓取与去重原理【免费下载链接】awesome-seedance-2-prompts 2000 curated Seedance 2.0 video generation prompts — cinematic, anime, UGC, ads, meme styles. Includes Seedance API guides, character consistency tips, and advanced video workflows.项目地址: https://gitcode.com/gh_mirrors/aw/awesome-seedance-2-promptsawesome-seedance-2-prompts 是一个收录 2000 条 Seedance 2.0 视频生成提示词的开源项目覆盖电影感、动漫、UGC、广告、表情包等多种风格。它的核心能力之一是通过 Strapi CMS 自动抓取提示词数据并在最新列表与精选列表之间做 ID 级去重最终一键生成 16 种语言的 README。本文将拆解 cms-client.ts 的抓取与去重原理帮你理解这条自动化内容流水线的运作方式。一、项目概览一个会自己长大的提示词库这个项目最聪明的地方是它不靠人工复制粘贴维护内容而是一条CMS → 脚本 → 多语言 README的自动化流水线数据源头Strapi CMS 中的video-prompts内容类型收录原始提示词、作者、出处链接、视频缩略图等抓取层scripts/utils/cms-client.ts 负责发起 API 请求并清洗数据生成层scripts/generate-readme.ts 按 16 种语言逐一生成README.md、README_zh.md等文件媒体层scripts/download-videos.ts 增量下载视频、压缩后上传地址记录在 video-urls.json整条链路只需一条命令即可运行pnpm generate二、抓取原理一次最新 精选双源查询核心函数是 fetchSeedancePrompts()它并不是简单地拉取全量数据而是拆成两次针对性查询这是理解整套设计的钥匙。2.1 为什么需要查两次查询筛选条件排序数量目的最新列表model seedance-2.0按sourcePublishedAt倒序200 条保证新提示词不遗漏精选列表model seedance-2.0且featured true按 CMS 的sort字段100 条保证运营手工排序的精选位不失效问题的关键在于一条提示词可能既是最新的又是精选的而且精选提示词往往发布时间较老可能根本不在最新 200 条之内。如果只查最新列表精选内容就会丢失如果只查精选列表新内容就进不来。所以必须双源查询再合并去重。2.2 请求细节每次请求都携带Authorization: users API-Key请求头密钥来自环境变量CMS_API_KEY并通过 qs-esm 序列化查询参数。共享的查询参数见 SHARED_QUERY_PARAMS做了两点优化depth: 2只展开两级关联字段避免拉取过深的嵌套数据select: { sourceMeta: false, raw: false }主动排除原始字段减小响应体积三、去重原理用 Set 按 ID 合并精选优先两次查询的结果在 合并逻辑 中处理思路非常简洁const seenIds new Setnumber(); // 记录已见过的提示词 ID const allDocs: VideoPrompt[] []; for (const doc of featuredData.docs) { // ① 精选优先入列 seenIds.add(doc.id); allDocs.push(doc); } for (const doc of mainData.docs) { // ② 最新列表跳过重复 ID if (!seenIds.has(doc.id)) { seenIds.add(doc.id); allDocs.push(doc); } }去重的关键就三处以 CMS 的主键id作为唯一标识——这是最可靠的去重键比标题、内容等文本字段更稳定用Setnumber做 O(1) 查重万级数据量下依然开销极低精选先入列、最新后入列——当同一条提示词同时出现在两个列表时保留精选列表中的版本确保运营方设置的sort排序和featured标记不被最新列表覆盖这样合并后数组的顺序天然就是精选在前、最新在后直接决定了最终 README 中提示词的展示顺序。四、清洗过滤五级缩略图提取链去重之后每条文档还要经过 processDoc() 的标准化处理其中最核心的过滤闸门是没有缩略图的提示词会被直接跳过——因为 README 中的每条提示词都配有一张可点击的视频封面。extractThumbnail() 定义了五级降级提取链按优先级依次尝试优先级数据源说明1videos[]Cloudflare Stream 缩略图或海报2results.docs[].video关联结果中的视频封面3sourceVideos[]外部源视频自带缩略图4media[]图片型提示词优先用 CDN 裁切的sizes.thumbnail5sourceMedia[]兜底的外部媒体地址这种逐级降级的写法让脚本对不同年代、不同字段结构的 CMS 数据都有容错能力——新数据走 Cloudflare Stream老数据也能靠sourceMedia兜底保证不会因为字段差异而漏掉内容。同理参考图与媒体图也都遵循结构化字段优先、sourceXxx平铺字段兜底的双通道策略见 参考图提取。五、增量更新让每次生成都更便宜抓取结果并不是每次都从零开始处理generate-readme.ts 中设计了增量机制视频增量下载video-urls.json记录了提示词 ID → Release 下载地址的映射只处理映射中不存在的新提示词DOWNLOAD_VIDEOSauto模式README 全量重写每次对 16 种语言见 SUPPORTED_LANGUAGES重新拉取并生成保证多语言版本始终与 CMS 同步配合 upload-to-github.ts 把压缩后的视频上传到 Release 并回写 URL整条流水线实现了只增量处理新增、全量保证一致的平衡。六、小结设计点做法收益双源查询最新 200 条 精选 100 条分开拉新内容与运营精选都不丢失ID 级去重Setnumber 精选优先合并后顺序即展示顺序逻辑极简五级缩略图提取结构化字段逐级降级到 source 兜底兼容新旧数据结构无图才丢弃增量视频处理video-urls.json映射新 ID重复运行成本低、速度快整套原理浓缩在一百多行的 cms-client.ts 中却支撑起了 2000 条提示词、16 种语言 README 的日常自动更新。对于想学习如何用 CMS 驱动文档生成的同学这套双源查询 ID 去重 字段降级兜底的组合拳是一个可以直接借鉴的轻量级数据管道范例。【免费下载链接】awesome-seedance-2-prompts 2000 curated Seedance 2.0 video generation prompts — cinematic, anime, UGC, ads, meme styles. Includes Seedance API guides, character consistency tips, and advanced video workflows.项目地址: https://gitcode.com/gh_mirrors/aw/awesome-seedance-2-prompts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑