
后端前端网页爬虫MCP 服务AI 技能【免费下载链接】AnimeGarden動漫花園 镜像站 | 动画 BT 资源聚合站 | 动画 BT 资源开放接口项目地址https://gitcode.com/gh_mirrors/an/AnimeGarden点击查看免费下载AnimeGarden 是動漫花園的镜像站与动画 BT 资源聚合站除了网页端还对外提供一套无需鉴权的 JSON HTTP 开放接口覆盖状态查询、资源搜索、资源详情、收藏夹Collection以及用户/字幕组/番剧元数据五类能力。本文以仓库中的接口参考文档 api.md 为核心逐接口讲清 Base URL、分页约定、全部查询参数与响应结构并结合 服务端路由实现 与 animegarden/client SDK 的源码说明参数解析、查询语义和缓存策略等实现细节读完即可直接用curl或 SDK 编写可靠的资源抓取与聚合程序。一、Base URL、鉴权与总体响应约定接口的 Base URL 为https://api.animes.garden本文档覆盖的公开端点均不需要任何鉴权仓库中/admin/*管理端点使用 Bearer Token 鉴权属于运维内部接口不在开放接口范围内见 admin.tsSDK 的默认baseURL即https://api.animes.garden/见 constants.ts 中DefaultBaseURL的定义服务端对所有开放接口启用了 CORSorigin: *并附带X-Request-Id、X-Response-Timestamp等诊断响应头请求整体有 60 秒超时超时返回408与{ status: ERROR, message: Request timeout after waiting 60 seconds... }见 server/index.ts。1.1 状态码与错误模型响应体约定遵循统一的status字段模式成功响应通常带status: OK错误响应通常带status: ERROR和message例如详情接口的message会是Unknown detail id: dmhy 123未匹配到资源时服务端还可能返回{ status: ERROR }配合500状态码见全局错误处理器 server/index.ts。1.2 分页对象 pagination资源列表的分页信息统一放在pagination对象中interface PaginationResult { page: number; // 从 1 开始 pageSize: number; // 请求的每页条数 complete: boolean; }page从1开始pageSize是请求的每页条数实际返回的资源条数可能更少最后一页常见complete: true只表示当前页之后没有更多匹配资源不代表调用方已经取遍了之前各页。服务端在解析分页参数时会做归一化page非法或小于1时回落到1pageSize非法、小于1或超过MaxRequestPageSize1000时回落到DefaultPageSize100见 resolver.ts 与 constants.ts。此外resources-query.ts 定义了深分页保护当(page - 1) * pageSize pageSize 10000时抛出ResourcesDeepPaginationError接口返回400慢查询繁忙返回503慢查询超时返回504。也就是说即使pageSize1000page最多也只能推进到offset不超过约 1 万条的位置超出时请改用时间窗口before/after收窄查询。二、状态 APIGET /用于获取 API 状态、当前时间戳与上游 provider 的健康状况参数无响应200包含status: OK、timestamp上游数据时间戳、providers各 provider 的健康状态以及指向openapi.json与llms.txt文档的发现链接links见 server/index.ts另有结构几乎相同的/health端点可供探活。curl https://api.animes.garden/providers里的四个上游dmhy、moe、mikan、ani即本项目全部受支持的 provider 常量SupportProviders见 constants.ts。三、资源 API3.1 GET /resources多条件资源检索GET /resources是核心查询端点支持 query-string 参数也支持 JSON body服务端通过ctx.req.json().catch(() undefined)同时解析两者body 优先见 resources.ts。路由本身注册了/resources、/resources/、/resources/:page以及按 provider 限定的/resources/{provider}、/resources/{provider}/:page等变体。查询参数一览query 参数均可重复出现多值字段在同字段内是OR关系参数说明备注源码补充page页码从1开始默认1非法值回落1pageSize每页条数默认100最大1000超限回落默认值after时间下界保留创建时间不早于该时刻的资源接受日期字符串或毫秒时间戳服务端用 zodcoerce.date解析before时间上界保留创建时间不晚于该时刻的资源同上search全文检索词匹配标题/内容可多值search存在时会覆盖include优先级更高include标题包含匹配词search的轻量替代可多值命中其一即可keyword必需关键词重复该参数表示多个必需词全部命中AND 语义exclude屏蔽词命中的资源被剔除只要命中任一屏蔽词即剔除type资源分类过滤如 动画、合集、音乐可多值同字段内 ORsubjectBangumi 番剧 ID 过滤可多值同字段内 ORfansub字幕组名称过滤可多值同字段内 ORpublisher发布者/上传者名称过滤可多值同字段内 ORtracker是否将 magnet 的 tracker 值返回取值为true/yes/on不区分大小写时启用否则响应中会删除tracker字段metadata是否返回解析后的元数据如anipar结果取值同上数据库列类型即{ anipar?: ParseResult }见 schema/resources.tstracker与metadata的开关逻辑在 resources.ts默认都关闭只有当查询参数值属于[true, yes, on]小写比较时才保留对应字段否则从每条资源上删除。响应结构200ResourcesResponse{ status: OK, resources: [ /* Resource[] */ ], pagination: { page: 1, pageSize: 30, complete: false }, filter: { /* 服务端解析归一化后的筛选条件 */ }, timestamp: 2024-01-01T00:00:00.000Z }注意响应中没有与resources同级的顶层complete字段完成度只存在于pagination内。Resource对象的字段SDK 类型定义见 types.ts字段说明id站内资源主键provider/providerId上游来源与上游侧 IDtitle/href资源标题、上游详情页链接type资源分类动画、合集、音乐等magnetmagnet 链接tracker仅在trackertrue时返回size资源大小字节fansub字幕组{ id, name, avatar }可为空publisher发布者{ id, name, avatar }subjectId关联的 Bangumi 番剧 ID可为空createdAt/fetchedAt资源创建时间 / 服务端抓取时间metadata仅在metadatatrue时返回含anipar解析结果curl 示例摘自 api.md 原文URL 编码后的中文条件# 搜索「葬送的芙莉莲」必需词 1080p / 简体内嵌类型限定动画 curl https://api.animes.garden/resources?search%E8%91%AC%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仓库 examples/api.http 中还有更多可直接运行的组合例如### 按时间窗 字幕组/发布者过滤 GET https://api.animes.garden/resources?type动画fansubLoliHousepublisherLoliHouseafter2023-04-16T13:00:00.000Zbefore1681653600000 ### 多字幕组 OR 过滤 GET https://api.animes.garden/resources?fansubANifansub爱恋字幕社 ### 带复杂组合条件的 JSON body 查询 GET https://api.animes.garden/resources?type动画 Content-Type: application/json { include: [机动战士高达, 水星的魔女], keywords: [第二季, ANi] }查询语义重点来自文档 Notes 并经 resolver.ts 源码印证不同查询组type、subject、fansub/publisher、时间窗、标题条件之间是AND关系fansub、publisher、type、subject、include等多值字段在同一字段内是 OR关系search优先级高于include解析器在filter.search非空时会直接delete filter.includeresolver.tskeyword是必需词AND 语义exclude是屏蔽词命中即剔除标题匹配前会先做归一化全角转半角、繁体转简体normalizeTitle见 utils.ts因此中英文标点混用、繁简差异不影响匹配。3.2 GET /detail/{provider}/{id}单资源详情获取某条资源的完整详情描述、文件列表、多 magnet路径参数providerdmhy|moe|mikan|aniid上游侧资源 ID 字符串例如 dmhy 的帖子 ID响应200返回{ status, resource, detail, timestamp }其中detail为ResourceDetaildescription种子描述、files[]{ name, size }、magnets[]{ name, url }、hasMoreFiles文件列表是否还有更多类型见 types.ts未找到时返回错误源码对无法解析的 ID 返回400对库中不存在的详情返回404两者响应体均为{ status: ERROR, message: Unknown detail id: ... }并设置Cache-Control: no-store成功响应缓存Cache-Control: public, max-age8640024 小时见 resources.ts。curl https://api.animes.garden/detail/dmhy/123456实现上详情查询走了memo内存缓存TTL 1 小时、有容量上限与自动 GCcacheErrors: false不缓存错误避免对同一provider:id重复打上游见 resources.ts。3.3 GET /detail/infohash/{hash}按 Info Hash 查询用 torrent 的 info hash 反查资源与详情适合从磁力链接提取 hash 后直接换取结构化数据路径参数hash40 位十六进制[0-9A-F]{40}或 32 位 base32[A-Z2-7]{32}info hash大小写不敏感源码先toUpperCase再校验见 resources.ts响应200返回{ status, resource, detail, timestamp }非法 hash 返回400status: ERROR、Invalid info hash: ...hash 合法但库中不存在时返回404Unknown detail info hash: ...。处理这类详情查询时应把400/404的ERROR统一视为输入无效或未找到。四、Collection APIGET /collection/{hash}Collection 是保存好的多组筛选条件 每组的第一页结果适合把一套常用订阅条件固化成可分享的 hash。4.1 创建与获取创建POST /collection或PUT /collectionbody 为{ name, authorization, filters[] }服务端对 collection 内容做哈希后落库返回{ status, id, hash, createdAt }重复提交相同内容不会重复建库onConflictDoNothing。见 collections.ts 与 collections/index.ts获取GET /collection/{hash}其中hash为创建时返回的 collection hash。该端点不接受page/pageSize参数。4.2 响应结构200返回{ status, hash, name, createdAt, filters[], results[] }源码另附updatedAt其中results[i]与filters[i]一一对应包含resources[]该组筛选条件命中的资源第一页pagination固定为{ page: 1, pageSize: 1000, complete: boolean }——每个 filter 固定取第 1 页、每页至多1000条见 collections/index.tsquery.find(f, { page: 1, pageSize: 1000 })filter解析归一化后的资源查询条件。results[i]上没有与resources同级的complete字段完成度在pagination内。服务端对该接口结果有 5 分钟的 memo 缓存。4.3 获取更多资源当results[i].pagination.complete为false时取下一页的正确姿势是取出对应filters[i].searchParams服务端已拼好的查询串调用GET /resources在searchParams基础上追加page下一页即results[i].pagination.page 1与相同pageSize1000。Collection 查询本身永远返回page1所以翻页必须回到/resources完成。4.4 分页字段迁移破坏性变更旧的完成度字段已移除且不保留别名旧响应路径新响应路径/resourcesresult.completeresult.pagination.complete/collection/{hash}result.results[i].completeresult.results[i].pagination.completeSDK 同样为资源与 collection 查询结果暴露pagination对象。调用方、fixtures 与断言都应改为从pagination读取全部分页字段。迁移细节含 SDK 侧CollectionFilter结果态的filter.complete→filter.pagination.complete在 pagination.md 中有更完整的说明。五、元数据 APIs5.1 GET /users发布者列表参数无响应200{ status, users[] }列表项含id、名称、avatar等路由实现见 users.ts数据来自内存中的UsersModule.ids索引响应缓存Cache-Control: public, max-age86400从源码结构看users[]每项对应users表一行id、name规范名、avatar、providersprovider →{ providerId, avatar?, aliases? }的映射见 schema/users.ts。同一个人在不同上游的旧名称会被归一化为aliases见 normalize.ts 所在的规范化逻辑因此按providerId匹配比按name匹配更稳定。curl https://api.animes.garden/users5.2 GET /teams字幕组列表参数无响应200{ status, teams[] }结构与/users对称id、名称、avatar、各 provider 侧身份路由与 users.ts 中的/teams一致数据源为teams表缓存策略相同24 小时。curl https://api.animes.garden/teams5.3 GET /subjects番剧列表参数无响应200{ status, subjects[] }列表项含 Bangumi 主题 ID、名称、检索词、activedAt、isArchived实现见 subjects.ts返回的是SubjectsModule.activeSubjects即仅未归档isArchived false的主题见 subjects/index.ts从源码结构看subjects表以bangumi_id为主键id即 Bangumi 主题 ID另存search检索词 JSON、actived_at与is_archived见 schema/subjects.ts。这些subjectID 可直接用于/resources?subject...过滤。curl https://api.animes.garden/subjects六、配套 SDKanimegarden/client服务端仓库自带 TypeScript SDK packages/clientHTTP 层行为与本文各端点一一对应fetchResources(options)封装/resources设置count-1表示取全部匹配时会以pageSize1000连续翻页直到pagination.complete或取满count按href去重并按createdAt降序输出见 api/resources.tsfetchResourceDetail(provider, id)/fetchResourceDetailByInfoHash(hash)分别封装两个详情端点见 api/detail.tsfetchCollection(hash)/generateCollection(collection)封装 collection 查询与创建提交时会自动剔除 filters 里的resources、pagination等客户端查询态字段只保存筛选条件本身见 api/collection.ts通用请求选项FetchOptions支持自定义fetch、baseURL默认https://api.animes.garden/、retry默认 0、timeout、signal与 hooks见 types.ts。SDK 的高级 API 统一返回ClientResult成功为{ ok: true, ...数据 }失败为{ ok: false, code, error }错误码覆盖NOT_FOUND、BAD_REQUEST、RATE_LIMITED、SERVER_ERROR、NETWORK_ERROR、TIMEOUT、ABORTED、INVALID_RESPONSE并标注是否可重试完整模型与取消/超时归类规则见 error-model.md。多页请求失败时会保留已取回的部分resources与pagination便于降级展示。七、使用要点小结分页从page1逐页推进pageSize建议不超过1000并始终检查pagination.complete深分页offset 超过约 1 万条会收到400此时改用after/before时间窗切片查询语义字段间 AND、字段内 ORsearch会覆盖includekeyword全命中、exclude命中即剔除按需取字段tracker、metadata默认不返回需要 magnet tracker 或anipar解析结果时显式传trackertrue/metadatatrue详情兜底/detail/{provider}/{id}与/detail/infohash/{hash}的400/404都应按无效输入或未找到处理成功结果有 24 小时缓存max-age86400不适合秒级刷新场景Collection 翻页collection 端点只给第一页每 filter 至多 1000 条继续取数请用filters[i].searchParams回查/resources迁移注意旧的顶层complete字段已删除所有完成度判断都改读pagination.complete。以上端点、参数与响应结构的原始出处是仓库内的接口参考文档 api.md可复现的请求样例集中在 examples/api.http分页与错误模型的补充文档见 pagination.md 和 error-model.md。赞分享后端前端网页爬虫MCP 服务AI 技能【免费下载链接】AnimeGarden動漫花園 镜像站 | 动画 BT 资源聚合站 | 动画 BT 资源开放接口项目地址https://gitcode.com/gh_mirrors/an/AnimeGarden点击查看免费下载相关推荐CoolQ HTTP API 接口详解与使用指南CoolQ HTTP API 接口详解与使用指南 项目概述 CoolQ HTTP API 是一个为 QQ 机器人框架 CoolQ 设计的 HTTP 接口插件它CoolQ HTTP API 接口详解与使用指南CoolQ HTTP API 接口详解与使用指南 项目概述 CoolQ HTTP API 是一个基于 HTTP 协议的 QQ 机器人接口允许开发者通过 HTTbk-cmdb 根据 ID 列表拉取缓存资源详情list_cached_resource_by_ids接口实战指南bk cmdb 根据 ID 列表拉取缓存资源详情list_cached_resource_by_ids接口实战指南 本文面向蓝鲸智云配置平台bk cmdb后端企业应用运维创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考