搜索你想找的开源项目

输入名称、用途或关键词,也可粘贴 GitHub 仓库链接

分享到微信

当前解读页的微信分享二维码

用微信扫一扫打开,点击右上角「···」分享给朋友或朋友圈。

手机上可截屏后,在微信扫一扫中从相册识别二维码。

luobinger/PerkRadar

效率与系统工具

定时抓取多个固定公开源的免费与限时优惠线索,存入 SQLite 并在网页看板中搜索、筛选和收藏。

434
83
TypeScript
MIT
创建于 4 天前

项目介绍

PerkRadar 是一个自托管看板:它定时从固定的公开 RSS、Atom、JSON 和 Markdown 来源读取标题、原文链接与短摘要,写入轻量 SQLite 数据库,再在网页中提供搜索、来源与分类筛选、排序、收藏和标记已领。适合想自己维护一份优惠线索、而不是依赖某个购物站点推荐的人。

它的定位是线索收集,不是领取平台。一条记录只表示来源曾经返回该内容,活动是否仍有效、领取条件、账户额度都没有核实,原文页面才是最终依据。

快速使用

条件:Node.js 22 或更高版本(项目使用内置的 node:sqlite)、npm;Docker 方式需要 Docker Desktop 或兼容 Compose v2.24 以上的环境。

本机推荐用 Docker:

docker compose -p daily-free-info up -d --build

然后打开 http://127.0.0.1:38471/,或先检查健康状态:

curl -sS http://127.0.0.1:38471/api/health

数据保存在 ./data 中。根目录 .env 可选,只有需要 Jina 鉴权时才配置 JINA_API_KEY,或用 JINA_API_KEY_FILE 指向挂载进容器的密钥文件。宿主端口被占用时只改宿主端口:HOST_PORT=38481 docker compose -p daily-free-info up -d --build,再访问 http://127.0.0.1:38481/。

开发方式为 npm ci && npm run dev,然后访问同一端口;/demo 布局预览只在开发环境提供。

来源与分类

七个来源固定写在 source-defs.ts 中,应用调用方不能替换:LINUX DO、V2EX 推广、Epic 免费游戏、NodeSeek、小众软件、果核剥壳、异次元软件世界。综合 RSS/Atom 来源保留 7 天窗口并限制链接域名;Epic 条目按免费促销结束时间过期。单个来源失败不影响其他来源,请求超时 25 秒,链接入库前会校验并规范化。

分类由标题关键词决定,不是人工审核,因此分类不能当作领取资格或优惠真实性的证明。首页“全部”视图默认隐藏“其他”分类,切换后可查看,且不会删除数据库记录。来源边界和验收规则见数据质量文档。

刷新与新鲜度

调度器运行在 Node 进程内:启动约 4 秒后抓取一轮,之后每 2 小时一轮。关闭 Docker 或电脑休眠会停止抓取,恢复后不补抓错过的轮次。手动刷新与定时刷新共用进程内锁,有 60 秒冷却,并限制同一 IP 在 10 分钟内最多触发 8 次。最近一轮超过 2.5 小时标记过时,超过 4 小时标记严重过时。程序本身不发送邮件或聊天通知。

POST /api/refresh 完成时返回 200,已有刷新在运行时返回 409,冷却或限流时返回 429。

使用约束

收藏和已领状态只保存在浏览器 localStorage 的 daily-deals-personal-v1 和 daily-deals-show-all-v1 中,清除站点数据就会丢失。刷新接口没有登录或 token 认证,只靠同源检查和限流,因此服务默认绑定 127.0.0.1;公网部署前必须补反向代理、TLS、身份认证和刷新接口访问控制。生产容器以非 root 的 node 用户运行,宿主 ./data 必须对容器内 uid 1000 可写。运行中的 SQLite 只能用一致性方式备份,不能只复制 deals.db。项目本身是 MIT 许可,但来源站点的内容和条款不受该许可覆盖。

HotRepo 点评

PerkRadar 在 2026-11-10 进入 HotRepo 新项目榜,记录时为 119 Star,在约一小时的统计窗口内净增 17 Star,暂无 GitHub 全部语言日榜名次记录。文档对边界交代得比较清楚:来源失败隔离、过时阈值、关键词分类和未鉴权的刷新接口都写明了,读者能据此判断适用性。相应地,固定七个来源和标题匹配分类决定了覆盖面较窄,收藏状态仅限当前浏览器,跨设备不会同步。

本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。