VOOZH about

URL: https://creativecommons.tankerkoenig.de

⇱ Tankerkönig API


👁 Tankerkönig
Spritpreise für alle!


API Informationen


Die Tankerkönig-API besteht aus drei HTTP-GET-Methoden, um Tankstellen-Informationen und Preise zu holen, sowie einer HTTP-POST-Methode, mit der fehlerhafte Daten an die MTS-K gemeldet werden können.

Die API kann von einem Server (z.B. über PHP), vom Browser (via JavaScript/AJAX) oder auch per Direktaufruf der URL (ideal zum Testen) abgefragt werden. Als Datenformat wird JSON zurückgeliefert.

Demo-Key

Die Beispielaufrufe hier werden mit dem Demo-Key gemacht. Im Unterschied zu echten Keys werden keine echten Preise ausgeliefert. Außerdem sind die Daten zur besseren Lesbarkeit formatiert.

Requests allgemein

In jedem Aufruf einer API-Methode muss ein API-Key mit angegeben werden.
Die Antwort enthält immer ein ok flag, dessen Status abgefragt werden sollte. Im Fehlerfall (ok == false) enthält die Antwort einen Text mit der Fehlerursache, bspw:
{
 "ok":false,
 "message":"parameter error"
}
Es ist sinnvoll und dringend empfohlen, immer das ok-Flag abzufragen um zu testen, ob der Aufruf erfolgreich war.
Je nach Applikation sollte der Fehler entsprechend behandelt werden, etwa so:
  • Fehlertext anzeigen,
  • Fehlertext an Server melden, falls ein eigener Server eingesetzt wird,
  • Keine weiteren Requests mehr senden

API-Methode 1 - Umkreissuche

Die Umkreissuche erfolgt über die API-Methode list.php. Damit können um einen gegebenen Standort die Tankstellen-Informationen und Preise der im angegebenen Radius befindlichen Tankstellen abgerufen werden.

Die Parameter dieses Request sind:

Parameter Bedeutung Format
lat geographische Breite des Standortes Floatingpoint-Zahl
lng geographische Länge Floatingpoint-Zahl
rad Suchradius in km Floatingpoint-Zahl, max: 25
type Spritsorte 'e5', 'e10', 'diesel' oder 'all'
sort Sortierung price, dist (1)
apikey Der persönliche API-Key UUID

(1) Bei type=all wird immer nach Entfernung sortiert - die Angabe der Sortierung ist dann optional

Beispielaufruf

https://creativecommons.tankerkoenig.de/json/list.php?lat=52.521&lng=13.438&rad=1.5&sort=dist&type=all&apikey=00000000-0000-0000-0000-000000000002

Beispielantwort

{
 "ok": true,
 "license": "CC BY 4.0 - https:\/\/creativecommons.tankerkoenig.de",
 "data": "MTS-K",
 "status": "ok",
 "stations": [
 { Datentyp, Bedeutung
 "id": "474e5046-deaf-4f9b-9a32-9797b778f047", - UUID, eindeutige Tankstellen-ID
 "name": "TOTAL BERLIN", - String, Name
 "brand": "TOTAL", - String, Marke
 "street": "MARGARETE-SOMMER-STR.", - String, Straße
 "place": "BERLIN", - String, Ort
 "lat": 52.53083, - float, geographische Breite
 "lng": 13.440946, - float, geographische Länge
 "dist": 1.1, - float, Entfernung zum Suchstandort in km
 "diesel": 1.109, \
 "e5": 1.339, - float, Spritpreise in Euro
 "e10": 1.319, /
 "isOpen": true, - boolean, true, wenn die Tanke zum Zeitpunkt der
 Abfrage offen hat, sonst false
 "houseNumber": "2", - String, Hausnummer
 "postCode": 10407 - integer, PLZ
 },
 ... weitere Tankstellen
 ]
}
 

Alle Tankstelleninformation wie vom Betreiber angegeben.

Wenn nur eine Spritsorte abgefragt wird ist im JSON statt Name der Sorte 'price' angegeben.

Beispielcode

API-Methode 2 - Preisabfrage

Die Preisabfrage erfolgt über die API-Methode prices.php. Damit können die Preise von bis zu 10 bekannten Tankstellen gleichzeitig abgefragt werden.

Die Parameter dieses Request sind die IDs der entsprechenden Tankstellen:

Parameter Bedeutung Format
ids IDs der Tankstellen UUIDs, durch Komma getrennt
apikey Der persönliche API-Key UUID

Beispielaufruf

https://creativecommons.tankerkoenig.de/json/prices.php?ids=4429a7d9-fb2d-4c29-8cfe-2ca90323f9f8,446bdcf5-9f75-47fc-9cfa-2c3d6fda1c3b,60c0eefa-d2a8-4f5c-82cc-b5244ecae955,44444444-4444-4444-4444-444444444444&apikey=00000000-0000-0000-0000-000000000002

Beispielantwort

{
 "ok": true,
 "license": "CC BY 4.0 - https:\/\/creativecommons.tankerkoenig.de",
 "data": "MTS-K",
 "prices": {
 "60c0eefa-d2a8-4f5c-82cc-b5244ecae955": {
 "status": "open", - Tankstelle ist offen
 "e5": false, - kein Super
 "e10": false, - kein E10
 "diesel": 1.189 - Tankstelle führt nur Diesel
 },
 "446bdcf5-9f75-47fc-9cfa-2c3d6fda1c3b": {
 "status": "closed" - Tankstelle ist zu
 },
 "4429a7d9-fb2d-4c29-8cfe-2ca90323f9f8": {
 "status": "open",
 "e5": 1.409,
 "e10": 1.389,
 "diesel": 1.129
 },
 "44444444-4444-4444-4444-444444444444": {
 "status": "no prices" - keine Preise für Tankstelle verfügbar
 }
 }
}
 

Beispielcode

API-Methode 3 - Detailabfrage

Mit der Detail-Abfrage werden einige wenige Informationen geliefert, die in der Antwort der Umkreissuche nicht enthalten sind: detail.php.

Parameter-Name Bedeutung Werte
openingTimes Öffnungszeiten Array mit Objekten, in denen der Text und die Zeiten stehen
overrides erweiterte Öffnungszeiten Änderungen der regulären ÖZ - bspw. eine temporäre Schliessung
wholeDay ganztägig geöffnet true, false
state Bundesland Ein Kürzel für das Bundesland - ist meist nicht angegeben

Ein Aufruf dieser Funktion ist für Apps sinnvoll, wenn dem User Details einer ausgewählten Tankstelle angezeigt werden sollen.
Zur regelmäßigen Preisabfragen ist diese Methode nicht gedacht. Statt dessen sollte hier die Umkreissuche, oder die Preisabfrage verwendet werden.

Die Parameter dieses Request sind neben dem API-Key die ID der Tankstelle:

Parameter Bedeutung Format
id ID der Tankstelle UUID
apikey Der persönliche API-Key UUID

Beispielaufruf

https://creativecommons.tankerkoenig.de/json/detail.php?id=24a381e3-0d72-416d-bfd8-b2f65f6e5802&apikey=00000000-0000-0000-0000-000000000002

Beispielantwort

Eine Tankstelle mit geänderten Öffnungszeiten:
{
 "ok": true,
 "license": "CC BY 4.0 - https:\/\/creativecommons.tankerkoenig.de",
 "data": "MTS-K",
 "status": "ok",
 "station": {
 "id": "24a381e3-0d72-416d-bfd8-b2f65f6e5802",
 "name": "Esso Tankstelle",
 "brand": "ESSO",
 "street": "HAUPTSTR. 7",
 "houseNumber": " ",
 "postCode": 84152,
 "place": "MENGKOFEN",
 "openingTimes": [ - Array mit regulären Öffnungszeiten
 {
 "text": "Mo-Fr",
 "start": "06:00:00",
 "end": "22:30:00"
 },
 {
 "text": "Samstag",
 "start": "07:00:00",
 "end": "22:00:00"
 },
 {
 "text": "Sonntag",
 "start": "08:00:00",
 "end": "22:00:00"
 }
 ],
 "overrides": [ - Array mit geänderten Öffnungszeiten
 "13.04.2017, 15:00:00 - 13.11.2017, 15:00:00: geschlossen" - im angegebenen Zeitraum geschlossen
 ],
 "wholeDay": false, - nicht ganztägig geöffnet
 "isOpen": false,
 "e5": 1.379,
 "e10": 1.359,
 "diesel": 1.169,
 "lat": 48.72210601,
 "lng": 12.44438439,
 "state": null - Bundesland nicht angegeben
 }
} 

Beispielcode

API-Methode 4 - Fehlermeldung

Über die API können mit complaint.php auch fehlerhafte Daten über uns an die MTS-K weitergeleitet werden.

Die Parameter dieses Request sind wie folgt:

Parameter Bedeutung Format
id ID der Tankstelle UUID
apikey Der persönliche API-Key UUID
type Fehlertyp (2)
correction korrigierter Wert
ts Timestamp Unix-Sekunden
Optionale Angabe, wird die Timestamp nicht gesetzt wird die aktuelle Zeit genommen

(2) Liste der Fehlertypen

Fehlertyp Bedeutung
wrongPetrolStationName Der Name entspricht nicht der Angabe. Korrektur: richtiger Name.
wrongStatusOpen Die Tankstelle ist offen, obwohl sie laut Öffnungszeitenangabe zu sein sollte.
correction wird nicht angegeben.
wrongStatusClosed Die Tankstelle ist zu, obwohl sie laut Öffnungszeitenangabe offen sein sollte.
correction wird nicht angegeben.
wrongPriceE5 Falscher Super-Preis. Korrektur: Gleitpunktzahl mit korrektem Wert.
wrongPriceE10 Falscher E10-Preis. Korrektur: Gleitpunktzahl mit korrektem Wert.
wrongPriceDiesel Falscher Diesel-Preis. Korrektur: Gleitpunktzahl mit korrektem Wert.
wrongPetrolStationBrand Marke stimmt nicht. Korrektur: Angabe des richtigen Namens.
wrongPetrolStationStreet Straßenname stimmt nicht. Korrektur: Angabe des richtigen Namens.
wrongPetrolStationHouseNumber Hausnummer stimmt nicht. Korrektur: Angabe der richtigen Hausnummer.
wrongPetrolStationPostcode PLZ stimmt nicht. Korrektur: Angabe der richtigen PLZ.
wrongPetrolStationPlace Ortsname stimmt nicht. Korrektur: Angabe der richtiger Ortsname.
wrongPetrolStationLocation Geokoordinaten stimmen nicht. Korrektur: Angabe der richtigen Koordinaten.
Format: 2 mit Komma getrennte Gleitpunktzahlen für geographische Breite und Länge.
  • Es sind ausschliesslich die angegeben Meldungstypen erlaubt
  • Es sind ausschliesslich Korrekturen erlaubt - keine Anmerkungen
  • Mit einer Meldung kann nur ein Fehler gemeldet werden
  • Es wird nur eine syntaktische Prüfung durchgeführt, keine inhaltliche
  • Die Daten werden an die MTS-K weitergegeben, die sie an die Tankstellenbetreiber weitergibt
  • Tankerkönig ist hier nur der Vermittler der Daten

Beispielcode

Beispiel-Meldungs-Aufrufe mit jQuery

function sendComplaint(stationId, complaintType, correction){
 var apikey = '00000000-0000-0000-0000-000000000002'; // Demo-Key nur zum Testen, diese Requests werden nicht weitergegeben

 var data = {
 apikey: apikey,
 id: stationId,
 type: complaintType
 };

 if (correction) {
 data.correction = correction;
 }

 $.ajax({
 url: "https://creativecommons.tankerkoenig.de/json/complaint.php",
 method: 'POST',
 data: data,
 success: function( response ) {
 if (!response.ok) {
 alert(response.message);
 } else {
 alert('Meldung erfolgreich übertragen');
 }
 }
 });
}

var stationId = 'd3f68a43-e249-4a1f-bd34-0023677cdcc9';

// Test 1
sendComplaint(stationId, 'wrongStatusClosed', null); // keine Korrekturangabe erlaubt

// Test 2
sendComplaint(stationId, 'wrongPriceDiesel', 1.234);

// Test 3
sendComplaint(stationId, 'wrongPetrolStationLocation', '52.29162,10.06117');

// Test 4
sendComplaint(stationId, 'illegal token', '52.29162,10.06117');
 

Die ersten 3 Aufrufe sind korrekt, die Antwort ist:

{
 "ok": true
}
 

Der letzte Aufruf ist fehlerhaft, die Antwort ist:

{
 "ok": false,
 "message": "Meldungstyp 'illegal token' nicht erlaubt"
}
 

Nutzungsbedingungen


Keine Minerlölunternehmen und Tankstellen

Das API darf von Mineralölunternehmen, Tankstellen und damit verbundenen Unternehmen nicht genutzt werden. Wir sperren API-Keys, welche solchen Firmen zugeordnet sind.

Kontakt-Adresse

Die Erfahrung zeigt, dass bei der Verwendung der API Probleme auftreten können. Um solche Probleme zu klären, aber auch um etwaige Änderungen, oder Erweiterungen der API zu kommunizieren ist es nötig, dass wir auf einer Anmeldung mit funktionierender E-Mail-Adresse bestehen.

Diese Daten werden - genauso wie sonstige persönliche Nutzungsdaten - niemals an Dritte weitergegeben.

API-Requests

Grundsätzlich gilt: Unnötige Belastungen des Tankerkönig-Servers sind zu vermeiden.

Home-Automation-, Smart-Mirror- und ähnliche Systeme sollten Abfragen nicht öfter als einmal in 5 Minuten durchführen.
Abfragezeiten sollten, um Lastspitzen zu vermeiden, nicht an runden Zeiten stattfinden - besser ist es, eine zufällige Anzahl Sekunden Verzögerung einzubauen.
Wenn regelmäßig Preise geholt werden sollen, die prices.php, oder die list.php Methoden verwenden, um den Update aller Spritpreise mit nur einem Aufruf duchzuführen.

Apps, Websites und andere Systeme: Requests on Demand - auf Useraktion - durchführen. Regelmäßige, nicht explizit vom User initiierte Requests sind zu vermeiden

Massendaten

Für bestimmte Anwendungen ist es sinnvoll Spritpreise vieler Tankstellen aktuell zur Verfügung zu haben.
Die API ist dazu allerdings nicht geeignet und Versuche, das durchzuführen werden geblockt (und API-Keys deaktiviert). Falls Bedarf besteht, die kompletten Tankstellendaten auf eigenen Servern zur Verbraucherinformation oder Forschungszwecken zu spiegeln, oder regelmäßig für viele Tankstellen Informationen zu holen: bitte mit uns in Kontakt treten, wir werden zusammen eine Lösung finden.

Sonstiges

Bei Problemen mit dem Key, insbesondere wenn der Key gesperrt wurde: bitte mit uns in Kontakt treten. Niemals einen weiteren Key beantragen, ohne uns vorher zu kontaktieren.

Die Daten stehen unter der Creative-Commons-Lizenz “CC BY 4.0”, siehe https://creativecommons.org/licenses/by/4.0/deed.de, insbesondere ist eine Namensnennung nötig (z.B. ein Link auf www.tankerkoenig.de) Für Apps ist diese Namensnennung auch im Info-Text im Store zu erfolgen.

Die Bedingungen der MTS-K müssen eingehalten werden. Insbesondere darf eine App, Website, oder sonstiger öffentlich verfügbarer Dienst keine Filterung der Ergebnisse vornehmen, die nicht vom User explizit so gewünscht wird.

API-Keys - auch der Demo-Key - dürfen nicht in Foren, auf GitHub oder auf ähnlichen Platformen veröffentlicht werden.
Code oder Code-Snippets in Veröffentlichungen bitte immer kommentieren, so dass klar ist, dass ein persönlicher API-Key verwendet werden muss.
Ein Hinweis kann so aussehen:

// Key für den Zugriff auf die freie Tankerkönig-Spritpreis-API
// Für eigenen Key bitte hier https://creativecommons.tankerkoenig.de
// registrieren.
var tankerkoenig_api_key = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'; // TODO: Key ersetzen

API-Key vergessen?

neu zuschicken lassen


Wegen Wartungsarbeiten sind momentan keine Registrierungen möglich.
Bitte später nochmals versuchen.

Historische Preisdaten


Neu: historische Daten jetzt auch als CSV-Dateien verfügbar

Um den Umgang mit den Daten zu erleichtern, stellen wir nun die historischen Daten als CSV-Dateien zur Verfügung. Die Daten werden in einem git-Repository abgelegt, das wir selbst hosten.

Um Missbrauch zu verhindern ist Zugang zum git-Repo nur noch für angemeldete und überprüfte Benutzer mit Beachtung der AGB möglich.

Anmeldung über https://onboarding.tankerkoenig.de, falls schon ein Account besteht, bitten wir um eine Mail an info@tankerkoenig.de

Für jeden Tag wird eine neue Datei angelegt, einzelne Dateien können über die Oberfläche als .zip heruntergelden werden. Man kann sich auch das gesamte Repository clonen und jeden Tag per git clone update, weiteres im README dort. Diese Datensammlung steht unter BY-NC-SA-4.0-Lizenz, d.h. nichtkommerzielle Nutzung ist frei.

Download als Datenbank-Dump

Neben dem Download als CSV-Dateien gibt es auch die Möglichkeit historische Daten in Form eines Postgres-Datenbank-Dumps von zu beziehen. Falls möglich, nutzen Sie den Download von unserem git-Repository, das ist einfacher zu handhaben.

Inhalt der Dumps

Vom Server werden alle vier Minuten sämtliche Preise der Tankstellen (knapp 15000) von der Markttransparenzstelle für Kraftstoffe (MTS-K) importiert. Wir erfassen dabei die Preisänderungen und speichern sie.

Neben diesen Preisänderungsdaten enthält der Dump auch noch den aktuellen Stand der Tankstellen-Infos. (Name, Marke, Geoposition, etc).

Was kann man mit den Daten machen?

Interessant ist es natürlich, auszuwerten, was mit den Spritpreisen im Laufe des Tages/der Woche oder in den Ferien so passiert. Wo ist Sprit besonders teuer oder billig? Gilt das für Super und Diesel oder nicht? Oder gibt es vielleicht neue Erkenntnisse, die noch verborgen sind? Neue Ideen, auf die noch keiner gekommen ist? Lassen wir uns überraschen!

Download

Vier PostgreSQL-Dump-Files sind verfügbar, es muss ein überprüfter Account bei uns bestehen, zum Download wird der API-Key an die URL als Parameter gehängt ("?apikey=

Wir sind bemüht die Preis- und Grunddaten lückenlos zu archivieren, können aber keine Garantien über die Vollständigkeit und Korrektheit der Daten abgeben.

Infos zum Format hier.

Der aktuelle Dump wird einmal täglich erzeugt.

Lizenz

Diesen Datenbankdump stellt Tankerkönig allen Interessenten unter einer Creative-Commons-Lizenz (CC BY 4.0) zur Verfügung, d.h. er kann auch für kommerzielle Zwecke (mit Namensnennung) genutzt werden.

Bei Nutzung der historischen Preisdaten, würden wir uns über eine kurze Info zur geplanten Verwendung freuen.

Kommerzieller Service


Massenabfragen

Unser CC-Server kann täglich viele hunderttausend Abfragen beantworten. Damit alle User und deren Klienten (App-, Websites-User) möglichst ohne Verzögerung und Serverausfälle an aktuelle Daten kommen, sind auf der Seite unseres Servers einige Maßnahmen umgesetzt, die sicherstellen, dass einzelne Datennehmer andere nicht beeinträchtigen. Das heißt, dass ein User, der eine zu hohe Last erzeugt, temporär oder dauerhaft vom Service ausgeschlossen werden kann.

Wenn klar ist, das der geplante Service nicht mit dieser Einschränkung umgesetzt werden kann, können wir gegen eine monatliche Gebühr einen dedizierten Server aufsetzen, auf dem diese Limitierungen nicht existieren.

API-Anpassungen

Auch Einschränkungen beim Radius der Umkreissuche und Begrenzung bei der Anzahl abgefragter Tankstellen beim Preisabruf, die ebenfalls der Lastbegrenzung des CC-Server dienen, können bei einem dedizierten Server entfernt werden.

Abfrage weiterer Informationen

Weitere API-Methoden können freigeschaltet werden, z.B.:

  • Zeitpunkt der letzten Preisänderung
  • Aggregierte Queries (bspw. Durchschnittspreise für PLZ-Bereich)
  • Filterung mit PLZ, Name oder Marke
  • Tankstelle ist offen bis Zeitpunkt / öffnet zum Zeitpunkt

Eigenes Hosting

Falls die verfügbaren Daten auf eigenen Servern gehostet werden sollen, stehen diese Alternativen zur Verfügung:

  • Dedizierter Server, auf Wunsch mit Anpassungen der API, siehe oben
  • Regelmäßige Übernahme aller Preisdaten in gewünschtem Format (JSON, XML, CSV)

Unterstützung bei Aufbereitung der historischen Daten

Die frei verfügbaren historischen Preisdaten liegen in Form von PostgreSQL Datenbank-Dumps vor.
Andere Formate wie JSON, MySQL, XML und CSV können gegen Gebühr erstellt werden.

Eigene Queries der historischen Preisdaten stehen demnächst interessierten Usern per Web-Interface zur Verfügung.

Wir übernehmen auch gerne individuelle Aufbereitungen der Daten.

Referenzen


Hier einige existierende Apps, Websites, Home-Automation-Systeme und sonstige Clients, die die Tankerkönig-Spritpreis-API verwenden.

Bitte informiert uns, wenn euer Projekt hier gelistet werden soll.

SmartMirror

Tools


API-Key vergessen

Kein Problem. Einfach E-Mail-Adresse eingeben und Button drücken.

Log-Einträge einsehen

Hier könnt Ihr die Logeinträge des aktuellen Logs einsehen - gefiltert mit eurem API-Key.

Das ist dazu gedacht, dass Ihr auf unserem Server nachsehen könnt welche Requests tatsächlich für euren Key ankommen. Bei einigen Home-Automation-Systemen ist das offenbar nicht anders zu überprüfen, da man im System an diese Information nicht, oder nur schwer rankommt.

Auch Entwickler anderer System profitieren davon: wenn die Requests nicht über einen eigenen Server laufen, sondern von den Installationen direkt an unseren Server geschickt werden, ist das eine einfache Möglichkeit die tatsächlich anfallenden Requests zu sehen.

Die Liste wird an die E-Mail-Adresse die bei der Anmeldung angegeben wurde verschickt.

Diese Funktionalität ist ausschliesslich dazu gedacht, Probleme möglichst frühzeitig aufzuspüren.
Am besten, immer vor dem Launch und bei Änderungen der App/Website/sonstigen System einsetzen.
Also nicht dauerhaft und regelmäßig solche Daten abholen.


Tankstellenfinder

Hier findet sich ein Tankstellenfinder, mit dem man sehr einfach in einer Karte seine Lieblingstanken finden kann.

Diese Tankstellen-Informationen sind im JSON-Format und können als Grundlage für Home-Automation-, Magic Mirror-Systeme und andere Clients dienen.

Formatspezifikation einer solchen JSON-Datei

Beispielcode PHP list.php

  • 01 Mai 2017
  • Beispielcode PHP list.php

Aufruf aus PHP

$lat = $_GET["lat"];
$lng = $_GET["lng"];
$radius = $_GET["radius"];
$sort = $_GET["sort"];
$type = $_GET["type"];
$json = file_get_contents('https://creativecommons.tankerkoenig.de/json/list.php'
 ."?lat=$lat" // geographische Breite
 ."&lng=$lng" // Länge
 ."&rad=$radius" // Suchradius in km
 ."&sort=$sort" // Sortierung: 'price' oder 'dist' - bei type=all diesen Parameter weglassen
 ."&type=$type" // Spritsorte: 'e5', 'e10', 'diesel' oder 'all'
 ."&apikey=00000000-0000-0000-0000-000000000002"); // Demo-Key ersetzen!
$data = json_decode($json);
display($data);

Beispielcode Javascript list.php

  • 01 Mai 2017
  • Beispielcode JS list.php

Aufruf aus JS, mit jQuery

Ein Sprittyp

$.ajax({
 url: "https://creativecommons.tankerkoenig.de/json/list.php",
 data: {
 lat: position.coords.latitude,
 lng: position.coords.longitude,
 rad: 2,
 sort: "price",
 type: "diesel",
 apikey: "00000000-0000-0000-0000-000000000002"
 },
 success: function(response) {
 if (!response.ok) {
 // TODO: Fehlerbehandlung
 console.error(response.message);
 } else {
 // TODO: Anzeige der Informationen
 console.log(response);
 }
 },
 error: function(p){
 that.showError('AJAX-Problem', 'status: ' + p.status + ' statusText: ' + p.statusText);
 }
});

Alle Spritsorten

$.ajax({
 url: "https://creativecommons.tankerkoenig.de/json/list.php",
 data: {
 lat: position.coords.latitude,
 lng: position.coords.longitude,
 rad: 2,
 type: "all",
 apikey: "00000000-0000-0000-0000-000000000002"
 },
 success: function(response) {
 if (!response.ok) {
 // TODO: Fehlerbehandlung
 console.error(response.message);
 } else {
 // TODO: Anzeige der Informationen
 console.log(response);
 }
 },
 error: function(p){
 that.showError('AJAX-Problem', 'status: ' + p.status + ' statusText: ' + p.statusText);
 }
});

Beispielcode PHP prices.php

  • 01 Mai 2017
  • Beispielcode PHP prices.php

Aufruf aus PHP


 

Beispielcode Javascript prices.php

  • 01 Mai 2017
  • Beispielcode JS prices.php

Aufruf aus JS, mit jQuery

var station_ids = []; // Liste
$.each(stations, function(){
 station_ids.push(this.id); // nur die IDs // Füllen der Liste mit IDs der Tankstellen aus list.php Aufruf
});

station_ids_string = station_ids.join(','); // IDs ohne Hochkommas mit Kommas getrennt verbunden

$.ajax({ // jQuery für Server-Request - kann natürlich auch mit eigenem Code,
 // oder anderen Libs gemacht werden.
 url: "https://creativecommons.tankerkoenig.de/json/prices.php",
 data: {
 ids: station_ids_string, // stringifiziertes Array mit Tankstellen-Ids
 apikey: '00000000-0000-0000-0000-000000000002'
 },
 success: function( response ) { // Antwort vom Server wird hier verarbeitet
 if (response.ok) { // Daten in Ordnung?
 successHandler(response.prices); // TODO: eigene Funktion um Preise anzuzeigen und/oder zu speichern
 } else {
 errorHandler(response.message); // TODO: Fehlermeldung anzeigen
 }
 },
 error: function(p){ // Behandlung technischer Probleme
 errorHandler('AJAX-Problem, status: ' + p.status + ' statusText: ' + p.statusText);
 }
});

Beispielcode PHP detail.php

  • 01 Mai 2017
  • Beispielcode PHP detail.php

Aufruf aus PHP


 

Beispielcode Javascript detail.php

  • 01 Mai 2017
  • Beispielcode JS detail.php

Aufruf aus JS, mit jQuery

id = stationList[0].id;
$.ajax({
 url: "https://creativecommons.tankerkoenig.de/json/detail.php",
 data: {
 id: id, // Tankstellen-Id
 apikey: '00000000-0000-0000-0000-000000000002'
 },
 success: function( response ) {
 if (!response.ok) {
 // TODO: Fehlerbehandlung
 console.error(response.message);
 } else {
 // TODO: Anzeige der Informationen
 console.log(response);
 }
 }
});

Beispielcode Javascript complaint.php

  • 01 Mai 2017
  • Beispielcode JS complaint.php

Aufruf aus JS, mit jQuery

function sendComplaint(stationId, complaintType, correction){
 var apikey = '00000000-0000-0000-0000-000000000002'; // Demo-Key nur zum Testen, diese Requests werden nicht weitergegeben

 var data = {
 apikey: apikey,
 id: stationId,
 type: complaintType
 };

 if (correction) {
 data.correction = correction;
 }

 $.ajax({
 url: "https://creativecommons.tankerkoenig.de/json/complaint.php",
 method: 'POST',
 data: data,
 success: function( response ) {
 if (!response.ok) {
 alert(response.message);
 } else {
 alert('Meldung erfolgreich übertragen');
 }
 }
 });
}


var stationId = 'd3f68a43-e249-4a1f-bd34-0023677cdcc9';

// Test 1
sendComplaint(stationId, 'wrongStatusClosed', null); // keine Korrekturangabe erlaubt
// Test 2
sendComplaint(stationId, 'wrongPriceDiesel', 1.234);
// Test 3
sendComplaint(stationId, 'wrongPetrolStationLocation', '52.29162,10.06117');
// Test 4
sendComplaint(stationId, 'illegal token', '52.29162,10.06117');

Tankstellen-Info

  • 01 Mai 2017
  • Tankstellen-Info

JSON-Rückgabe des Tankstellen-Finders

{
 "005056ba-7cb6-1ed2-bceb-8a39e78c8d33": { ID der ersten Tankstelle
 "label": "STAR | star Tankstelle", generierte Bezeichnung
 "coords": { Geo-Koordinaten
 "lat": 53.10815,
 "lng": 8.77395
 },
 "address": [ Adresszeilen
 "Waller Heerstraße 294",
 "28219 Bremen"
 ],
 "openingTimes": { Öffnungszeiten
 "Mo, Di, Mi, Do": [ erste Öffnungszeit
 "06:00 - 23:00"
 ],
 "Fr, Sa": [ zweite Öffnungszeit
 "06:00 - 00:00"
 ],
 "So": [ dritte Öffnungszeit
 "07:00 - 23:00"
 ]
 },
 "overrides": [ geänderte Öffnungszeiten
 {
 "startp": "2016-10-17 06:00", von
 "endp": "2016-10-17 10:00", bis
 "is_close": false hat - anders als in den normalen ÖZ angegeben - zu
 },
 ... weitere Overrides
 ]
 },
 "e854dc9b-18b1-4f48-cb94-c3125f9ca47d": { ID der zweiten Tankstelle
 "label": "Bremer Mineralölhandel GmbH | BMÖ Tankstelle Hötzer",
 "address": [
 "Plantage 17",
 ...
 }
 },
 ... weitere Tankstellen-Infos
} 
label, coords und address sind immer angegeben, openingTimes und overrides nur dann wenn diese Zeiten auch vorhanden sind (openingTimes: fast immer, overrides: selten).

Mit den Informationen aus der erzeugten Datei ('stations.json') kann je nach eingesetzter Technik per PHP, Javascript oder anderen Sprachen ein Layout erzeugt werden, in das nur noch die aktuellen Preise eingefügt werden müssen, die mit prices.php von Tankerkönig bezogen werden.

Kommerzieller Service

  • 21 Februar 2017
  • Kommerzieller Service

Massenabfragen

Unser CC-Server kann täglich viele hunderttausend Abfragen beantworten. Damit alle User und deren Klienten (App-, Websites-User) möglichst ohne Verzögerung und Serverausfälle an aktuelle Daten kommen, sind auf der Seite unseres Servers einige Maßnahmen umgesetzt, die sicherstellen, dass einzelne Datennehmer andere nicht beeinträchtigen. Das heißt, dass ein User, der eine zu hohe Last erzeugt, temporär oder dauerhaft vom Service ausgeschlossen werden kann.

Wenn klar ist, das der geplante Service nicht mit dieser Einschränkung umgesetzt werden kann, können wir gegen eine monatliche Gebühr einen dedizierten Server aufsetzen, auf dem diese Limitierungen nicht existieren.

API-Anpassungen

Auch Einschränkungen beim Radius der Umkreissuche und Begrenzung bei der Anzahl abgefragter Tankstellen beim Preisabruf, die ebenfalls der Lastbegrenzung des CC-Server dienen, können bei einem dedizierten Server entfernt werden.

Abfrage weiterer Informationen

Weitere API-Methoden können freigeschaltet werden, z.B.:

  • Zeitpunkt der letzten Preisänderung
  • Aggregierte Queries (bspw. Durchschnittspreise für PLZ-Bereich)
  • Filterung mit PLZ, Name oder Marke
  • Tankstelle ist offen bis Zeitpunkt / öffnet zum Zeitpunkt

Eigenes Hosting

Falls die verfügbaren Daten auf eigenen Servern gehostet werden sollen, stehen mehrere Alternativen zur Verfügung:

  • Dedizierter Server, auf Wunsch mit Anpassungen der API, siehe oben
  • Regelmäßige Übernahme aller Preisdaten in gewünschtem Format (JSON, XML, CSV)

Unterstützung bei Aufbereitung der historischen Daten

Die frei verfügbaren historischen Preisdaten liegen in Form von PostgreSQL Datenbank-Dumps vor.
Andere Formate wie JSON, MySQL, XML und CSV können gegen Gebühr erstellt werden.

Eigene Queries der historischen Preisdaten stehen demnächst interessierten Usern per Web-Interface zur Verfügung.

Wir übernehmen auch gerne individuelle Aufbereitungen der Daten.

Impressum

  • 21 Februar 2017
  • Impressum

Tankerkönig UG (haftungsbeschränkt)
Niederhöfen 5
87484 Nesselwang

Kontakt:

Telefon: 08361 9239027
E-Mail: info@tankerkoenig.de

Quelle: https://www.e-recht24.de

Datenschutz

  • 15 November 2016
  • Datenschutz

Datenschutz

Die Betreiber dieser Seiten nehmen den Schutz Ihrer persönlichen Daten sehr ernst. Wir behandeln Ihre personenbezogenen Daten vertraulich und entsprechend der gesetzlichen Datenschutzvorschriften sowie dieser Datenschutzerklärung.

Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder E-Mail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.

Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.


Cookies

Die Internetseiten verwenden teilweise so genannte Cookies. Cookies richten auf Ihrem Rechner keinen Schaden an und enthalten keine Viren. Cookies dienen dazu, unser Angebot nutzerfreundlicher, effektiver und sicherer zu machen. Cookies sind kleine Textdateien, die auf Ihrem Rechner abgelegt werden und die Ihr Browser speichert.

Die meisten der von uns verwendeten Cookies sind so genannte „Session-Cookies“. Sie werden nach Ende Ihres Besuchs automatisch gelöscht. Andere Cookies bleiben auf Ihrem Endgerät gespeichert, bis Sie diese löschen. Diese Cookies ermöglichen es uns, Ihren Browser beim nächsten Besuch wiederzuerkennen.

Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und Cookies nur im Einzelfall erlauben, die Annahme von Cookies für bestimmte Fälle oder generell ausschließen sowie das automatische Löschen der Cookies beim Schließen des Browser aktivieren. Bei der Deaktivierung von Cookies kann die Funktionalität dieser Website eingeschränkt sein.


Server-Log-Files

Der Provider der Seiten erhebt und speichert automatisch Informationen in so genannten Server-Log Files, die Ihr Browser automatisch an uns übermittelt. Dies sind:

  • Browsertyp/ Browserversion
  • verwendetes Betriebssystem
  • Referrer URL
  • Hostname des zugreifenden Rechners
  • Uhrzeit der Serveranfrage


Diese Daten sind nicht bestimmten Personen zuordenbar. Eine Zusammenführung dieser Daten mit anderen Datenquellen wird nicht vorgenommen. Wir behalten uns vor, diese Daten nachträglich zu prüfen, wenn uns konkrete Anhaltspunkte für eine rechtswidrige Nutzung bekannt werden.


Kontaktformular

Wenn Sie uns per Kontaktformular Anfragen zukommen lassen, werden Ihre Angaben aus dem Anfrageformular inklusive der von Ihnen dort angegebenen Kontaktdaten zwecks Bearbeitung der Anfrage und für den Fall von Anschlussfragen bei uns gespeichert. Diese Daten geben wir nicht ohne Ihre Einwilligung weiter.


Auskunft, Löschung, Sperrung

Sie haben jederzeit das Recht auf unentgeltliche Auskunft über Ihre gespeicherten personenbezogenen Daten, deren Herkunft und Empfänger und den Zweck der Datenverarbeitung sowie ein Recht auf Berichtigung, Sperrung oder Löschung dieser Daten. Hierzu sowie zu weiteren Fragen zum Thema personenbezogene Daten können Sie sich jederzeit unter der im Impressum angegebenen Adresse an uns wenden.


Widerspruch Werbe-Mails

Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten zur übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-E-Mails, vor.


Quelle: https://www.e-recht24.de

Einbindung von Diensten und Inhalten Dritter

Es kann vorkommen, dass innerhalb dieses Onlineangebotes Inhalte Dritter, wie zum Beispiel Videos von YouTube, Kartenmaterial von Google-Maps, RSS-Feeds oder Grafiken von anderen Webseiten eingebunden werden. Dies setzt immer voraus, dass die Anbieter dieser Inhalte (nachfolgend bezeichnet als "Dritt-Anbieter") die IP-Adresse der Nutzer wahr nehmen. Denn ohne die IP-Adresse, könnten sie die Inhalte nicht an den Browser des jeweiligen Nutzers senden. Die IP-Adresse ist damit für die Darstellung dieser Inhalte erforderlich. Wir bemühen uns nur solche Inhalte zu verwenden, deren jeweilige Anbieter die IP-Adresse lediglich zur Auslieferung der Inhalte verwenden. Jedoch haben wir keinen Einfluss darauf, falls die Dritt-Anbieter die IP-Adresse z.B. für statistische Zwecke speichern. Soweit dies uns bekannt ist, klären wir die Nutzer darüber auf.

Quelle: Datenschutz-Muster von Rechtsanwalt Thomas Schwenke - I LAW it

Format-Info

  • 21 Februar 2017
  • Format-Info

Datenbank-Tabellen

Tabelle gas_station

 Column | Type | Modifiers
---------------------------+-----------------------------+-----------
 id | uuid | not null
 version | character varying(10) | not null
 version_time | timestamp without time zone | not null
 name | text | not null
 brand | text |
 street | text |
 house_number | text |
 post_code | text |
 place | text |
 public_holiday_identifier | text |
 lat | double precision | not null
 lng | double precision | not null
 ot_json | text | not null

Das sind im wesentlichen die Daten, die die MTS-K liefert.

Column Bedeutung Bemerkungen
id eindeutige, unveränderliche ID der Tankstelle
version Versions-Nummer, vom Betreiber vergeben Ist wenig aussagekräftig, Format und Verwendung ist dem Betreiber überlassen
version_time Angabe zur letzten Änderung der Versions-Nummer, vom Betreiber vergeben.
name Name der Tankstelle Kann leer sein, es gibt keine klaren Vorgaben was hier zu stehen hat
brand Marke
street Straße Name der Straße, oft wird hier die Hausnummer mit angegeben
house_number Hausnummer Kann auch leer sein
post_code PLZ Ist verlässlich
place Ortsangabe Name der Ortschaft, gelegentlich mit Ortsteil
public_holiday_identifier Kürzel für Bundesland Ist meist nicht angegeben
lat geographische Breite des Standortes
lng geographische Länge des Standortes
ot_json JSON-String mit den Öffnungszeiten siehe unten

Feld ot_json

Eine Tankstelle kann beliebig viele einzelne Öffnungszeiten haben. Ist keine angegeben ist die Tankstelle immer geöffnet. In diesem Fall steht in dem Feld '{}' - ein leeres Objekt.

Im Folgenden ein Beispiel
{
 "openingTimes": [
 {
 "applicable_days": 31,
 "periods": [
 {
 "startp": "05:00",
 "endp": "22:00"
 }
 ]
 },
 {
 "applicable_days": 96,
 "periods": [
 {
 "startp": "07:00",
 "endp": "22:00"
 }
 ]
 }
 ]
}

Diese Tanke hat 2 einzelne Öffnungszeiten. Gültig jeweils an den in applicable_days angegebenen Tagen.
Die Angabe in diesem Feld ist ein Bitfeld, einzelne Bits stehen für einzelne Tage:

Bit Zahlenwert Bedeutung
0 1 Montag
1 2 Dienstag
2 4 Mittwoch
3 8 Donnerstag
4 16 Freitag
5 32 Samstag
6 64 Sonntag
7 128 Feiertag

Im Beispiel ist die erste Öffnungszeit also Montag bis Freitag gültig. (1+2+4+8+16 = 31) Die zweite Öffnungszeit gilt Samstag und Sonntag (32+64 = 96).
Da für die Tankstelle keine spezielle Feiertagsregelung angegeben ist, gilt dort ebenfalls die Öffnungszeit des Sonntags. Falls eine Öffnungszeit für Feiertag angegeben ist, ist auschließlich diese an Feiertagen gültig.

Neben den 'openingTimes' können auch 'overrides' gesetzt sein - Angaben zu geänderten Öffnungszeiten.

 "overrides": [
 {
 "startp": "2017-06-05 05:00",
 "endp": "2017-06-05 23:00",
 "is_close": false
 },
 {
 "startp": "2017-08-01 00:00",
 "endp": "2017-09-01 00:00",
 "is_close": true
 }
 ]

Hier: am 5. Juni 2017 hat diese Tanke entgegen den Angaben in den regulären ÖZ zwischen 05:00 und 23:00 geöffnet. Im August hat die Tankstelle geschlossen. Angaben der regulären ÖZ werden innerhalb der Zeiträume der overrides ignoriert.

Öffnungszeiten können sich ändern. Im Moment ist eine History der Öffnungszeiten allerding im Rahmen der CC-Daten nicht verfügbar.

Tabelle gas_station_information_history

 Column | Type | Modifiers
---------+-----------------------------+-----------
 id | integer | not null
 stid | uuid | not null
 e5 | smallint |
 e10 | smallint |
 diesel | smallint |
 date | timestamp(0) with time zone | not null
 changed | smallint |
Column Bedeutung Bemerkungen
id Interne Id Kann sich ändern - besser nicht verwenden
stid Referenz zur Tankstelle-ID
e5 Preis für einen Liter Super E5 Angabe in Zehntel-Cent
e10 Preis für einen Liter Super E10 Angabe in Zehntel-Cent
diesel Preis für einen Liter Diesel Angabe in Zehntel-Cent
date Zeitpunkt dieser Änderung siehe unten
changed Bitmaske für die Änderung siehe unten

Hinweise

  • In der History-Tabelle sind aus Platzgründen nur Preisänderungen gespeichert. Der Preis zu einem bestimmten Zeitpunkt muss also aus der letzten Änderung errechnet werden.
  • Wurde ein ungültiger Preis übertragen, steht -1 in der jeweiligen Preis-Spalte.
  • Die changed-Spalte enthält (ebenfalls aus Platzgründen) für jede Spritsorte (Diesel, E5, E10) Flags, die folgende Bedeutung haben und zusammenaddiert werden:

Bitmaske für die Änderung

Diesel E5 E10
new 3 12 48
removed 2 8 32
changed 1 4 16

Wenn z.B. Diesel- und E10-Preis geändert wurden, steht in changed 17 (1+16).

Ein Preis ist neu, wenn a) der Sprittyp bisher nicht von der Tankstelle geführt wurde, b) die Tankstelle neu ist, oder c) nachdem die MTS-K wegen Wartungsarbeiten eine Zeitlang keine Preise geliefert hat.