对 https://ai.xinhuoshixiao.com/ 的完整拆解:整站前端已归档(287 个文件 / 4.38 MB),634 个接口已枚举出路径和 HTTP 方法,其中只有 4 个不需要登录。
- 报告页:打开
- 归档清单 + 公开数据:
/api/summary - 完整接口地图:
/api/endpoints - 读归档的原始前端文件:
/api/file?path=/assets/index-cz1CwIkA.js
站点真名 薪火AI创作平台(域名 ai.xinhuoshixiao.com,页面 <title> 只写 XHSX)。不是工具导航站,是一整套多租户 AI 内容创作 SaaS:AI 对话、绘图、口型同步、小说、短剧分镜、数字人、课程/学校、积分商城、市场分成、支付充值、平台管理后台,一应俱全。
| 维度 | 情况 |
|---|---|
| 前端 | Vite + React 18 SPA,Tailwind 系样式,axios(baseURL: "/api"),285 个懒加载分包 |
| 服务端 | nginx 反代,响应统一为 {code, message, data, timestamp}(典型 Java/Spring 风格) |
| 鉴权 | 短信验证码 + 微信登录(emailPassword/emailCode/schoolLogin 均为 false),JWT + refresh token |
| 商业模式 | commerceEnabled: true,有会员套餐、充值、订单、提现、对账、卡密兑换 |
| 多租户 | 有 tenants(租户)、teams(团队)、school(学校/班级/院系)三套组织体系 |
| 项目 | 数量 | 说明 |
|---|---|---|
| 前端文件 | 287 | HTML 壳 + 285 个 JS 分包 + 1 个 CSS,共 4.38 MB,全部存进本 val 的 blob(键前缀 mirror/) |
| 接口 | 634 | 带 HTTP 方法:GET 287 / POST 288 / DELETE 76 / PUT 74 / PATCH 42 |
| 公开接口 | 4 | 无需登录,见下 |
| 其余接口 | 630 | 一律 401 Unauthorized |
那 634 条不是靠猜路径试出来的,是从每个分包的 axios 调用点里正则提取的,所以每条都带出处分包(报告页每条下面都标了)。
| 接口 | 返回 |
|---|---|
/api/public/site-info | 站名、图标、commerceEnabled、homeEnabled、模板名 |
/api/auth/methods | 开启的登录方式:短信验证码 ✅、微信 ✅,其余 ❌ |
/api/auth/register/info | isFirstUser、needCode |
/api/drama/art-styles | 15 条画风预设,每条带完整提示词(prompt)和缩略图 |
/api/drama/art-styles 是唯一漏出来的业务数据,含 15 条完整画风提示词(古装真人、赛博朋克、国风水墨、迪士尼、韩漫唯美…),报告页「公开数据」标签页里有全文。
monitor.ts 是个 interval 任务,每天 09:00(北京时间) 跑一次:只读那 4 个公开接口,存一份当前快照,和上一次比对,有变化就记进历史。
盯的是这几项:
| 项目 | 为什么值得盯 |
|---|---|
| 登录方式开关 | 邮箱 / 短信 / 微信什么时候被关掉或打开 |
| 注册是否需要邀请码 | needCode 变化说明在收紧还是放开注册 |
| 站点名 / 模板 / 商城开关 | commerceEnabled 变 false 说明停售 |
| 画风预设 | 新增、删除,或某条画风的提示词被改写 |
数据落在 blob:
monitor/latest.json ← 当前快照
monitor/history.json ← 变更历史(只在有变化时追加,最多 500 条)
monitor/status.json ← 每次运行的状态,用来确认 cron 还活着
报告页「配置监控」标签页有可视化:当前登录方式开关、累计运行次数、变更时间线。
抓取失败时不会覆盖 latest.json,只记错误 —— 避免一次网络抖动把好数据冲掉。
| 模块 | 前缀 | 内容 |
|---|---|---|
| 登录注册 | /auth/* | 邮箱/短信/微信/学校登录、注册、改密、refresh |
| 用户 | /user/*、/member/*、/points/* | 资料、会员、积分、签到、等级 |
| 短剧(最重) | /drama/* | 项目、剧集、画布节点、Seedance 2 分镜映射、音频槽位、合成导出 |
| 小说 | /novel/* | 项目、章节、续写 |
| 陪练/教练 | /coach-sessions/*、/coach-templates/* | 会话、流式对话、记忆、模板短语/片段 |
| 课程 | /courses/* | 课程、章节、课时、进度、看板、异常 |
| 市场 | /market/* | 作品包上架、审核、举报、分成 |
| 卡密 | /cards/* | 批次、兑换、导出 |
| 管理后台 | /admin/* | 用户、订单、会员、租户、团队、学校、积分、提现、日志、错误中心、内容同步 |
| 控制台 | /console/* | 站点配置、菜单、套餐、支付、对账、登录方式、功能开关、模型厂商 |
| 其他 | /gallery/*、/blog/*、/ai-models/*、/asset/*、/knowledge/*、/memory/*、/canvas/*、/user-robots/* | 画廊、博客、模型、素材、知识库、记忆、画布、机器人 |
完整 634 条见报告页「接口地图」标签页,支持按方法筛选和路径搜索。
c/:slug c/:slug/:id chat embed/:id image lipsync assets knowledge
drama drama/:projectId drama/:projectId/canvas novel novel/:projectId
member blog blog/:id courses course/:id course/:id/dashboard
point-rank profile profile/robots/:robotId/workbench profile/orders
profile/points profile/training memories robots robots/new
robots/:id robots/:id/edit skill-store market market/:id
profile/market profile/market/publish teams/join/:inviteCode teacher
change-password login wechat-callback home school-site gallery
canvas-templates version-logs coach-lab market-review console site
login-methods home-config payment plans models features recharge
reconciliation audit-logs menus liveness/callback admin users orders
members tenants school points teams ai-models withdrawals content
system system-monitor error-center logs
除上面 4 个接口外,全部返回 401。也就是说:博客文章、课程内容、画廊作品、市场作品包、模型列表、套餐价格、用户数据、短剧项目 —— 这些都在登录墙后面,没有账号拿不到。
想继续往下扒,两条路:
- 给我一个已登录的 token。 在浏览器登录后打开 DevTools → Network,随便点一个请求,把
Authorization: Bearer eyJ...的值发我(或者直接给access_token的 localStorage 值)。有它我就能把/api/blog/posts、/api/courses、/api/market/packs、/api/ai-models、/api/console/plans这些全量拉下来归档。 - 自己跑。
harvest.ts里get()加一个Authorization头,把publicPaths换成想拉的路径,重跑即可。
⚠️ token 等同于账号密码,只在你自己信任的环境里用;我不会把它写进代码或存进 val。
Rendering mermaid diagram...
index.ts ← Hono 后端:报告页 + 4 个数据接口
harvest.ts ← 抓取脚本(可重跑,会覆盖)
monitor.ts ← 定时监控(interval,每天 09:00 CST)
frontend/
root.tsx ← HTML 壳
index.tsx ← React 入口
components/
App.tsx ← 报告 UI(概览 / 接口地图 / 归档文件 / 配置监控 / 公开数据)
blob 存储(本 val 私有):
manifest.json ← 归档清单:287 个文件的路径与体积
api-map.json ← 634 条接口:路径 + 方法 + 出处分包
public-data.json ← 4 个公开接口的完整原始 JSON
mirror/index.html ← 原站 HTML 壳
mirror/assets/* ← 285 个 JS 分包 + 1 个 CSS
monitor/latest.json ← 当前配置快照
monitor/history.json ← 配置变更历史
monitor/status.json ← 监控运行状态
直接 Run harvest.ts。它会重新拉一遍原站、覆盖归档和接口地图。原站前端文件名带哈希,发版后哈希会变,重跑就能跟上。
这份归档是公开可访问的前端静态资源(任何人打开浏览器都能拿到)和接口路径清单,不含任何用户数据或密钥。但整站复制他人前端代码用于公开发布,涉及对方著作权;接口地图用于对自己账号下的数据做备份没问题,用来批量抓取他人数据则可能违反对方条款。自己评估用途。