summaryrefslogtreecommitdiff
path: root/energy_request.py
diff options
context:
space:
mode:
authorDylan Bolger <dylan.bolger00@gmail.com>2023-10-15 11:34:02 -0500
committerDylan Bolger <dylan.bolger00@gmail.com>2023-10-15 11:34:02 -0500
commitb5d1b9378adfd8337b3a949b3565b989e0f07db4 (patch)
tree729f7e6ed4261a36c6576e7a9cad09da1fdee4e8 /energy_request.py
downloadcity-utilities-restful-wrapper-b5d1b9378adfd8337b3a949b3565b989e0f07db4.tar.xz
city-utilities-restful-wrapper-b5d1b9378adfd8337b3a949b3565b989e0f07db4.zip
Initial commit: RESTful API to grab energy usage
Diffstat (limited to 'energy_request.py')
-rw-r--r--energy_request.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/energy_request.py b/energy_request.py
new file mode 100644
index 0000000..9b8542a
--- /dev/null
+++ b/energy_request.py
@@ -0,0 +1,78 @@
+import json
+import requests
+from constants import usageRequestCookies, genericRequestHeaders, electricUsageRequestJson, waterUsageRequestJson, waterRequestEndpoint, electricRequestEndpoint
+
+# Electric
+
+def dayElectricRequest():
+ electricUsageRequestJson['Mode'] = 'D'
+ return performElectricRequest()
+
+def monthElectricRequest():
+ electricUsageRequestJson['Mode'] = 'M'
+ return performElectricRequest()
+
+def performElectricRequest():
+ electricUsageResponse = requests.post(
+ electricRequestEndpoint,
+ cookies=usageRequestCookies,
+ headers=genericRequestHeaders,
+ json=electricUsageRequestJson
+ )
+ return parseResponse(electricUsageResponse)
+
+def requestElectric():
+ return {
+ "day": dayElectricRequest(),
+ "month": monthElectricRequest()
+ }
+
+# Water
+
+def dayWaterRequest():
+ waterUsageRequestJson['Mode'] = 'D'
+ return performWaterRequest()
+
+def monthWaterRequest():
+ waterUsageRequestJson['Mode'] = 'M'
+ return performWaterRequest()
+
+def performWaterRequest():
+ waterUsageResponse = requests.post(
+ waterRequestEndpoint,
+ cookies=usageRequestCookies,
+ headers=genericRequestHeaders,
+ json=waterUsageRequestJson
+ )
+ return parseResponse(waterUsageResponse)
+
+def requestWater():
+ return {
+ "day": dayWaterRequest(),
+ "month": monthWaterRequest()
+ }
+
+# Utility methods
+
+def parseResponse(response):
+ # such an icky response from an endpoint
+ # TODO: Remove unneeded JSON entries?
+ return json.loads(response.text.replace("\\\"", "\"").replace("\\\"", "\"").replace("\"{\"", "{\"").replace("}\"}", "}}"))['d']['objUsageGenerationResultSetTwo']
+
+def setupRequestParameters(parameters):
+ # Setup cookies and csrftoken to perform requests
+ usageRequestCookies['ApplicationGatewayAffinityCORS'] = parameters['aga']
+ usageRequestCookies['ApplicationGatewayAffinity'] = parameters['aga']
+ usageRequestCookies['ASP.NET_SessionId'] = parameters['asi']
+ usageRequestCookies['SCP'] = parameters['lt']
+ genericRequestHeaders['csrftoken'] = parameters['ct']
+
+# Service calling method
+
+def request(requestParameters):
+ setupRequestParameters(requestParameters)
+ return {
+ "electric": requestElectric(),
+ "water": requestWater()
+ }
+