46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
import requests
|
|
import xmltodict
|
|
import json
|
|
import os
|
|
import time
|
|
|
|
def update_station_data(jsonpath, max_age=86400):
|
|
if not update_file(jsonpath, max_age=max_age):
|
|
print(f"file {jsonpath} was modified less than {max_age}s ago, skipping")
|
|
return
|
|
|
|
url = "https://iris.noncd.db.de/iris-tts/timetable/station/*"
|
|
x = requests.get(url)
|
|
if x.status_code != 200:
|
|
raise ConnectionError(f"status code {x.status_code}")
|
|
|
|
xmlstr = x.text
|
|
|
|
stations_list = xmltodict.parse(xmlstr, )['stations']['station']
|
|
|
|
stations_dict = {}
|
|
|
|
for station in stations_list:
|
|
name = station.pop("@name")
|
|
|
|
local_station = {k.strip('@'): v for k,v in station.items()}
|
|
|
|
stations_dict[name] = local_station
|
|
|
|
with open(jsonpath, 'w') as f:
|
|
f.write(json.dumps(stations_dict, indent=4, ensure_ascii=False))
|
|
|
|
def update_file(fpath, max_age=86400):
|
|
if os.path.exists(fpath):
|
|
mtime = os.path.getmtime(fpath)
|
|
ctime = time.time()
|
|
if ctime - mtime < max_age:
|
|
return False
|
|
return True
|
|
|
|
def main():
|
|
update_station_data("./stations/stations2.json")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|