6 from itertools import islice
7 from typing import List
12 from wrpylib.json_tools import order_json_keys, format_json
13 from wrpylib.mwapi import WikiSite, page_json
14 from wrpylib.vao import Vao
17 def update_sledrun(vao: Vao, db_cities: sqlite3.Connection, site: WikiSite, title: str):
18 sledrun_json_page = site.query_page(f'{title}/Rodelbahn.json')
19 sledrun_json = page_json(sledrun_json_page)
20 sledrun_json_orig = sledrun_json.copy()
22 car_parking = sledrun_json.get('car_parking')
26 parking = car_parking[0].get('position', {}).get('position')
29 parking_lon = parking['longitude']
30 parking_lat = parking['latitude']
32 sql = 'select Name, st_x(geometry) as lon, st_y(geometry) as lat from cities where ' \
33 'st_distance(geometry, st_point(?, ?), 0) < ?;'
36 for row in db_cities.execute(sql, [parking_lon, parking_lat, max_dist_m]):
37 city_name, city_lon, city_lat = row
38 print(f"* {city_name}")
40 'originCoordLat': city_lat,
41 'originCoordLong': city_lon,
42 'destCoordLat': parking_lat,
43 'destCoordLong': parking_lon,
44 'groupFilter': 'API_CAR',
45 'totalCar': '1|evnt=0,aevnt=0,tsta=0,htsta=0,getInitEndTimes=0',
47 response = vao.trip(parameter).json()
48 trip = response.get('Trip', [])
50 leg_list = trip[0].get('LegList', {}).get('Leg', [])
53 duration = isodate.parse_duration(leg['duration'])
55 co2_kg = trip[0]['Eco']['co2']
56 print(duration, dist_m, co2_kg)
61 def update_car_distances(ini_files: List[str]):
62 db_cities = sqlite3.connect('/home/philipp/projects/winterrodeln/geodata/Ausgangspunkte.sqlite')
63 db_cities.enable_load_extension(True)
64 db_cities.execute("SELECT load_extension('mod_spatialite');")
66 site = WikiSite(ini_files)
67 vao = Vao(site.config.get('vao', 'access_id'))
68 for result in site.query(list='categorymembers', cmtitle='Kategorie:Rodelbahn', cmlimit='max'):
69 for page in result['categorymembers']:
70 update_sledrun(vao, db_cities, site, page['title'])
74 parser = argparse.ArgumentParser(description='Update car distance information in sledrun JSON files.')
75 parser.add_argument('inifile', nargs='+', help='inifile.ini, see: https://www.winterrodeln.org/trac/wiki/ConfigIni')
76 args = parser.parse_args()
77 update_car_distances(args.inifile)
80 if __name__ == '__main__':