澳大利亚杂货价格数据库
这是一个澳大利亚杂货价格的开放数据库。其目标是追踪长期价格趋势,以帮助做出明智的购买决策,并促使杂货店对价格上涨负责。
该服务从 Woolworths 和 Coles 的网站读取杂货价格,并写入 influxdb 时间序列数据库。
未来,基于时间、动力等因素,它可能从其他澳大利亚杂货商处读取数据。
我需要帮助!
我设置了一个 grafana 实例来可视化收集的数据。但拥有一个更定制化的前端会非常好。如果你能帮忙,请告诉我。参见下方的 Frontend scope。
另外:托管此服务成本较低,但并非免费。如果你觉得这个项目有价值,请考虑通过 github 赞助支持一下。
类似项目
名为 Heisse Preise 的优秀项目最终实现了我希望 Auscost 实现的功能。它是 开源 的,并且 Wired 上有一篇很好的介绍文章。我认为可以从其 UI 中学到很多东西。
架构
该服务由三个应用程序组成:
- aus_grocery_price_database
- 该应用程序使用 golang 编写。从杂货店 Web API 读取数据,并将价格数据流式传输到时间序列数据库。
- InfluxDB2
- 一个时间序列数据库。高效存储带标签的数值信息,内置基本的数据探索和绘图功能。
- Grafana
- 一个功能更强大的绘图和仪表板应用程序,可以连接到时间序列数据库。
每个应用程序都在一个独立的 docker 容器中运行。每个容器都会将一些数据持久化到挂载到持久存储的 /data 目录中。
只有 Grafana 实例通过 主域名 对外公开。它有一个只读 API 令牌,用于从 InfluxDB 读取数据。AGPD 拥有只写令牌,用于向 InfluxDB 写入数据。
托管
这是为在 fly.io 上托管而设置的。我对在托管基础设施上投入精力使用营利性服务并不完全满意,但他们确实让事情变得简单明了。编写一个 docker-compose 来使其更具平台无关性会很容易。
发布
在 main.go 中提升 VERSION 的版本。如果提升 go 的版本,请确保在所有地方(fly.toml、go.mod、go.yml 等)都进行更新。将所有内容提交到 main,然后运行 ./tag_and_deploy_release.sh。
前端范围
当前的 grafana 前端是一个临时解决方案。理想情况下,它应被一个定制的前端所取代。Grafana 仍然可以在底层用于生成图表。
核心目标
该项目的主要目标是通过展示杂货价格信息,将权力平衡向消费者倾斜。用例包括:
- 基于周期性预测低价
- 例如,Woolworths 的脐橙价格在 2 周周期内波动
- 比较不同商店的价格
- 跟踪长期价格趋势
- 不被虚假的“促销”所欺骗,其中促销价格并不比长期趋势更便宜
该项目的另一个目标是低成本。这意味着最低限度的托管和维护要求。它需要简单且稳定。外部依赖最少,无论是内部软件栈还是外部服务。更新当前栈涉及提升两个容器版本号以及几次 fly deploy 的调用。
进一步思考
前端的一个重大挑战是产品差异化。从杂货店店面抓取的数据因店而异。始终存在 SKU ID、产品名称、部门 ID/名称和价格。产品名称相当杂乱、重复且笨拙。例如 "40% Salt Reduced",或 "Alva Baby Starry Sky Print Reusable Cloth Nappy","Alva Baby Starry Night Print Reusable Cloth Nappy"。
Woolworths 提供条形码编号,coles 不提供。如果用户能够扫描手机上的条形码并调出该商品的价格历史,那将非常棒。