i am making a Python script to check my power prices. and i cannot figure out how to handle this data, when the the list object is a timestamp...
in example this query
{
"2022-07-19T00:00:00 02:00": {
"NOK_per_kWh": 1.5862,
"valid_from": "2022-07-19T00:00:00 02:00",
"valid_to": "2022-07-19T01:00:00 02:00"
},
"2022-07-19T01:00:00 02:00": {
"NOK_per_kWh": 1.5942,
"valid_from": "2022-07-19T01:00:00 02:00",
"valid_to": "2022-07-19T02:00:00 02:00"
},
"2022-07-19T02:00:00 02:00": {
"NOK_per_kWh": 2.5051,
"valid_from": "2022-07-19T02:00:00 02:00",
"valid_to": "2022-07-19T03:00:00 02:00"
},
"2022-07-19T03:00:00 02:00": {
"NOK_per_kWh": 1.4132,
"valid_from": "2022-07-19T03:00:00 02:00",
"valid_to": "2022-07-19T04:00:00 02:00"
},
"2022-07-19T04:00:00 02:00": {
"NOK_per_kWh": 2.7307,
"valid_from": "2022-07-19T04:00:00 02:00",
"valid_to": "2022-07-19T05:00:00 02:00"
}
}
this is what i get from the api, and i would like to know how to handle it.
i have been googling, an i cannot find my solution.
CodePudding user response:
I suppose that by "handle" you mean to iterate over timestamped objects and access all inner values:
for timestamp in data.keys():
print(data[timestamp]["NOK_per_kWh"])
}
or
for timestamp, obj in data.items():
print(timestamp, obj["valid_from"])
}
CodePudding user response:
Really depends on what you mean by "handle" it. This is a weird format where everything after the " " indicates the local time offset from standard time (Norway is 2 hrs from the UST), so depends on whether you want to extract the dates in UST or Norway's local timezone.
If just UST, you can cut everything after the " " off, like so:
from datetime import datetime
def extract_ust(t):
return datetime.strptime(t.split(" ")[0], "%Y-%m-%dT%H:%M:%S")
If you want local Norway time, you can do something like:
from datetime import datetime, timedelta
def extract_local(t):
ust = datetime.strptime(t.split(" ")[0], "%Y-%m-%dT%H:%M:%S")
o_dt = datetime.strptime(t.split(" ")[1], "%H:%M")
offset = timedelta(hours=o_dt.hour, minutes=o_dt.minute)
return ust offset
If you're trying to extract the NOK_per_kWh for a given datetime in local Norway time, you can use something like:
def extract_price(returned_json, t=None, time_format="%Y-%m-%dT%H:%M:%S"):
if t:
search_t = datetime.strptime(t, time_format)
else:
search_t = datetime.now()
for entry in returned_json.values():
if extract_local(entry["valid_from"]) <= search_t:
if search_t < extract_local(entry["valid_to"]):
return entry["NOK_per_kWh"]
The same function above can be used for UST input by substituting extract_local() for extract_ust(). The above assumes the input time t
is in a standard format with the " " at the end.