monitoring/ffmap/hoodtools.py

70 lines
1.9 KiB
Python

#!/usr/bin/python3
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
from ffmap.mysqltools import FreifunkMySQL
import urllib.request, urllib.error, json
import math
def update_hoods_v2(mysql):
try:
with urllib.request.urlopen("http://keyserver.freifunk-franken.de/v2/hoods.php") as url:
hoodskx = json.loads(url.read().decode())
kx_keys = []
kx_data = []
for kx in hoodskx:
kx_keys.append(kx["id"])
kx_data.append((kx["id"],kx["name"],kx["net"],kx.get("lat",None),kx.get("lon",None),))
# Delete entries in DB where hood is missing in KeyXchange
db_keys = mysql.fetchall("SELECT id FROM hoodsv2",(),"id")
for n in db_keys:
if n in kx_keys:
continue
mysql.execute("DELETE FROM hoodsv2 WHERE id = %s",(n,))
# Create/update entries from KeyXchange to DB
mysql.executemany("""
INSERT INTO hoodsv2 (id, name, net, lat, lng)
VALUES (%s, %s, %s, %s, %s)
ON DUPLICATE KEY UPDATE
name=VALUES(name),
net=VALUES(net),
lat=VALUES(lat),
lng=VALUES(lng)
""",kx_data)
except urllib.error.HTTPError as e:
return
def update_hoods_poly(mysql):
try:
#with urllib.request.urlopen("http://keyserver.freifunk-franken.de/v2/hoods.php") as url:
with urllib.request.urlopen("https://lauch.org/keyxchange/hoods.php") as url:
hoodskx = json.loads(url.read().decode())
mysql.execute("DELETE FROM polygons",())
mysql.execute("DELETE FROM polyhoods",())
for kx in hoodskx:
for polygon in kx.get("polygons",()):
mysql.execute("""
INSERT INTO polyhoods (hoodid)
VALUES (%s)
""",(kx["id"],))
newid = mysql.cursor().lastrowid
vertices = []
for p in polygon:
vertices.append((newid,p["lat"],p["lon"],))
mysql.executemany("""
INSERT INTO polygons (polyid, lat, lon)
VALUES (%s, %s, %s)
""",vertices)
except urllib.error.HTTPError as e:
return