An open API service indexing awesome lists of open source software.

https://github.com/herover/heissepreise

Grocery price tracking DK edition
https://github.com/herover/heissepreise

denmark heissepreise inflation price price-tracker

Last synced: 9 days ago
JSON representation

Grocery price tracking DK edition

Awesome Lists containing this project

README

          

# Heisse Preise

A terrible grocery price search "app". Fetches data from big ~~Austrian~~ Danish grocery chains daily and lets you search them. See ~~https://heisse-preise.io~~ .

The project consists of a trivial NodeJS Express server responsible for fetching the product data, massaging it, and serving it to the front end (see `server.js`). The front end is a least-effort vanilla HTML/JS app (see sources in `site/`).

Besides being danish, this clone is differs from the original by also tracking changes in quantity, and allows building the HTML pages without running a HTTP server. You can find the original project here .

## Requirements

- Node.js

## Running

### Development

Install NodeJS, then run this in a shell of your choice.

```bash
git clone https://github.com/badlogic/heissepreise
cd heissepreise
mkdir -p data
npm install
npm run dev
```

The first time you run this, the data needs to be fetched from the stores. You should see log out put like this.

```bash
Fetching data for date: 2023-05-23
Fetched LIDL data, took 0.77065160000324 seconds
Fetched MPREIS data, took 13.822936070203781 seconds
Fetched SPAR data, took 17.865891209602356 seconds
Fetched BILLA data, took 52.95784649944306 seconds
Fetched HOFER data, took 64.83968291568756 seconds
Fetched DM data, took 438.77065160000324 seconds
Merged price history
App listening on port 3000
```

Once the app is listening per default on port 3000, open in your browser.

Subsequent starts will fetch the data asynchronously, so you can start working immediately.

### Production

Install the dependencies as per above, then simply run:

```
git clone https://github.com/badlogic/heissepreise
cd heissepreise
node --dns-result-order=ipv4first /usr/bin/npm install --omit=dev
npm run start
```

Once the app is listening per default on port 3000, open in your browser.

## Using data from heisse-preise.io

You can also get the [raw data](https://heisse-preise.io/data/latest-canonical.json). The raw data is returned as a JSON array of items. An item has the following fields:

- `store`: (`billa`, `spar`, `hofer`, `dm`, `lidl`, `mpreis`, ...)
- `name`: the product name.
- `price`: the current price in €.
- `priceHistory`: an array of `{ date: "yyyy-mm-dd", price: number }` objects, sorted in descending order of date.
- `unit`: unit the product is sold at. May be undefined.
- `quantity`: quantity the product is sold at for the given price
- `bio`: whether this product is classified as organic/"Bio"

If you run the project locally, you can use the data from the live site including the historical data as follows:

```
cd heisse-preise
rm data/latest-canonical.*
curl -o data/latest-canonical.json https://heisse-preise.io/data/latest-canonical.json
```

Restart the server with either `npm run dev` or `npm run start`.

You can run the project without downloading new data using the `-s` or `--skip` flag (eg. `npm run dev -- -s`).

To only download data and build site without running a HTTP server, use `--no-server` or `-ns`, ex. `npm run start -- -ns`.