案例二:万象云档书目速查
万象云档书目速查是把一个现有内容站点(wanxiangyundang.top,一个 BookStack 电子书站点)做成 GenUI 小工具的实战。它最大的价值在于演示了「已有网站如何合规地变成小工具」——答案是内置数据快照,而不是套壳跳转。
起点:一个被否决的直觉
最初诉求是「把网站直接做成小工具」。但平台明确禁止外链 / iframe / 跳转(development-rules),「直接打开网站」被判违规。于是路线调整为:把网站的核心数据抓成快照,在本地做搜索/筛选,结果以「复制链接」交付给用户。
数据通道:能用的源
站点没有公开的 REST API(/api/* 会 302 跳登录需 token)。可用数据源是:
sitemap/books-0.xml:约 2960 条图书 URL;- 分类探索页
/explore?cid=X&page=N:每页 24 本,a.book-card上的title属性带书名。
据此写了抓取脚本,产出一份离线快照 data.json:15 个分类 × 前 30 本 = 440 本,约 29.8KB,直接打进产物。
形态 A 骨架照搬
小工具采用形态 A(画布 + 操作区):照搬官方 layout.html 骨架,搜索框与分类 chips 放在操作区,主画布展示书目列表。顶部表头用 cos-icon 图标(如 cos-icon-refresh 做重置、cos-icon-info-source 做功能说明 tooltip)。
关键合规写法:剪贴板复制
用户点某本图书时,工具不跳转,而是把该书直达链接写入剪贴板,由用户自行去浏览器粘贴打开:
function copyBook(slug, name) {
var url = SITE + '/books/' + slug;
sendLog('custom');
if (navigator.clipboard && typeof navigator.clipboard.writeText === 'function') {
navigator.clipboard.writeText(url).then(function () { done(true); });
}
}
这里用到了第三章讲的两点:剪贴板写入合规(读取才被禁) + sendLog 调用前判存在性。
验证
genui check通过(exit 0);genui preview起端口,用无头 Edge 截图核对布局正常;cos-icon在平台外显示为方块属正常现象,不影响平台内渲染。
边界说明
快照是「离线书目速查」,数据不含站内全文,且需定期刷新(站点上新后重新抓取快照)。它解决的是「快速找到某本书的直达链接」,而不是「在小工具里读完整本书」——后者本就不是小工具的定位。
小结
万象云档案例证明:已有网站做成小工具的正确姿势 = 内置数据快照 + 本地搜索筛选 + 剪贴板交付,而不是套壳外链。这条路线可复制到任何「内容检索类」需求。
