From 9d1b3589f77e59c3211d6b27e9837417edeaeb4e Mon Sep 17 00:00:00 2001 From: LuBeDa Date: Mon, 23 Aug 2021 19:33:55 +0200 Subject: [PATCH] changed fetchRange to option defaults to "month" but optinal one can choose year --- .../source/sector27_de.py | 60 ++++++++++++++----- doc/source/sector27_de.md | 7 +++ 2 files changed, 53 insertions(+), 14 deletions(-) diff --git a/custom_components/waste_collection_schedule/waste_collection_schedule/source/sector27_de.py b/custom_components/waste_collection_schedule/waste_collection_schedule/source/sector27_de.py index 6b5c62b5..2ec8e156 100644 --- a/custom_components/waste_collection_schedule/waste_collection_schedule/source/sector27_de.py +++ b/custom_components/waste_collection_schedule/waste_collection_schedule/source/sector27_de.py @@ -8,24 +8,27 @@ from waste_collection_schedule import Collection # type: ignore[attr-defined] TITLE = "Sector 27" DESCRIPTION = "Source for Muellkalender in Kreis RE." URL = "https://muellkalender.sector27.de/web/fetchPickups" -TEST_CASES = {"Datteln": {"licenseKey":"DTTLN20137REKE382EHSE","cityId":"9","streetId":"2143"}, - "Marl": { "licenseKey":"MRL3102HBBUHENWIP","cityId":"3","streetId":"1055"} +TEST_CASES = {"Datteln": {"licenseKey":"DTTLN20137REKE382EHSE","cityId":"9","streetId":"2143","fetchRange":"month"}, + "Marl": { "licenseKey":"MRL3102HBBUHENWIP","cityId":"3","streetId":"1055","fetchRange":"year"} } class Source: - def __init__(self, licenseKey, cityId, streetId): + def __init__(self, licenseKey, cityId, streetId, fetchRange="month"): self._licenseKey = licenseKey self._cityId = cityId self._streetId = streetId + self._range = fetchRange + + def getviewMonthRange(self): - def getviewRange(self): - now = datetime.datetime.now() mRange = [] - m = now.month + now = datetime.datetime.now() + + m = now.month y = now.year - # fetch 3 Month + # fetch 3 month for x in range(m,m+3): if x < 13: @@ -37,18 +40,47 @@ class Source: return mRange + def getviewYearRange(self): + + yRange = [] + + now = datetime.datetime.now() + + m = now.month + y = now.year + + d = datetime.datetime(y,1,1,hour=12) + + yRange.append(int(datetime.datetime.timestamp(d))) + + # in november & december always fetch next year also + + if m > 10: + d = datetime.datetime(y+1,1,1,hour=12) + + yRange.append(int(datetime.datetime.timestamp(d))) + + return yRange + def fetch(self): args = { "licenseKey" : self._licenseKey, "cityId" : self._cityId, - "streetId" : self._streetId + "streetId" : self._streetId, } - - args["viewrange"] = "monthRange" + entries = [] - for m in self.getviewRange(): - args["viewdate"] = m + if self._range == "month": + fetchRange = self.getviewMonthRange() + args["viewrange"] = "monthRange" + else: + fetchRange = self.getviewYearRange() + args["viewrange"] = "yearRange" + + for dt in fetchRange: + + args["viewdate"] = dt # get json file r = requests.get(URL, params=args) @@ -59,7 +91,7 @@ class Source: type = data["pickups"][d][0]["label"] pickupdate = datetime.date.fromtimestamp(int(d)) - + entries.append(Collection(pickupdate, type)) - + return entries \ No newline at end of file diff --git a/doc/source/sector27_de.md b/doc/source/sector27_de.md index 6b5a845c..c403d09c 100644 --- a/doc/source/sector27_de.md +++ b/doc/source/sector27_de.md @@ -14,6 +14,7 @@ waste_collection_schedule: licenseKey: VALIDKEY cityId: CITYID streetId: STREETID + fetchRange: FETCHRANGE ``` ### Configuration Variables @@ -27,6 +28,11 @@ waste_collection_schedule: **STREETID**
*(string) (required)* +**FETCHRANGE**
+*(string) (optional)* default: month or year + +The `fetchRange` limits the query count to the server. "Month" does three queries, "year" usually one, only in nov/dec it does two. + ## Example ```yaml @@ -37,6 +43,7 @@ waste_collection_schedule: licenseKey: Dattelnx2345612 cityId: 9 streetId: 2162 + fetchRange: year ``` ## How to get the source arguments