属性与磨损分桶的构建方式
属性价格接口上按属性(磨损 / 渐变 / 图案)分桶的构建方式,以及为什么各市场的分桶宽度不同。
分桶并非 SkinPricer 自创的划分。每个市场都按该市场自身的数据分段方式分桶,再对齐到标准的 CS2 外观磨损区间。
buff163:Buff 自己的原生磨损区间
我们接入的是 Buff 的原生磨损数据流,因此磨损分桶就是 Buff 自己的非等宽区间(不是固定宽度)。各外观等级的区间如下:
steamcommunity、marketcsgo、csfloat、dmarket:等宽 0.01 分桶
这些市场在 0 到 1 上使用等宽 0.01 的分桶:bucketIndex = floor(floatValue * 100)、min = index/100、max = (index+1)/100。例如 Steam 上的久经沙场为 0.15 到 0.16、0.16 到 0.17、…、0.37 到 0.38——比 Buff 更细,且是不同的方案。切勿假设各市场分桶宽度一致。
通用规则
外观裁剪:每个磨损分桶都限定在该饰品的外观磨损区间内,分桶绝不跨越外观边界。区间为半开区间 [min, max)(minInclusive: true,maxInclusive: false)。
除磨损外,饰品还会按渐变百分比、图案 / 模板层级分桶(多普勒相位与宝石会作为变体 / tag 分桶出现)。一个分桶可同时携带磨损+渐变的组合区间。
请始终读取每个分桶的 dimensions 对象获取精确的 min/max 与开闭性;不要从分桶标签推断边界,因为各市场宽度不同。
你们的分桶与其他 API 相比如何?
它们不是一套统一方案。我们镜像每个市场自身的分段方式:Buff 的分桶非等宽,而 Steam 等市场是等宽 0.01。请基于 dimensions.float.min / dimensions.float.max 归一化,而不是跨市场匹配标签。
这些分桶支撑着 /v1/attribute-prices/latest、其历史接口,以及 buff163 专属的 latest / history。