svcd 是一个 SimpleCD/VeryCD 数据库阅读器,源自个人兴趣驱动的中文互联网数字考古。它用 Go 重写了旧版 SimpleCD 的核心浏览功能,并以只读方式打开 SimpleCD Desktop 的 SQLite 数据库。它支持多字段搜索、分类浏览、分页、资源详情和历史评论,也可以逐条或批量复制数据库中的 ED2K 链接。
界面使用嵌入 Go 二进制的原生 HTML、CSS 和 JavaScript,不依赖 Node.js、外部字体、CDN 或前端构建工具。
svcd 是一个刻意含混的名字:它既可以理解成 Simple VeryCD 或 Super VeryCD,也故意借用了 Super Video CD 的缩写。这个撞名是对它所来自的互联网与数字媒体时代的小小玩笑。
SimpleCD 是一个围绕 VeryCD 数据建立的开源项目。原项目自称「山寨版的 VeryCD」,包含抓取 VeryCD 条目的 Python 脚本、基于 web.py 和 SQLite 的网站代码,后来还发布了 Windows 桌面版,使这些资源条目与链接可以在 VeryCD 站点之外保存和浏览。
svcd 面向 SimpleCD Desktop 最后版本所使用的本地 SQLite 数据库,为这些历史数据提供适合今天使用的搜索和阅读界面。
SimpleCD 数据库保存了从 VeryCD 收集的历史条目,其数据来源、转载关系与版权状态复杂且可能存在争议。svcd 原样呈现数据库的结构和字段,不清洗或修正记录,也不替这些记录作合法性判断。
本项目不包含 SimpleCD 数据库、VeryCD 条目或任何资源文件。svcd 不抓取网站,不连接 ED2K 网络,不验证链接是否仍然有效,也不下载或托管链接指向的内容。复制 ED2K 链接只是复制数据库中已经保存的文本字段,是阅读归档数据的一部分。
需要 Go 1.25 或更高版本,并自行准备 SimpleCD 项目发布的最后一个数据库版本,即 SimpleCD Desktop 0.1.2d 目录中的 verycd.sqlite3.db 和 comment.sqlite3.db。这些数据库不随本项目分发。svcd 默认在以下路径查找资源数据库:
simplecd-desktop-0.1.2d/simplecd/verycd.sqlite3.db
评论数据库会从资源数据库所在目录自动读取。HTTP 服务启动后,svcd 会在后台建立评论热度索引,并显示开始与完成提示;索引未就绪时页面暂时隐藏「评论最多」,其余功能可以立即使用。这项统计每次启动只执行一次,后续搜索直接使用内存中的结果。缺少 comment.sqlite3.db 时仍可浏览资源,详情页不会显示评论。
先构建单一可执行文件:
make build数据库位于默认路径时可以直接启动:
./svcd默认监听所有 IPv4 网络接口。启动信息会列出本机及局域网中实际可访问的 IP 地址。只允许当前机器访问时使用:
./svcd -local按下 Ctrl+C 或发送 SIGTERM 会停止接收新请求,并最多等待 10 秒让正在处理的请求完成;关闭过程中再次发送信号可以立即强制退出。
也可以显式指定数据库或监听地址;-local 会保留端口并将主机地址改为 127.0.0.1:
./svcd -db /path/to/verycd.sqlite3.db -listen 127.0.0.1:8080对应的环境变量是 SVCD_DB、SVCD_LISTEN 和 SVCD_LOCAL,其中 SVCD_LOCAL=true 等同于 -local。命令行参数优先于环境变量。为了避免意外修改历史数据,数据库始终以 SQLite mode=ro 和 immutable=1 打开。
搜索框会同时匹配:
- 标题
- 摘要
- 一级与二级分类
- 资源状态
- 精确的 VeryCD topic ID
空格分隔的多个关键词采用「全部满足」的规则,每个关键词可以命中任意一个上述字段。例如 纪录片 BBC 会查找同时包含这两个关键词的资源。
搜索结果与分类浏览默认按更新时间倒序排列;评论数据库可用时,也可以切换为「评论最多」,按历史评论数量观察当年的讨论热度。评论数相同时仍按更新时间和 VeryCD topic ID 倒序排列。
页面侧栏按数据库中的一级分类组织内容;点击一级分类会展开其二级分类,并显示各层级的资源数。分类页的搜索框可以明确选择「当前分类」或「所有分类」,搜索、分页以及从详情页返回都会保留目录位置和搜索范围。
运行完整检查:
make check数据库访问代码由 ent 生成。修改 ent/schema/ 下的定义后重新生成:
make generatesvcd 只读打开现有的 verycd.sqlite3.db 和同目录下的 comment.sqlite3.db,不会在启动时执行 ent migration。旧版协作功能使用的 lock.sqlite3.db 不会被读取。
