后端前端网页爬虫MCP 服务AI 技能【免费下载链接】AnimeGarden動漫花園 镜像站 | 动画 BT 资源聚合站 | 动画 BT 资源开放接口项目地址https://gitcode.com/gh_mirrors/an/AnimeGarden点击查看免费下载AnimeGarden 仓库中的skills/animegarden/SKILL.md定义了一套面向 Agent 与开发者的“动漫资源搜索技能”它把 動漫花園dmhy、蜜柑计划mikan、萌番组moe与 ANiani四个上游站点统一为一个无鉴权的 HTTP 检索入口。本文以该技能文档为主体完整梳理其筛选参数体系、API 端点用法与空结果处理策略并结合animegarden/clientSDK 与服务端路由源码解释每个参数背后的真实实现读完后可直接复制可用的检索调用方案并理解 AnimeGarden API 的底层查询语义。一、技能定位一个只负责“找”、不负责“播”的资源检索工具技能文档 skills/animegarden/SKILL.md 的 frontmatter 声明了技能元信息name: animegarden、版本2026.07.06正文明确了三件事统一数据源以https://api.animes.garden作为动漫资源发现的首选数据源覆盖 dmhy、moe、mikan、ani 四个上游 provider。能力边界AnimeGarden 不提供播放、流媒体或任何直接观看能力只能作为辅助资源搜索工具使用。无鉴权文档中列出的公共 API 端点均不需要认证。文档还概括了技能的三大核心能力构建搜索筛选build search filters、调用 AnimeGarden HTTP 端点、归一化 API 响应供下游使用并指引读者阅读同目录的端点参考 skills/animegarden/references/api.md 获取详细端点说明与请求示例。技能包中另有一份 Agent 接入配置 skills/animegarden/agents/openai.yaml其中default_prompt明确了技能的使用意图通过https://api.animes.garden配合正确的 filters 与端点调用完成动漫资源搜索。二、API 能力总览与响应约定2.1 四类核心端点技能文档给出的能力清单如下参考文档 skills/animegarden/references/api.md 补充了更多端点细节能力端点说明资源搜索GET /resources按查询串筛选资源列表是技能的主力端点资源详情GET /detail/{provider}/{id}获取单条资源的完整描述与文件列表元数据查询GET /subjects、GET /teams、GET /users查询番组 subject、字幕组、发布者名称服务状态GET /获取 API 状态、时间戳与上游 provider 健康度2.2 响应约定Response Conventions参考文档约定了三个关键点写解析代码时必须遵守成功响应通常包含status: OK错误响应通常包含status: ERROR与message资源列表的分页信息统一放在pagination: { page, pageSize, complete }中page从1开始pageSize是请求的每页条数实际返回列表可能更短complete: true仅表示当前页之后没有更多匹配资源它不保证调用方已经取回了此前的所有页。响应体结构在 SDK 类型中也有严格定义packages/client/src/api/resources.ts 中ResourcesData要求同时具备resources[]、pagination、filter、timestamp四个字段fetchPage会逐项校验isPaginationPayload、normalizeResourcePayload任何字段缺失都会抛出AnimeGardenError.fromInvalidResponse。这与技能文档中“归一化 API 响应”的能力描述对应——SDK 把裸 JSON 归一化成带类型、带校验的结构化结果。三、筛选参数体系逻辑名、查询参数与取值语义的完整对照技能文档“Filter Options”一节的核心原则是所有非空筛选组之间默认以AND组合除非字段另有说明。以下对照表完整继承文档定义并结合 SDK 与源码补充了边界行为。3.1 Provider 与预设逻辑名HTTP 查询参数取值与语义providerprovider单值dmhy/moe/mikan/ani之一限定结果只来自某一个上游站点presetpreset目前仅支持bangumi应用 AnimeGarden 面向 Bangumi 的清理规则见 5.2 节源码剖析provider 的取值白名单在 packages/client/src/constants.ts 中定义为SupportProviders [dmhy, moe, mikan, ani]预设白名单为SupportPresets [bangumi]两端SDK 与服务端共用同一份定义避免取值漂移。3.2 分页与时间逻辑名HTTP 查询参数取值与语义pagepage页码从1开始解析器发现NaN或小于1时会回退为1pageSizepageSize每页条数上限1000默认100afterafter上传时间下界含接受日期或时间戳beforebefore上传时间上界含接受日期或时间戳默认值与上限来自 packages/client/src/constants.tsDefaultPageSize 100、MaxRequestPageSize 1000。参数解析在 packages/client/src/resolver.ts 的parseURLSearch中完成注意一个容易踩坑的实现细节pageSize超过1000时并不是截断到1000而是回退到默认值100resolver.ts L129-L137。时间参数用 zod 的z.coerce.number() / z.coerce.date()联合校验毫秒时间戳与日期字符串都可接受。此外服务端还有一道深分页硬限制apps/server/src/server/utils/resources-query.ts 中MAX_RESOURCES_OFFSET_LIMIT 10000当(page - 1) * pageSize pageSize 10000时抛出ResourcesDeepPaginationError最终返回 HTTP400。也就是说即使pageSize1000页码也最多推进到第10页左右更深的翻页必须收窄筛选条件而不是继续翻页。3.3 标题匹配search、include、keywords、exclude这是筛选体系中语义最复杂的一组完整继承技能文档的定义逻辑名HTTP 查询参数值间语义说明searchsearch可重复全文检索词对标题/内容做全文匹配一旦存在searchinclude即被忽略includeinclude可重复OR标题包含任一值即命中keywordskeyword可重复AND标题必须包含全部关键词excludeexclude可重复命中任一即剔除标题包含任一击中词的资源被移除search优先于include不是文档约定而是解析器的强制行为packages/client/src/resolver.ts 中明确写着if (filter.search) { delete filter.include; }——当两者同时传入时include会被直接删除。SDK 侧的标题匹配语义在 packages/client/src/filter.ts 中实现先对标题与关键词做normalizeTitle归一化并转小写然后include用some任一命中、keywords用every全部命中、exclude用every取反全部不命中三者以串联。3.4 资源元数据types 与 subjects逻辑名HTTP 查询参数值间语义说明typestype可重复OR资源分类文档给出的常用值动画、合集、音乐、日剧、RAW、漫画、游戏、特摄、其他subjectssubject可重复ORBangumi subject ID 过滤/subjects端点返回的正是subjects参数的取值来源。从 apps/server/src/server/routes/subjects.ts 可以看到该端点返回的是sys.modules.subjects.activeSubjects——即仅包含非归档active的番组响应缓存 24 小时。因此用它发现 subject ID 时拿到的是当前活跃番组的 ID 与元数据。3.5 参与方fansubs 与 publishers逻辑名HTTP 查询参数取值发现方式fansubsfansub可重复先用GET /teams发现准确名称publisherspublisher可重复先用GET /users发现准确名称技能文档特别强调了一条组合语义fansubs与publishers同属一个“参与方组”资源只要命中 fansub 或 publisher 中任一项即可。这与源码一致apps/server/src/resources/filter.ts 中该条件的实现是(publishers?.some(...) ?? false) || (fansubs?.some(...) ?? false)组内取OR与其他筛选组之间仍是AND。同时 SDK 侧 packages/client/src/filter.ts 按r.publisher.name p/r.fansub?.name p做精确名称比较所以文档才要求先用/teams、/users查到准确名称再筛选。3.6 tracker 与 metadata按需开启的附加字段参考文档还列出两个开关型参数tracker返回结果中带上 magnet tracker 值与metadata返回解析后的元数据例如anipar。从服务端路由源码 apps/server/src/server/routes/resources.ts 可知两者都是默认关闭的只有查询值属于true/yes/on不区分大小写时才保留对应字段否则服务端会从每条资源中delete掉tracker与metadata。资源列表响应统一带Cache-Control: public, max-age300。四、使用流程与空结果松弛策略技能文档“How To Use”给出了四步标准流程这是 Agent 调用时最重要的行为规范把用户意图转换为结构化筛选——从上一节的 Filter Options 中选参数一律先用GET /resources查询只有在需要完整描述文本或文件列表时才调用GET /detail/{provider}/{id}详情请求成本高应惰性触发结果为空时按固定顺序松弛筛选exclude→keywords→fansubs/publishers→ 时间范围。这个松弛顺序体现了“先放掉最主观的过滤、最后才放宽时间窗”的思路exclude是排除词keywords是强制命中词二者对召回率影响最大参与方与时间窗是客观约束放在最后放宽。文档同时要求当通过松弛筛选找回结果时必须如实报告放开了哪些筛选条件避免静默改变用户意图。配套的“Output Guidelines”约定了三条输出规范优先展示最匹配的结果除非用户另有要求按最新在前排序严格筛选产生零命中时精确报告被松弛的筛选项输出中保留provider与providerId以支持后续的详情拉取这两个字段正是GET /detail/{provider}/{id}的路径参数。五、端点详解继承 references/api.md 全部实操内容5.1 服务状态GET /获取 API 状态、当前时间戳与上游 provider 健康度无参数。服务端实现见 apps/server/src/server/index.ts返回status、timestamp、providers各上游健康度以及指向站点文档的linksopenapi、llms。上游新鲜度由 apps/server/src/server/index.ts 中的定时任务保障Executor为每个 provider 注册了每 5 分钟一次的resources.fetch抓取任务与每小时一次的resources.sync同步任务时区Asia/Shanghai。curl https://api.animes.garden/5.2 资源搜索GET /resources参考文档列出的完整查询参数即第三节对照表的全部内容另加tracker、metadata两个开关。可直接复制的请求示例来自参考文档curl https://api.animes.garden/resources?search%E8%91%AB%E9%80%81%E7%9A%84%E8%8A%99%E8%8E%89%E8%8E%B2keyword1080pkeyword%E7%AE%80%E4%BD%93%E5%86%85%E5%B5%8Ctype%E5%8A%A8%E7%94%BBpage1pageSize30该请求等价于“全文检索《葬送的芙莉莲》标题须同时包含1080p与简体内嵌分类为动画取第 1 页 30 条”。返回ResourcesResponsestatus、resources[]、pagination、filter、timestamp注意响应没有顶层complete字段完成状态只在pagination.complete中。presetbangumi的服务端实现值得展开apps/server/src/resources/filter.ts 定义了两份清理名单——BANGUMI_BANNED_FANSUBS如Kirara Fantasia、沸班亚马制作组、GMTeam与BANGUMI_BANNED_PUBLISHERS如Resona、百度云盘、Lanborey预设命中后这些参与方名下的资源会被条件式剔除L79-L95。这解释了技能文档中“applies Anime Gardens Bangumi-focused cleanup rules”的具体含义它是一套硬编码的脏数据清理规则专门过滤与 Bangumi 番剧目录不对应的搬运/国漫类发布者。5.3 资源详情GET /detail/{provider}/{id}路径参数providerdmhy|moe|mikan|ani与id上游侧资源 ID 字符串。成功时返回status、detail含description、files[]、magnets[]、hasMoreFiles、timestamp。示例curl https://api.animes.garden/detail/dmhy/123456从源码 apps/server/src/server/routes/resources.ts 看未知 ID 时返回status: ERROR与Unknown detail id: {provider} {id}消息当前实现使用 HTTP404并设置no-store缓存头参考文档中标注为400ErrorResponse调用方建议将非 200 一律按“无效/未找到输入”处理。命中的详情响应则缓存 24 小时且服务端对同一provider:id做了内存级 memo 缓存。同名的/resource/{provider}/{id}别名路由也提供相同能力。5.4 按 info hash 查询GET /detail/infohash/{hash}路径参数hash支持 40 位十六进制 info hash 或 32 位 base32 info hash。源码校验逻辑见 apps/server/src/server/routes/resources.ts非法格式返回status: ERROR与 HTTP400格式合法但未知则返回404。成功时返回resource与detail适合拿磁力链接里的 hash 直接定位库内记录。5.5 收藏夹GET /collection/{hash}返回收藏夹及其每个已保存筛选条件的第一页结果。关键约束继承参考文档该端点不支持page/pageSize入参响应含status、hash、name、createdAt、filters[]、results[]其中每个results[i]与filters[i]一一对应包含resources[]、pagination: { page: 1, pageSize: 1000, complete: boolean }与filterresults[i]上没有与resources同级的complete字段当results[i].pagination.complete为false时应携带对应的filters[i].searchParams、下一页page与相同pageSize去请求/resources继续拉取。服务端创建/查询逻辑在 apps/server/src/server/routes/collections.ts未知 hash 返回404与Failed querying collection result。5.6 分页字段的破坏性迁移参考文档保留了旧字段移除的迁移表使用旧版响应样例或测试断言时必须同步更新旧响应路径新响应路径/resourcesresult.completeresult.pagination.complete/collection/{hash}result.results[i].completeresult.results[i].pagination.complete仓库文档 docs/client/pagination.md 补充了 SDK 视角旧字段不提供兼容别名CollectionFilter查询结果态中的filter.complete同样迁移为filter.pagination.complete手动构造收藏夹结果项时必须提供完整的pagination: { page, pageSize, complete }不能只移动complete字段。5.7 元数据端点/users、/teams、/subjects端点返回条目字段GET /usersstatus、users[]id、provider、providerId、name、avatarGET /teamsstatus、teams[]id、provider、providerId、name、avatarGET /subjectsstatus、subjects[]id、name、keywords[]、activedAt、isArchived三者均为无参查询服务端实现见 apps/server/src/server/routes/users.ts响应缓存 24 小时。它们是fansubs/publishers/subjects三类筛选参数的“值发现”入口构成技能闭环的关键一环。六、源码纵深参数解析、多页拉取与去重技能文档声明的“归一化响应”能力在 SDK 中有完整落地这里选三处最能体现实现意图的代码展开1. 查询参数解析器统一了 URL 与 body 两种输入。packages/client/src/resolver.ts 的parseURLSearch同时接受URLSearchParams与 JSON bodybody 支持fansubs/publishers/keywords/subjects/types等复数形式合并时 body 优先、URL 次之所有多值字段都会经new Set(...)去重分页与时间字段有明确的默认与回退行为见 3.2 节。服务端路由 apps/server/src/server/routes/resources.ts 复用同一解析器保证“SDK 发出的参数”与“服务端理解的参数”语义完全一致。2. 多页拉取循环依赖 pagination 而非猜测总数。packages/client/src/api/resources.ts 中fetchResources在传入count时进入多页模式每页固定请求MaxRequestPageSize1000条循环终止条件是“达到 count、pagination.complete为真、本页返回空或请求被signal中止”。一个细节是达到count提前停止时pagination.complete仍可能为false见 docs/client/pagination.md消费方不能把“拿够了”误判为“查完了”。3. 结果按href去重并按时间倒序。同一 packages/client/src/api/resources.ts 文件中的uniq函数用Maphref, Resource去掉跨页重复项再按createdAt从新到旧排序——这正好对应技能文档 Output Guidelines 中“最新在前”的默认排序要求SDK 层面已替调用方实现。仓库还附带可直接运行的示例examples/search.ts 演示了fetchResources的基础用法与代理配置examples/api.http 提供 HTTP 请求样例可作为复制起点。七、速查一个端到端调用示例结合技能流程与参考文档一个完整的“搜索 按需详情”调用序列如下# 1. 服务状态与上游健康度 curl https://api.animes.garden/ # 2. 全文检索 强制关键词 分类过滤search 存在时 include 被忽略 curl https://api.animes.garden/resources?search%E6%B0%B4%E6%98%9F%E7%9A%84%E9%AD%94%E5%A5%B3keyword1080ptype%E5%8A%A8%E7%94%BBpage1pageSize30 # 3. 需要完整描述/文件列表时再按 provider providerId 拉详情 curl https://api.animes.garden/detail/dmhy/123456 # 4. 需要按字幕组筛选前先用 /teams 或 /users 发现准确名称 curl https://api.animes.garden/teams对应的 SDK 写法取自 docs/client/pagination.mdimport { fetchResources } from animegarden/client; const result await fetchResources({ subject: 1234, page: 1, pageSize: 100 }); if (result.ok) { console.log(result.resources); console.log(result.pagination.page, result.pagination.pageSize, result.pagination.complete); }八、要点回顾AnimeGarden 技能把四个上游站点收敛为一个无鉴权 API只负责资源发现不负责播放筛选组之间AND、多值字段内部ORkeywords为AND、fansubspublishers合成一个参与方组、search存在即压制include——这四条语义规则由 packages/client/src/resolver.ts 与 packages/client/src/filter.ts 共同实现pageSize上限1000、默认100服务端另有 offset 不超过10000的深分页硬限制空结果按exclude→keywords→fansubs/publishers→ 时间范围的固定顺序松弛并如实报告变化分页完成状态只认pagination.complete旧顶层complete字段已移除且无兼容别名输出中保留provider与providerId是衔接详情端点的必要字段。以上参数、端点与行为均以当前仓库中 skills/animegarden/SKILL.md、skills/animegarden/references/api.md 及相关源码为准若上游 API 升级如新增 preset 或调整分页模型应以仓库内文档与 packages/client 的最新定义复核后再调整调用代码。赞分享后端前端网页爬虫MCP 服务AI 技能【免费下载链接】AnimeGarden動漫花園 镜像站 | 动画 BT 资源聚合站 | 动画 BT 资源开放接口项目地址https://gitcode.com/gh_mirrors/an/AnimeGarden点击查看免费下载相关推荐10个 Laravel DataTables 高级搜索技巧多条件筛选与智能搜索终极指南10个 Laravel DataTables 高级搜索技巧多条件筛选与智能搜索终极指南 Laravel DataTables 是一个强大的服务器端数据处理包后端komi-store 仓库搜索功能架构解析GitHub / Codeberg / Forgejo 多源检索与分页实现komi store 仓库搜索功能架构解析GitHub / Codeberg / Forgejo 多源检索与分页实现 本篇文章围绕 komi store前身移动开发桌面应用Gio测试与调试单元测试、渲染测试和跨平台兼容性验证Gio测试与调试单元测试、渲染测试和跨平台兼容性验证 Gio作为一个跨平台图形界面库提供了完善的测试与调试机制确保应用在各种设备和操作系统上的稳定性和一致跨平台UI组件桌面应用移动开发创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考