尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

streetmerchant 项目背景与定位:从 2020 显卡抢购潮走出的开源库存监控工具

streetmerchant 项目背景与定位:从 2020 显卡抢购潮走出的开源库存监控工具 streetmerchant 项目背景与定位从 2020 显卡抢购潮走出的开源库存监控工具【免费下载链接】streetmerchant The worlds easiest, most powerful stock checker项目地址: https://gitcode.com/GitHub_Trending/st/streetmerchant导读本文以 streetmerchant 官方文档 docs/about.md 为主线还原这个开源项目诞生的真实背景——2020 年 9 月 17 日 Nvidia 官网在发售后瞬间从Notify Me变为Out of Stock的事件并深入剖析其核心定位它不替你下单但让你从手动刷新网页中解放出来。阅读本文后你将理解 streetmerchant 的设计初衷、它在当前仓库中的实际功能形态持续库存检测、自动加入购物车、多渠道通知以及如何通过源码与配置印证这些能力。背景2020 年 9 月 17 日的显卡抢购事件2020 年 9 月 17 日上午 9 点美东时间Nvidia 官网的 RTX 30 系显卡页面在瞬间从Notify Me变成了Out of Stock。但真正的原因并非卖完了——商家根本没有上架销售。由于大量用户同时涌入点击服务器不堪重负Nvidia 直接关闭了这些第三方店铺页面的 API 访问。随后该页面曾短暂恢复但同样的场景再次上演API 请求过载导致服务器再次瘫痪。这一事件是 docs/about.md 记录的整个项目原点。对普通消费者而言它意味着一个残酷的现实仅靠人工刷新网页在热门硬件发售初期几乎不可能抢到商品。定位不替你下单而是让蹲守这件事变得无压力streetmerchant 正是为应对上述场景而生。官方文档反复强调一个边界见 README.md 与 docs/about.mdFirst and foremost, this service will not automatically buy for you.streetmerchant 不会自动完成购买它的职责是在你处理日常工作生活的同时自动化地、持续地刷新并检查目标网站把原本需要人肉盯着的重复劳动变成后台任务。项目作者在 about.md 中提到当时有人为了买一张显卡请假、错过约会、放弃正常生活——而 streetmerchant 的出现就是希望把这种抢购焦虑降下来。随着项目演进监控范围也从显卡扩展到了 CPU、游戏主机PS5 / Xbox / Switch 2、智能门铃等更多品类可参见 CHANGELOG.md 中持续新增的产品系列以及 src/store/model/store.ts 中定义的Series类型。三大核心特性与源码印证README 将项目能力概括为三点每一处在源码中都有对应的实现支撑1. 持续不间断地检查库存streetmerchant 声称 runs 24/7, 365。入口 src/index.ts 中loopMain()启动后会对 storeList 中的每家商店注册tryLookupAndLoop循环每次查询完成后按照该商店的睡眠时间getSleepTime(store)安排下一次查询形成无限循环若某次查询抛出异常也会在 5 秒后自动重置重启。整套程序只有收到SIGINT、SIGQUIT、SIGTERM信号时才会退出。在 src/store/lookup.ts 中单次查询流程lookup函数大致是按需执行linksBuilder动态抓取商品链接列表fetchLinks逐条访问商品 URLpage.goto默认等待networkidle0通过isItemInStock结合商店定义的标签labels判断是否缺货 / 有货 / 触发验证码 / 超过最高限价命中后按配置发送通知、截图、打开浏览器或自动加入购物车。2. 就绪即下单加入购物车并打开浏览器当商品有货时如果配置了AUTO_ADD_TO_CART对应 dotenv-example 中的环境变量程序会优先跳转到该商品链接对应的cartUrl见 src/store/lookup.ts 中lookupIem的逻辑若设置了OPEN_BROWSER还会调用open()帮你把浏览器打开到结算页。注意这仍然是帮你打开最终下单动作由你自己完成——与不自动购买的定位一致。3. 通知渠道众多Notifications galore通知管够不是虚言。src/messaging/index.ts 统一导出通知入口src/messaging 目录下实现了二十余种渠道桌面通知、Discord、Slack、Telegram、邮件SMTP、短信Twilio / FreeMobile / 运营商直发、Pushover、Pushbullet、Gotify、ntfy、MQTT、Redis、PagerDuty、飞利浦 Hue 灯光、Twitch、Twitter、Streamlabs、APNs 等。对应地dotenv-example 中提供了DISCORD_WEB_HOOK、TELEGRAM_ACCESS_TOKEN、PUSHBULLET、NTFY_TOPIC、REDIS_URL等一整套可选环境变量src/config.ts 中逐一解析。它监控什么商店与商品模型从 src/store/model/store.ts 的类型定义可以看出项目对商品的抽象每个Link由brand品牌、series系列、model型号、url商品页、cartUrl加购页、可选的labels该商品特有的在库判断标签与price组成。Store则封装了一家商店的完整行为labels在库/缺货/验证码/限价的选择器与文本、links商品列表、successStatusCodes成功状态码范围默认0-399、backoffStatusCodes触发退避的状态码默认403、waitUntil、minPageSleep/maxPageSleep、代理列表proxyList以及可选的linksBuilder动态生成链接与captchaDeterrent验证码干扰策略。仓库的 src/store/model 目录下保存着 150 家商店的适配文件如 amazon.ts、bestbuy.ts、newegg.ts覆盖美、加、英、德、法等众多国家和地区的零售商每家商店都声明了自己的国家、币种与标签规则。判断是否有货的标签机制isItemInStocksrc/store/lookup.ts是整个检测逻辑的核心按顺序执行若labels.captcha命中且配置了验证码处理服务则调用 captcha-handler.ts 尝试自动处理检查bannedSeller被禁商家标记→ 直接判为无货检查outOfStock缺货文案→ 判为无货再检查inStock有货标记要求可见requireVisible: true不命中则判为无货若配置了maxPrice最高限价则解析页面价格并对比MAX_PRICE_SERIES_{{series}}环境变量超价则跳过。这种先排除、后确认的顺序设计让不同商店的不同页面结构都能被精确适配也解释了为什么仓库需要为每家商店维护独立的标签配置。必要的运行前提根据 docs/getting-started.md上手运行 streetmerchant 需要 git 与 Node.js 16LTS或 Docker。基本流程为git clone https://github.com/jef/streetmerchant.git cd streetmerchant npm i npm run start更完整的做法是克隆后复制 dotenv-example 为dotenv按需编辑环境变量再执行npm run start使用 Docker 则可通过docker run -it --rm --env-file ./dotenv ghcr.io/jef/streetmerchant:nightly启动。所有环境变量均为可选项全部变量的取值说明可参考 docs/reference/application.md。程序启动后会加载dotenv配置文件并打印 ASCII 横幅见 src/config.ts 中的 banner 逻辑随后为每家商店创建独立的定时查询循环。小结streetmerchant 的诞生源于 2020 年显卡抢购潮中人力刷新不及服务器过载的真实痛点。它用明确的产品边界只监控、不代购和扎实的工程实现Puppeteer 无头浏览器 标签化库存判断 二十余种通知渠道 上百家商店适配把抢购这件事从令人焦虑的人工盯梢变成了一套可配置、可自动化、可持续运行的监控流水线。理解它的背景与定位是正确使用和二次开发这个项目的第一步。【免费下载链接】streetmerchant The worlds easiest, most powerful stock checker项目地址: https://gitcode.com/GitHub_Trending/st/streetmerchant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表