ITADN
tjhowse/aus_grocery_price_database
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

澳大利亚杂货价格数据库

https://auscost.com.au

这是一个澳大利亚杂货价格的开放数据库。其目标是追踪长期价格趋势,以帮助做出明智的购买决策,并促使杂货店对价格上涨负责。

该服务从 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.tomlgo.modgo.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 不提供。如果用户能够扫描手机上的条形码并调出该商品的价格历史,那将非常棒。