Files
hassos_config/custom_components/afvalwijzer/collector/ximmio.py
2022-12-20 21:26:47 +01:00

84 lines
2.8 KiB
Python

from datetime import datetime, timedelta
import requests
from ..common.main_functions import _waste_type_rename
from ..const.const import _LOGGER, SENSOR_COLLECTOR_TO_URL, SENSOR_COLLECTORS_XIMMIO
def get_waste_data_raw(
provider,
postal_code,
street_number,
suffix,
):
if provider not in SENSOR_COLLECTORS_XIMMIO.keys():
raise ValueError(f"Invalid provider: {provider}, please verify")
collectors = ("avalex", "meerlanden", "rad", "westland")
provider_url = "ximmio02" if provider in collectors else "ximmio01"
TODAY = datetime.now().strftime("%d-%m-%Y")
DATE_TODAY = datetime.strptime(TODAY, "%d-%m-%Y")
DATE_TOMORROW = datetime.strptime(TODAY, "%d-%m-%Y") + timedelta(days=1)
DATE_TODAY_NEXT_YEAR = (DATE_TODAY.date() + timedelta(days=365)).strftime(
"%Y-%m-%d"
)
##########################################################################
# First request: get uniqueId and community
##########################################################################
try:
url = SENSOR_COLLECTOR_TO_URL[provider_url][0]
companyCode = SENSOR_COLLECTORS_XIMMIO[provider]
data = {
"postCode": postal_code,
"houseNumber": street_number,
"companyCode": companyCode,
}
raw_response = requests.post(url=url, data=data)
uniqueId = raw_response.json()["dataList"][0]["UniqueId"]
community = raw_response.json()["dataList"][0]["Community"]
except requests.exceptions.RequestException as err:
raise ValueError(err) from err
##########################################################################
# Second request: get the dates
##########################################################################
try:
url = SENSOR_COLLECTOR_TO_URL[provider_url][1]
data = {
"companyCode": companyCode,
"startDate": DATE_TODAY.date(),
"endDate": DATE_TODAY_NEXT_YEAR,
"community": community,
"uniqueAddressID": uniqueId,
}
raw_response = requests.post(url=url, data=data).json()
except requests.exceptions.RequestException as err:
raise ValueError(err) from err
if not raw_response:
_LOGGER.error("Address not found!")
return
try:
response = raw_response["dataList"]
except KeyError as e:
raise KeyError(f"Invalid and/or no data received from {url}") from e
waste_data_raw = []
for item in response:
temp = {"type": _waste_type_rename(item["_pickupTypeText"].strip().lower())}
temp["date"] = datetime.strptime(
sorted(item["pickupDates"])[0], "%Y-%m-%dT%H:%M:%S"
).strftime("%Y-%m-%d")
waste_data_raw.append(temp)
return waste_data_raw
if __name__ == "__main__":
print("Yell something at a mountain!")