Vorino — abgeleitete Datenbanken ================================ Was ist das? ------------ Die App Vorino liefert eine Offline-Datenbank mit Lebensmittel-Barcodes aus. Sie ist aus Open Food Facts abgeleitet. Weil Open Food Facts unter der Open Database License (ODbL) steht und diese eine Share-alike-Klausel enthaelt, wird die abgeleitete Datenbank hier oeffentlich und kostenlos bereitgestellt (ODbL Abschnitt 4.6). Ab App-Version 2.1 kommen zwei weitere abgeleitete Datenbanken hinzu, beide aus Open Prices, der offenen Preisdatenbank von Open Food Facts (ebenfalls ODbL): eine Tabelle mit Packungsgroessen und -preisen und eine Liste von Markennamen. Auch sie stehen hier zum Download. Inhalt dieses Verzeichnisses ---------------------------- food_barcodes-v2.0.1.db.gz Die aktuelle Fassung, gepackt. Gehoert zu App-Version 2.1. SQLite, Tabelle "products" mit den Spalten barcode, name, brand, quantity — 485.661 Zeilen. Dazu die Tabelle "meta" mit den Lizenzangaben. food_barcodes-v2.0.db.gz Die vorherige Fassung, gepackt. Gehoert zu App-Version 2.0 und bleibt liegen, solange Nutzer diese Version noch einsetzen. SQLite, Tabelle "products" mit den Spalten barcode, name — 474.621 Zeilen. Dazu die Tabelle "meta" mit den Lizenzangaben. build_food_db.py Das Skript, das die jeweils aktuelle Datei erzeugt. Damit laesst sich jede Fassung aus dem jeweils aktuellen Open-Food-Facts-Export nachbauen — ODbL 4.6 b erlaubt ausdruecklich, statt der Datei die METHODE der Bearbeitung anzubieten. Hier liegt der Stand, mit dem v2.0.1 erzeugt wurde. packungspreise-v2.0.1.json Packungsgroessen und -preise, abgeleitet aus Open Prices. Gehoert zu App-Version 2.1, Stand 2026-09-24. Siehe unten. marken-v2.0.1.json Liste der Marken (klein, ohne Akzente, nur Buchstaben und Ziffern), abgeleitet aus den Markenangaben der Produkte in Open Prices (Open Food Facts, ODbL) aus demselben Abzug wie die Packungspreise; gehoert zu App-Version 2.1, Stand 2026-09-24, 3.457 Marken. Siehe unten. LICENSE.txt Lizenzangaben und Namensnennung. Wie wurde die Barcode-Datenbank erzeugt? ---------------------------------------- 1. Herunterladen des CSV-Exports von Open Food Facts 2. Filtern auf Produkte mit Laenderbezug Deutschland, Oesterreich, Schweiz 3. Uebernehmen der Spalten "code", "product_name", "brands" und "quantity" (bis einschliesslich v2.0 nur "code" und "product_name") 4. Schreiben in eine SQLite-Datei, zusammen mit der Tabelle "meta" Details stehen in build_food_db.py. Die Tabelle "meta" ------------------ Beide Fassungen fuehren eine Tabelle "meta" (schluessel, wert) mit Quelle, Lizenz, Lizenz-URI, Namensnennung, der Beschreibung der Bearbeitung und dem Stand der Daten. ODbL 4.2 b verlangt den Lizenzhinweis IN der Datenbank — diese Tabelle erfuellt das. Im urspruenglich ausgelieferten App-Paket der Version 2.0 fehlte sie noch und wurde nachgereicht. Was sich von v2.0 zu v2.0.1 geaendert hat ----------------------------------------- - 485.661 statt 474.621 Zeilen (neuerer Open-Food-Facts-Export) - Zwei zusaetzliche Spalten in "products": brand und quantity. Sie kommen unveraendert aus dem Export; im Export sind brands bei rund 79 % und quantity bei rund 64 % der DACH-Produkte gesetzt. - Der Eintrag "bearbeitung" in der Tabelle "meta" nennt die neuen Spalten. Die Packungspreis-Tabelle ------------------------- packungspreise-v2.0.1.json ist aus Open Prices (prices.openfoodfacts.org), der offenen Preisdatenbank von Open Food Facts, abgeleitet. Open Prices steht unter der Open Database License (ODbL); die Tabelle ist deshalb hier oeffentlich und kostenlos bereitgestellt (ODbL Abschnitt 4.6 a). Aufbau (JSON): stand Datum der Erhebung zeitraumVon nur Preise ab diesem Datum (12 Monate vor dem Stand) quelle Open Prices (prices.openfoodfacts.org) von Open Food Facts lizenz ODbL 1.0 eintraege je Zutaten-Art (Schluessel = interne Katalog-ID der App): belege Zahl der Preise hinter den hier aufgefuehrten Groessen (Summe ueber "packungen", ohne lose Ware) packungen null bis drei Groessen, haeufigste zuerst (leer nur, wenn es allein "loseJeKg" gibt), je mit menge Gramm, Milliliter oder Stueck preis Euro je Packung belege Zahl der Preise dieser Groesse orte Zahl der Orte dahinter: Laeden und Regionsangaben ohne genauen Laden (z. B. "Bayern") juengst Datum des juengsten Belegs ketten Preis und Belegzahl je Handelskette (ab 3 Belegen aus 2 Laeden der Kette von 2 verschiedenen Erfassern, nur zwischen dem 0,5- und dem 2-fachen des Preises der Groesse) loseJeKg nur bei Obst und Gemuese, das man einzeln kauft, und nur mit genug Preisen (siehe Schritt 9): Preis loser Ware jeKg Euro je Kilogramm belege Zahl der Preise dahinter orte Zahl der Orte dahinter juengst Datum des juengsten Belegs warengruppen je Warengruppe (feste Schluessel wie "rind", "kaese", "gemuese", "bier", insgesamt 27) ein Richtwert fuer Zutaten ohne eigene Zutaten-Art: jeKg Euro je 1000 g bzw. 1000 ml typischePackung Median der Packungsgroessen in g bzw. ml belege Zahl der Preise dahinter orte Zahl der Orte dahinter erbtVon null = eigene Preise; sonst die Gruppe, deren Werte uebernommen sind (zu wenig eigene Preise), "katalog" = aus den Zutaten-Arten der Gruppe abgeleitet (siehe Schritt 8), bzw. "median" = Median ueber alle Gruppen mit eigenen Preisen "gewuerz" steht mit jeKg 0: Gewuerze zaehlt die App nicht als Einkauf. Pfand ist in der Tabelle nicht eingerechnet. Die App schlaegt bei Energydrinks, Cola und Limonade selbst 0,25 Euro Einwegpfand je Dose bzw. Flasche auf. Wie wurde die Tabelle erzeugt? 1. Abruf aller Preise an Orten in Deutschland ueber die Open-Prices-API 2. Nur Preise in Euro aus den 12 Monaten vor dem Stand, ohne Duplikate 3. Zuordnung der Produkte zu Zutaten-Arten ueber Kategorien und Namen 4. Angebote zaehlen mit ihrem regulaeren Preis; Angebote ohne regulaeren Preis fallen weg 5. Umrechnung der Packungsmenge in Gramm, Milliliter oder Stueck; lose Ware zaehlt als ein Stueck (ausser bei den Zutaten-Arten aus Schritt 9). Keine geschaetzten Stueckzahlen: bei Eiern, Broetchen, Wraps, Gurken und Avocados zaehlt nur eine auf der Packung oder im Produktnamen genannte Stueckzahl 6. Ausreisser (Preis je Einheit unter einem Viertel oder ueber dem Vierfachen des Medians der Zutaten-Art) fallen weg; bei Cola und Limonade ("limonade") gilt diese Grenze je Packungsgroesse, weil der Literpreis dort stark von der Gebindegroesse abhaengt (Dose gegen 1,5-Liter-Flasche) 7. Je Groesse zaehlt jeder Erfasser einmal, mit dem Median seiner Preise; der Preis der Groesse ist der Median ueber die Erfasser. Eine Groesse zaehlt ab 3 Preisen aus 3 verschiedenen Laeden (Regionsangaben ohne genauen Laden zaehlen dabei nicht als Laden) von mindestens 2 verschiedenen Erfassern, und kein Erfasser stellt mehr als die Haelfte der Preise dieser Groesse; hoechstens die 3 haeufigsten Groessen 8. Warengruppen: Zuordnung der Produkte ueber ihre Open-Food-Facts- Kategorien (Fleisch ohne Tierart-Kategorie ueber den Produktnamen), Fertiggerichte und Nonfood zaehlen nicht, lose Ware auch nicht. Preis je kg bzw. l je Beleg, Ausreisser wie in Schritt 6, dann je Erfasser der Median, daraus der Median ueber die Erfasser (ebenso die typische Packung). Alkoholische Getraenke in drei Gruppen: "bier", "spirituosen" (auch Likoere) und "wein_sekt" (Wein, Sekt, Weinmischungen, Wermut, Cider). Eigene Werte ab 8 Preisen aus 5 Laeden von 5 Erfassern, sonst uebernimmt die Gruppe die Werte einer festgelegten Gruppe (lamm von rind, tiefkuehl von gemuese), leitet sie aus festgelegten Zutaten-Arten der App ab ("katalog": schwein aus Schweinefleisch, ei aus Eiern, kraeuter_frisch aus Petersilie, Koriander, Schnittlauch, Dill, Basilikum und Minze; je Zutaten-Art die haeufigste Groesse dieser Tabelle, sonst der Richtwert der App, umgerechnet in Gramm; bei Kraeutern ist das Gewicht eines Bunds eine Annahme von 25 g; daraus der Median) oder nimmt den Median ueber alle Gruppen mit eigenen Werten (sonstiges immer, jede andere Gruppe ohne eigene Werte ebenso) 9. Lose Ware ("loseJeKg"): bei Obst und Gemuese, das man einzeln kauft (in der App als lose Ware markiert, z. B. Tomate, Karotte, Apfel, Banane), gehen Preise ohne Barcode nicht als Packung ein. Preise je Kilogramm ergeben den Kilopreis loser Ware, Preise je Stueck fallen weg. Ausreisser wie in Schritt 6 (gegen den Median dieser Kilopreise), jeder Erfasser zaehlt einmal mit dem Median seiner Kilopreise, der Kilopreis ist der Median ueber die Erfasser. Zugelassen ab 3 Preisen aus 3 verschiedenen Laeden von mindestens 2 Erfassern; anders als in Schritt 7 ohne Obergrenze fuer den Anteil eines Erfassers Die Markenliste --------------- marken-v2.0.1.json ist aus Open Prices (prices.openfoodfacts.org) abgeleitet, und zwar aus den Markenangaben (Felder "brands" und "brands_tags") der Produkte, zu denen Open Prices Preise in Deutschland fuehrt. Diese Produktangaben stammen aus Open Food Facts. Beide Quellen stehen unter der Open Database License (ODbL); die Liste ist deshalb hier oeffentlich und kostenlos bereitgestellt (ODbL Abschnitt 4.6 a). Grundlage ist derselbe Abzug wie bei der Packungspreis-Tabelle. Aufbau (JSON): stand Datum des Abzugs quelle Herkunft der Markenangaben lizenz ODbL 1.0 bearbeitung Kurzbeschreibung der Bearbeitung (wie unten) anzahl Zahl der Marken (in dieser Fassung 3.457) marken die Marken, sortiert, jede einmal Wie wurde die Liste erzeugt? 1. Jede Einzelmarke aus "brands" (Komma-Listen zerlegt: "Edeka, Milbona" ergibt "Edeka" und "Milbona") und jeder Eintrag aus "brands_tags" (ohne den Vorsatz "xx:") 2. Vereinheitlichte Schreibweise: klein, ohne Akzente, scharfes s als "ss", nur Buchstaben und Ziffern ("Dr. Oetker" ergibt "droetker", "K-Classic" ergibt "kclassic") 3. Handelsmarken: beginnt eine Marke mit dem Namen einer Handelskette, kommt der Kettenname zusaetzlich hinein ("REWE Beste Wahl" ergibt "rewebestewahl" und "rewe") 4. Weg fallen Eintraege unter 2 Zeichen, Eintraege ohne Buchstaben, reine Mengenangaben ("2 kg"), Platzhalter und Gattungswoerter, die als Marke gefuehrt werden (z. B. "unbekannt", "Sans marque", "Bio"), sowie Eintraege, die nur zwei Zeichen lang sind oder einem Zutatenwort der App gleichen, wenn weniger als 3 Produkte sie tragen 5. Sortiert, jede Marke einmal Aeltere Fassungen ----------------- Aeltere App-Versionen koennen eine aeltere Fassung der Datenbank enthalten. Da build_food_db.py hier vorliegt, laesst sich jede Fassung aus dem entsprechenden Open-Food-Facts-Export nachbauen. Fragen: support@vorinoapp.de