84 lines
2.8 KiB
Python
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!")
|