方法论
价格从哪来
套餐价格、配置和库存状态只取自服务商官方页面和官方价格 API。每行套餐都记录确切的 source_url 和 checked_at 日期。第三方目录(如 FindHost,CC BY 4.0)只用于服务商级元数据,例如总部所在国、地区和官方网址 —— 从不用于价格。
每次检查都会向只追加的观测日志(data/price_observations.json)追加一行:观测从不被编辑或删除,所以历史低价和中位价仅凭 git 就能复现。未通过验证的行进入复核队列( data/review-queue.json,由构建期校验器生成)并被标记等待人工复核 —— 绝不会被静默自动改正。
归一化计算
原生价格才是事实:金额、币种和计费周期,与服务商公布的完全一致。为了排序和跨套餐比较,我们另外推导一个月均等值:
monthly_equivalent = native_price / billing_period_months × fx_rate(currency → USD)
计算示例 —— RackNerd 1 GB KVM VPS,$21.99/年:
$21.99 / 12 months × 1.00 (USD) = $1.8325/mo → displayed as "≈ $1.83/mo"
任何换算值都带「≈」标记。我们从不把原生周期价直接显示成「/mo」—— $21.99/year · ≈ $1.83/mo,绝不用「$21.99/mo」作为年付价格的标签。
续费与今日应付的语义
今日应付 是买家结账时为首期实际支付的金额。它是记录下来的数据,从不计算得出:$1.99/mo 按年计费的套餐记录今日应付 = $23.88(12 × 1.99),而 $21.99/year 的套餐记录今日应付 = $21.99 —— 周期达到一年或更长时,宣传价就是预付金额。来源没有给出金额时,今日应付显示为 Unknown。
续费 是首期之后的价格,有独立的币种和计费周期(renewal_price, renewal_currency,
renewal_period)。续费已知时,我们还会相对宣传的月均等值计算续费涨幅 —— 例如 $9.99/mo 首期、$16.99/mo 续费,就是 +70%。续费价未公布时,该行显示 续费:未知;绝不默认等于首期价。
验证等级
每个价格都带证据等级。促销页抓到的价格绝不能标成 checkout verified,所以等级链严格,且图标始终与标签并排显示:
- 1. 🟢 结账已验证
- 一笔购买走完了最后的结账步骤,实际扣款金额(含今日应付和安装费)已被记录。最高等级。
- 2. 🔵 官方商店已验证
- 价格取自服务商自己的下单/商店系统(配置器、购物车 API),未登录状态。
- 3. 🔵 官方页面已验证
- 价格取自公开的官方定价页或官方价格 API。当前试点的所有行都处于这一级。
- 4. 🔵 官方促销已核实
- 取自官方促销或活动页。明确不是 checkout verified:促销页宣传的首期价可能随时失效,且不会另行通知。
- 5. 🟡 社区报告
- 由用户或第三方报告。绝不排在官方抓取之上;只在它是唯一证据时展示,并明确标注。
- 6. 🟡 历史数据
- 抓取时已验证、但页面此后更改或消失的价格。仅作历史保留,绝不当作当前价展示。
- 7. ⚪ 未知
- 无法建立证据等级。该行标注 Unknown,并从要求已验证价格的排名中排除。
当前试点的所有行都取自官方定价页和官方 API(🔵 官方页面已验证);还没有一行走过结账验证。
Unknown 的含义
Unknown 优于填错。官方来源没有公布的字段,就显示字面量「Unknown」—— 不是空单元格,不是占位符,更不是伪装成数据的猜测。第三方来源与官方页面冲突时,该行暂停发布,直到一次新的官方来源检查解决冲突。会被 Unknown 污染的优惠分组件,也会把这个字段排除在外。
优惠分怎么算
优惠分是五个分量的透明加权和,各自归一化到 0–1。「70% OFF」这类商家横幅不参与打分 —— 只有记录下来的观测才算数。
deal_score = 0.40 × discount_vs_median
+ 0.25 × historical_low_proximity
+ 0.15 × renewal_penalty
+ 0.10 × spec_value
+ 0.10 × freshness - discount_vs_median (0.40)
- (median − current) / median,截断到 [0, 1]。奖励当前价低于自身近期观测中位价的套餐。
- historical_low_proximity (0.25)
- 1 − (current − low) / (high − low);1 = 处于历史低价,0 = 处于最高价。high = low(只有一条观测)时该分量取 0.5。
- renewal_penalty (0.15)
- 1 − 续费涨幅比例,截断到 [0, 1]:续费等于首期得 1,续费涨 100% 得 0,续费未知得 0.5。
- spec_value (0.10)
- 该套餐每 GB 内存的美元价格在全数据集中的排名(1 = 每 GB 最便宜)。内存未知的套餐在该分量得 0。
- freshness (0.10)
- 该行最近一次检查的时效等级(见下文):fresh = 1.0,recent = 0.8,needs review = 0.5,stale = 0.2。
数据集里每个套餐只有一条观测时,多数分量都是中性值,总分围绕基线浮动。这是诚实的:只有一个数据点,就还不存在优惠 —— 结构摆在这里,是为了让历史随着复查累积逐渐增强信号。
汇率快照策略
美元等值使用手动刷新快照中的近似汇率(data/fx_rates.json,日期 2026-09-10)。汇率只用于排序和跨币种比较 —— 每行的原生币种金额永远是权威价格,且每个换算值都标「≈」。快照略旧不影响排序;它绝不会被当成报价。
时效等级
一次价格抓取只是对一个随时可能变化的页面的快照,所以每个已验证行都带一个机械计算的时效徽标,由其最近检查日期得出:
- 新 —— ≤ 1 天
- 今天或昨天检查;得 1.0
- 较新 —— ≤ 7 天
- 本周内检查;得 0.8
- 待复核 —— 8–30 天
- 该复查了;得 0.5
- 过期 —— > 30 天
- 所有数字都按历史对待;得 0.2
促销价行显示更严格的一档:过期页面上的折扣价是最不可信的组合,所以徽标永远不会比证据本身更好看。
联盟政策
部分链接可能是联盟链接。通过它们购买时,VPSLedger 可能获得佣金,你无需多付一分钱。联盟关系不影响排名和验证:上文的优惠分、排序和验证等级都只由记录的数据计算得出,我们也不接受任何付费位次。
构建期生成、版本化管理的数据
整个数据集以 JSON 形式放在公开的 GitHub 仓库里,每次构建都由 zod schema 校验。本站完全静态:构建通过,你看到的数字就是该 commit 里仓库中的数字。