Show HN:在全球燃油危机中追踪 Costco 的加油站价格

查看原文 HN 讨论

文章摘要

作者 Jack(HN 上的 lafond)住在坦帕,家几乎正好在两家 Costco 中间。多年来他每次加油都要在脑子里算同一道题:这周哪一家更便宜?问题是 Costco 从不在任何地方集中公布油价,官网把价格埋在各个仓储店的独立页面里,而他家附近这两家的定价又很少一致。Costco 的汽油是出了名的引流亏本品,通常比周边加油站低 15 到 20 美分——这个差价足以让绕路划算,却不足以让两家 Costco 之间的选择变得显而易见。2026 年春天油价一路攀升,他开始好奇:Costco 的价格是不是也在以同样的速度涨?如果油价继续涨,Costco 还撑得住把汽油当亏本引流品吗?没有现成的历史数据能回答,于是他自己造了一个。

抓数据的部分作者自嘲是整个项目里最容易的一环,「我倒希望能像 Waffle House 那个项目一样讲点酷炫的逆向手法,可惜 Costco 几乎没给我任何阻力」。他先翻到一个叫 AjaxGetGasPricesService 的接口,输入是用下划线拼接的仓储店 ID 列表(他吐槽用下划线当数组分隔符是个有趣的选择)——有用,但缺地理位置信息。再往下挖找到了真正想要的 AjaxWarehouseBrowseLookupView:按经纬度查询附近仓储店,加上 populateWarehouseDetails 参数后,响应里塞满了几乎所有你想知道的信息——地址、营业时间、提供的服务、有没有美食广场(作者特意加了两个感叹号),当然还有油价。

唯一的麻烦是这个接口每次最多返回 50 家、按距离排序。要覆盖全国约 600 家 Costco,他的办法很朴素:在地图上铺一张 3 度间隔的经纬度网格(纬度 25 到 50,经度 -125 到 -65),逐点扫描,再按仓储店 ID 去重,另外手工补上安克雷奇、费尔班克斯、火奴鲁鲁和卡胡卢伊四个点覆盖阿拉斯加与夏威夷。用 httpx 异步并发(带信号量限流、失败自动重试),整轮扫描不到 60 秒就能拿到全美所有 Costco 加油站的当前价格、地址和坐标。

存储选了 TimescaleDB——这本质上是个时序问题:同样 600 家店反复采样、永远保留历史读数。它是 Postgres 的扩展,作者能沿用熟悉的查询语言和工具链,还免费、上手快。前端是一个 Next.js 应用配 Tailwind,部署到 Cloudflare Workers(他说为此跟 Cloudflare 搏斗了一个略微恼人的下午)。他还特意给每个追踪的加油站建了独立页面并允许搜索引擎收录,这样下次有人站在 Costco 停车场里纠结该开去哪一家时,可以直接搜出来,而不用像他一样去逆向一个 API。

数据结论:在追踪的 159 天里,Costco 一共做了 39,112 次单店调价,平均每天 246 次;降价 21,102 次对涨价 18,010 次,净多出约 3,092 次降价。月度均价从 5 月的 $4.58 跌到 6 月的 $4.06、7 月 $4.04,8 月又回升到 $4.15。图表上标注了几个关键节点:6 月 17 日美伊达成协议、7 月 2 日协议破裂、7 月 23 日油轮再遭袭击、8 月 13 日胡塞武装袭击油轮。最便宜的州是印第安纳($3.19)、得州、俄克拉荷马、路易斯安那、田纳西;最贵的是加州($5.27)、华盛顿、内华达、俄勒冈、爱达荷。他的结论是:即便强大如 Costco 也逃不过霍尔木兹海峡的摆布,一家把汽油当作零头的公司最终还是得跟着市场走——只是慢一点。

文章的结尾是个自嘲的反转:花了几个月打磨这套「省下几分钱」的系统之后,他把 CRV 换成了 Tesla Model Y,如今每月车贷的增量远超他一辈子追逐 15 美分差价能省下的钱——「就在我终于有了基础设施来回答『我该去哪家 Costco』的那一刻,我让这个问题对我个人永久性地失去了意义」。8 月 25 日的更新说,帖子上 HN 之后他又搞定了美国以外的追踪,加拿大、墨西哥、澳大利亚、日本、英国和台湾现在都支持了。

HN 评论精华

这条 Show HN 拿到 128 分。技术层面的讨论其实不多,评论区绝大部分注意力落在了三件事上:Costco 加油站的排队与定价机制、「全球燃油危机」这个标题是否夸张,以及各种替代数据源。