#!/usr/bin/python import argparse import csv import re import sqlite3 from itertools import islice from typing import List import jsonschema from wrpylib.json_tools import order_json_keys, format_json from wrpylib.mwapi import WikiSite, page_json from wrpylib.vao import Vao def update_sledrun(vao: Vao, db_cities: sqlite3.Connection, site: WikiSite, title: str): sledrun_json_page = site.query_page(f'{title}/Rodelbahn.json') sledrun_json = page_json(sledrun_json_page) sledrun_json_orig = sledrun_json.copy() car_parking = sledrun_json.get('car_parking') if not car_parking: return parking = car_parking[0].get('position', {}).get('position') if not parking: return parking_lon = parking['longitude'] parking_lat = parking['latitude'] sql = 'select Name, st_x(geometry) as lon, st_y(geometry) as lat from cities where ' \ 'st_distance(geometry, st_point(?, ?), 0) < ?;' max_dist_m = 50000 print(title) for row in db_cities.execute(sql, [parking_lon, parking_lat, max_dist_m]): city_name, city_lon, city_lat = row print(f"* {city_name}") parameter = { 'originCoordLat': city_lat, 'originCoordLong': city_lon, 'destCoordLat': parking_lat, 'destCoordLong': parking_lon, 'groupFilter': 'API_CAR', } response = vao.trip(parameter).json() print(response) print() def update_car_distances(ini_files: List[str]): db_cities = sqlite3.connect('/home/philipp/projects/winterrodeln/geodata/Ausgangspunkte.sqlite') db_cities.enable_load_extension(True) db_cities.execute("SELECT load_extension('mod_spatialite');") site = WikiSite(ini_files) vao = Vao(site.config.get('vao', 'access_id')) for result in site.query(list='categorymembers', cmtitle='Kategorie:Rodelbahn', cmlimit='max'): for page in result['categorymembers']: update_sledrun(vao, db_cities, site, page['title']) def main(): parser = argparse.ArgumentParser(description='Update car distance information in sledrun JSON files.') parser.add_argument('inifile', nargs='+', help='inifile.ini, see: https://www.winterrodeln.org/trac/wiki/ConfigIni') args = parser.parse_args() update_car_distances(args.inifile) if __name__ == '__main__': main()