Henter kvitteringsdata fra Trumf og bygger en varekatalog med priser fra norske dagligvarekjeder. Sammenlign priser, spor prisendringer, og del data anonymt med fellesskapet.
- Hent kvitteringer fra Trumf via automatisert innlogging (Playwright)
- Prissammenligning mellom kjeder (Kiwi, Meny, Spar, m.fl.) med søk, filtrering og sortering
- Prishistorikk — spor prisendringer over tid med interaktive grafer
- Excel-eksport med filtrering og fargekoding
- Fellesskapsdeling — del prisdata anonymt via delt database (Cloudflare D1)
- Auto-oppdatering — appen sjekker for nye versjoner automatisk
- Web-UI — lokal nettside som åpnes i nettleseren, ingen terminal nødvendig
Last ned siste versjon fra Releases.
Ingen ekstra installasjon nødvendig — appen inkluderer Playwright-binarer og starter automatisk med tilgjengelig nettleser (Chrome → Chromium → Firefox).
Dobbeltklikk TrumfScraper.exe eller kjør:
TrumfScraper.exe
Åpner en nettside på http://localhost:5123 med:
- Dashboard — oversikt over kjeder og varer
- Hent data — logg inn på Trumf, hent kvitteringer
- Sammenlign — pristabell med søk, filter, sortering og grafer
- Fellesskap — del og hent prisdata
- Hjelp — brukerveiledning
TrumfScraper.exe --cli
Interaktiv meny i terminalen:
1) Hent kvitteringer fra Trumf
2) Sammenlign priser (konsoll)
3) Sammenlign priser (Excel)
4) Del varekatalog anonymt
5) Hent fellesskapets prisdata
?) Hjelp
0) Avslutt
- .NET 9 SDK
- Ingen ekstern nettleser nødvendig — Playwright-binarer er inkludert
- Miljøvariabler / Secrets: Alle hemmeligheter og miljøvariabler ligger lagret i vår avtalte secrets manager. For å sette opp prosjektet lokalt, opprett en
.env-fil i mappen og lim inn miljøvariablene.
git clone https://github.com/holdude/TrumfScraper.git
cd TrumfScraper
dotnet runFor CLI-modus under utvikling:
dotnet run -- --cliTrumfScraper/
├── Program.cs # Inngangspunkt, dual mode (web/cli)
├── TrumfScraper.csproj # Prosjektfil med versjon
├── build.ps1 # PowerShell-byggescript (publish + zip)
├── Models/
│ ├── CatalogItem.cs # Varekatalog med prishistorikk
│ ├── ReceiptLine.cs # Enkelt varelinjeprodukt
│ └── Transaction.cs # Trumf-transaksjon
├── Scraping/
│ ├── TrumfScraperRunner.cs # Playwright-automatisering og login
│ ├── RscParser.cs # Parser Next.js RSC-payload
│ └── ReceiptParser.cs # Parser kvitteringstekst til varer
├── Export/
│ ├── Exporter.cs # Lagrer varekatalog (JSON)
│ └── PriceComparer.cs # Prissammenligning (konsoll/Excel/API)
├── Community/
│ ├── CatalogUploader.cs # Del/hent prisdata via Cloudflare Worker (D1)
│ ├── UploadSecret.Template.cs # Mal for delt HMAC-nøkkel (se Utvikling)
│ └── UploadSecret.cs # Faktisk nøkkel — gitignorert, lag selv
├── Web/
│ ├── ApiEndpoints.cs # REST API-endepunkter
│ ├── ApiModels.cs # Request/response-modeller
│ ├── AutoUpdater.cs # Auto-oppdatering via GitHub Releases
│ ├── ScrapeSession.cs # Scraping-sesjon med event-buffer
│ └── WebSessionLifetime.cs # Auto-shutdown når nettleser lukkes
├── wwwroot/
│ ├── index.html # Web-UI (single page)
│ ├── style.css # Styling
│ └── app.js # Frontend-logikk
├── worker/ # Cloudflare Worker (delingstjeneste)
│ ├── src/index.ts # API: /contribute, /catalog, /tilbud
│ ├── migrations/ # D1-skjema (SQL)
│ ├── scripts/seed-d1.ts # Engangs-seeding fra legacy GitHub-data
│ ├── wrangler.toml # Worker- og D1-konfig
│ └── README.md # Deploy-instruksjoner
└── .github/workflows/
└── release.yml # CI/CD: bygg og publiser ved versjonsendring
POST /contribute er sikret med HMAC-SHA256. Appen signerer hver forespørsel med en delt nøkkel som valideres av Cloudflare Worker.
For å kjøre appen lokalt (uten å dele data) trenger du ikke gjøre noe. For å aktivere deling lokalt:
- Kopier
Community/UploadSecret.Template.cstilCommunity/UploadSecret.cs - I den nye fila: gi klassen nytt navn fra
UploadSecretTemplatetilUploadSecret, og bytt utREPLACE_ME_WITH_SHARED_SECRETmed den faktiske nøkkelen - Aldri commit
Community/UploadSecret.cs(er gitignorert)
For å deploye worker med ny nøkkel:
cd worker
wrangler secret put UPLOAD_SECRET # lim inn nøkkel
wrangler deployFor lokal wrangler dev, legg nøkkelen i worker/.dev.vars:
UPLOAD_SECRET=din-nøkkel-her
- Bump
<Version>iTrumfScraper.csproj - Commit og push til master
- GitHub Actions bygger og publiserer automatisk til TrumfScraper/releases
Krever:
UPLOAD_SECRETmå være satt som repository secret under Settings → Secrets and variables → Actions, med samme verdi som worker-nøkkelen. Workflowen generererCommunity/UploadSecret.csfra denne før build.
Anbefalt (Windows PowerShell) er å bruke build.ps1:
Set-Location "C:\path\til\TrumfScraper"
.\build.ps1Vanlige valg:
# Fjern "downloaded from internet"-markering fra ZIP-filer
.\build.ps1 -UnblockDownloadedFiles
# Framework-dependent build (mindre output, krever installert .NET runtime)
.\build.ps1 -FrameworkDependent
# Ikke single-file publish
.\build.ps1 -NoSingleFile
# Bygg for annen runtime
.\build.ps1 -Runtime win-arm64Scriptet publiserer til publish/ (standard) og lager normalt publish/TrumfScraper.exe.
Du kan fortsatt bygge direkte med dotnet publish:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o ./publishGenererer publish/TrumfScraper.exe (~80 MB, inkluderer .NET runtime).
Når du deler, sendes kun skrapede kjøpsdata anonymt — kjedenavn, varenavn, pris og dato. Ingen personlig informasjon, kvitteringsnummer eller butikklokasjon. Du kan også hente prisdata som andre i fellesskapet har delt.
API-en er en Cloudflare Worker som leser fra og skriver til en delt D1-database:
https://trumfscraper-upload.sanan-adnan97.workers.dev
Endepunkter:
POST /contribute— del prisdata (catalog+tilbud) — krever signert forespørselGET /catalog— hent delte priser (standard: siste 90 dager,?all=1for alt)GET /tilbud— hent delte tilbud (standard: siste 30 dager,?all=1for alt)
Skriving til databasen er beskyttet med HMAC-SHA256-signering. Appen legger til to headere på hver POST /contribute:
X-Timestamp— Unix-tidsstempel i sekunderX-Signature— HMAC-SHA256 (hex) over{tidsstempel}.{råbody}
Workeren avviser forespørsler som mangler headere, har feil signatur, eller er mer enn 5 minutter gamle (replay-beskyttelse). Usignerte curl-kall returnerer 401 Missing signature headers.
Eksempel — hent siste 90 dagers priser:
curl https://trumfscraper-upload.sanan-adnan97.workers.dev/catalog- Mobilnummer og passord lagres aldri — brukes kun for innlogging
- Varekatalogen som deles inneholder kun kjedenavn, varenavn, priser og datoer
- Ingen personlig informasjon sendes
- Fellesskapsbidrag sendes direkte til en Cloudflare Worker som validerer og lagrer i D1
Privat prosjekt.