]> ToastFreeware Gitweb - philipp/winterrodeln/wrpylib.git/blob - scripts/update_car_distances.py
Call VAO.
[philipp/winterrodeln/wrpylib.git] / scripts / update_car_distances.py
1 #!/usr/bin/python
2 import argparse
3 import csv
4 import re
5 import sqlite3
6 from itertools import islice
7 from typing import List
8
9 import jsonschema
10
11 from wrpylib.json_tools import order_json_keys, format_json
12 from wrpylib.mwapi import WikiSite, page_json
13 from wrpylib.vao import Vao
14
15
16 def update_sledrun(vao: Vao, db_cities: sqlite3.Connection, site: WikiSite, title: str):
17     sledrun_json_page = site.query_page(f'{title}/Rodelbahn.json')
18     sledrun_json = page_json(sledrun_json_page)
19     sledrun_json_orig = sledrun_json.copy()
20
21     car_parking = sledrun_json.get('car_parking')
22     if not car_parking:
23         return
24
25     parking = car_parking[0].get('position', {}).get('position')
26     if not parking:
27         return
28     parking_lon = parking['longitude']
29     parking_lat = parking['latitude']
30
31     sql = 'select Name, st_x(geometry) as lon, st_y(geometry) as lat from cities where ' \
32           'st_distance(geometry, st_point(?, ?), 0) < ?;'
33     max_dist_m = 50000
34     print(title)
35     for row in db_cities.execute(sql, [parking_lon, parking_lat, max_dist_m]):
36         city_name, city_lon, city_lat = row
37         print(f"* {city_name}")
38         parameter = {
39             'originCoordLat': city_lat,
40             'originCoordLong': city_lon,
41             'destCoordLat': parking_lat,
42             'destCoordLong': parking_lon,
43             'groupFilter': 'API_CAR',
44         }
45         response = vao.trip(parameter).json()
46         print(response)
47
48     print()
49
50
51 def update_car_distances(ini_files: List[str]):
52     db_cities = sqlite3.connect('/home/philipp/projects/winterrodeln/geodata/Ausgangspunkte.sqlite')
53     db_cities.enable_load_extension(True)
54     db_cities.execute("SELECT load_extension('mod_spatialite');")
55
56     site = WikiSite(ini_files)
57     vao = Vao(site.config.get('vao', 'access_id'))
58     for result in site.query(list='categorymembers', cmtitle='Kategorie:Rodelbahn', cmlimit='max'):
59         for page in result['categorymembers']:
60             update_sledrun(vao, db_cities, site, page['title'])
61
62
63 def main():
64     parser = argparse.ArgumentParser(description='Update car distance information in sledrun JSON files.')
65     parser.add_argument('inifile', nargs='+', help='inifile.ini, see: https://www.winterrodeln.org/trac/wiki/ConfigIni')
66     args = parser.parse_args()
67     update_car_distances(args.inifile)
68
69
70 if __name__ == '__main__':
71     main()