diff --git a/README.md b/README.md index f3f668d..c5dc04b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ # Python Tankstellen Api Wrapper - -Dies ist ein API Wrapper für Tankstellen in Deutschland. Als Quelle wird [TankerKönig](https://tankerkoenig.de/) verwendet. +Dies ist ein API Wrapper für Tankstellen in Deutschland. Als Quelle wird [TankerKönig](https://tankerkoenig.de/) verwendet. Ziel ist es, einfache Objekte zu bekommen mit allen Daten einer Tankstelle. Jaaaa ich weiß, es gibt die [PyTankerKoening](https://pypi.org/project/pytankerkoenig/) Lib, die haut aber das JSON einfach so raus. ## Getting started 1. API Key:
@@ -11,11 +10,36 @@ Dies ist ein API Wrapper für Tankstellen in Deutschland. Als Quelle wird [Tanke 1. Das Objekt secret vom secretHandler erstellen
2. Die Methode `loadFromSecret` ausführen. Damit wird die Datei `secret.txt` ausgelesen. 3. Rückgabewerte:
- 0: Secret wurde geladen
- 1: Fehler beim Lesen von `secret.txt`

+ - 0: Secret wurde geladen
+ - 1: Fehler beim Lesen von `secret.txt`

3. ApiHandler: 1. api Objekt erstellen. Mit übergeben wird die Postleitzahl und das secret Objekt + 2. Methoden: + - ## getGasStations(raduisInKM:float, spritType:str, onlyInThisPostCode:bool, sortedBy:str): + - raduisInKM: + - max: 25 + - Radius in Kilometer um die Postleitzahl herum + - spritType: + - e5 + - e10 + - diesel + - all + - onlyInThisPostCode: + - True: Gibt nur die Tankstellen zurück, die mit der Postleitzahl vom api Objekt (classes.city) übereinstimmen + - False: Gibt alle Tankstellen im diffinierten Radius zurück + - sortedBy [TODO]: + - price: Sortiert die Liste nach Preis (Von Günstig nacg Teuer) + - postCode: Sortiert die Liste nach Postleitzahl (Aufsteigend) + - distance: Sortiert die Liste nach Distanz zur Postleitzahl (Aufsteigend, KM) + - none: gibt die Liste ohne überarbeitung weiter + - return value: + - Liste der Tankstellen + - ## getGasStationDetail(stationID:str): + - stationID: die Tankstellen ID + - return value: + - gasStationDetail Objekt (classes.gasStationDetail) + - 1 bei einem Fehler -# Libs +## Libs [pgeocode](https://pypi.org/project/pgeocode/): Für die Längen- und Breitengrade von einer Postleitzahl
-[requests](https://pypi.org/project/requests/): Zum aufrufen der TankerKönig API +[requests](https://pypi.org/project/requests/): Zum aufrufen der TankerKönig API \ No newline at end of file diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..ecc5968 --- /dev/null +++ b/__init__.py @@ -0,0 +1,2 @@ +from apiHandler import api as tankerKoenig_main +import classes as tankerKoenig_classes \ No newline at end of file diff --git a/apiHandler.py b/apiHandler.py index ea2d2cd..df33388 100644 --- a/apiHandler.py +++ b/apiHandler.py @@ -1,9 +1,15 @@ +''' +Diese lib holt sich die Informationen von Tankstellen via API https://tankerkoening.de und gibt diese als Objekte zurück +Projektseite GitLab: https://gitlab.com/HendrikHeine/python-gas-station-api/ +Hendrik Heine, 2022 +''' + + import pgeocode import requests as _requests from secretHandler import secret as _secret from classes import * - class api: def __init__(self, postalCode:int, secret:_secret) -> None: '''postalCode: Die Postleitzahl\nsecret: Das secret Objekt''' @@ -17,12 +23,29 @@ def __init__(self, postalCode:int, secret:_secret) -> None: self.__listURL = f"{self.__baseURL}/list.php" # Umkreissuche self.__detailURL = f"{self.__baseURL}/detail.php" # Details zu einer bestimmten Tankstelle self.__reportURL = f"{self.__baseURL}/complaint.php" # Zum Melden von falschen Angaben + self.version = "0.0.1" + self.date = "09.05.2022" + + self.__stations = [] - self.__stations = [] + def __sortStationList(self, stationList:list, sortedBy:str): + listForReturn = [] + try: + if sortedBy == "price": + pass + if sortedBy == "postCode": + pass + if sortedBy == "distance": + pass + if sortedBy == "none": + listForReturn = stationList + + finally: + return listForReturn - def getGasStations(self, raduisInKM:float=10.0, spritType:str="all", onlyInThisPostCode:bool=False, sortedBy:str="postCode"): - '''Max Radius: 25KM\nSpritTypes: e5, e10, diesel, all\nOnlyInThisPostCode: Zeigt nur Tanketsllen mit der passenden Postleitzahl\nSortedBy: price, postCode, distanz''' + def getGasStations(self, raduisInKM:float=10.0, spritType:str="all", onlyInThisPostCode:bool=False, sortedBy:str="none"): + '''Max Radius: 25KM\nSpritTypes: e5, e10, diesel, all\nOnlyInThisPostCode: Zeigt nur Tanketsllen mit der passenden Postleitzahl\nSortedBy: price, postCode, distance, none''' req = f"{self.__listURL}?lat={self.__city.lat}&lng={self.__city.lng}&rad={raduisInKM}&sort=dist&type={spritType}&apikey={self.__apiKey}" response = _requests.api.get(req).json() if response["ok"] and response["status"] == "ok": @@ -37,7 +60,13 @@ def getGasStations(self, raduisInKM:float=10.0, spritType:str="all", onlyInThisP else: listForReturn.append(station) - return listForReturn + return self.__sortStationList(stationList=listForReturn, sortedBy=sortedBy) - def getStaionDeteails(self): - pass \ No newline at end of file + def getGasStaionDetails(self, staionID:str): + '''Mehr details zu einer bestimmten Tankstelle''' + req = f"{self.__detailURL}?id={staionID}&apikey={self.__apiKey}" + response = _requests.api.get(req).json() + if response["ok"] and response["status"] == "ok": + return gasSationDetail(response["station"]) + else: + return 1 \ No newline at end of file diff --git a/changelog.md b/changelog.md new file mode 100644 index 0000000..9dd5b10 --- /dev/null +++ b/changelog.md @@ -0,0 +1,2 @@ +# v0.0.1 (09.05.2022) +* added: apiHandler, classes and changelog \ No newline at end of file diff --git a/classes.py b/classes.py index 6c301aa..1125966 100644 --- a/classes.py +++ b/classes.py @@ -15,10 +15,29 @@ def __init__(self, value:dict) -> None: self.e10 = value["e10"] self.isOpen = value["isOpen"] +class gasSationDetail: + def __init__(self, value:dict) -> None: + self.id = value["id"] + self.name = value["name"] + self.brand = value["brand"] + self.street = value["street"] + self.houseNumber = value["houseNumber"] + self.postCode = value["postCode"] + self.place = value["place"] + self.lat = value["lat"] + self.lng = value["lng"] + self.diesel = value["diesel"] + self.e5 = value["e5"] + self.e10 = value["e10"] + self.isOpen = value["isOpen"] + self.wholeDay = value["wholeDay"] + self.openingTimes = value["openingTimes"] + self.closedAt = value["overrides"] + class city: def __init__(self, lat, lng, name, postalCode, communityCode) -> None: self.lat = lat self.lng = lng self.name = name self.postalCode = int(postalCode) - self.communityCode = communityCode \ No newline at end of file + self.communityCode = communityCode diff --git a/tankApi.py b/tankApi.py index 9d2dd23..2d3448d 100644 --- a/tankApi.py +++ b/tankApi.py @@ -9,8 +9,10 @@ stations = api.getGasStations(onlyInThisPostCode=True, raduisInKM=5, spritType="all") for station in stations: station:gasSation - print(station.postCode) + stationDetail = api.getGasStaionDetails(staionID=station.id) + stationDetail:gasSationDetail print(station.brand) + print(stationDetail.wholeDay) print("") else: exit("Error reading secret") \ No newline at end of file