diff --git a/rapport.py b/rapport.py index 18162b3..b9eada1 100644 --- a/rapport.py +++ b/rapport.py @@ -2,11 +2,12 @@ """ Adres Analyse - Rapport generator Gebruikt PDOK voor geocoding, ORS voor isochronen/routes en PostGIS OSM-data voor voorzieningen. -Slaat rapport ook op in Obsidian vault (map: huizenjacht). +Slaat rapport en HTML-kaarten op in /root/mkdocs/docs/docs/Huizenjacht/ """ import json import sys +import os import urllib.request import urllib.parse import re @@ -31,8 +32,7 @@ from voorzieningen import analyse_voorzieningen, format_voorzieningen_markdown # Config ORS_BASE = "http://192.168.1.71:9080/ors/v2" PDOK_BASE = "https://api.pdok.nl/bzk/locatieserver/search/v3_1" -OBSIDIAN_BASE = "http://192.168.1.50:27123" -OBSIDIAN_TOKEN = "90ec" + "6de948dc8ef7832fda3516fd900c7a3071dd526edf852ade145aa9daf637" +MKDOCS_DIR = "/root/mkdocs/docs/docs/Huizenjacht" def geocode_adres(adres): """Geocode adres naar coördinaten via PDOK Locatieserver""" @@ -98,28 +98,18 @@ def format_oppervlakte(m2): else: return f"{m2:.0f} m²" -def schrijf_naar_obsidian(rapport_text, adres, subpath="huizenjacht", ext=".md"): - """Schrijf rapport naar Obsidian vault""" +def schrijf_naar_mkdocs(content, adres, ext=".md"): + """Schrijf content naar MkDocs docs map als bestand""" + os.makedirs(MKDOCS_DIR, exist_ok=True) safe_name = re.sub(r'[^a-zA-Z0-9]+', '-', adres) safe_name = safe_name.strip('-') - filename = f"{subpath}/{safe_name}_{datetime.now().strftime('%Y%m%d_%H%M%S')}{ext}" - - content_type = "text/html" if ext == ".html" else "text/markdown" - req = urllib.request.Request( - f"{OBSIDIAN_BASE}/vault/{filename}", - data=rapport_text.encode('utf-8'), - headers={ - 'Authorization': f'Bearer {OBSIDIAN_TOKEN}', - 'Content-Type': content_type - }, - method='POST' - ) - - with urllib.request.urlopen(req, timeout=10) as resp: - if resp.status in [200, 204]: - return filename - else: - return None + filename = f"{safe_name}_{datetime.now().strftime('%Y%m%d_%H%M%S')}{ext}" + filepath = os.path.join(MKDOCS_DIR, filename) + + with open(filepath, 'w', encoding='utf-8') as f: + f.write(content) + + return filepath, filename def genereer_isochroon_html(adres_naam, lat, lon, auto_iso, fiets_iso): """Genereer een zelf-contained HTML kaart met Leaflet""" @@ -156,7 +146,7 @@ var autoLayer = L.geoJSON(autoGeojson, {{ style: {{ color: '#2563eb', weight: 2, fillColor: '#3b82f6', fillOpacity: 0.2 }}, onEachFeature: function(feature, layer) {{ var props = feature.properties; - layer.bindPopup('Auto 20 min
Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\u00b2
Reach factor: ' + props.reachfactor.toFixed(3)); + layer.bindPopup('Auto 20 min
Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\\u00b2
Reach factor: ' + props.reachfactor.toFixed(3)); }} }}).addTo(map); @@ -164,7 +154,7 @@ var fietsLayer = L.geoJSON(fietsGeojson, {{ style: {{ color: '#16a34a', weight: 2, fillColor: '#22c55e', fillOpacity: 0.2 }}, onEachFeature: function(feature, layer) {{ var props = feature.properties; - layer.bindPopup('Fiets 30 min
Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\u00b2
Reach factor: ' + props.reachfactor.toFixed(3)); + layer.bindPopup('Fiets 30 min
Oppervlakte: ' + (props.area/1000000).toFixed(1) + ' km\\u00b2
Reach factor: ' + props.reachfactor.toFixed(3)); }} }}).addTo(map); @@ -196,7 +186,6 @@ def maak_isochroon_screenshot(html_content, width=1280, height=900, resize_width return None, "Pillow niet geïnstalleerd" import tempfile - import os # Write HTML to temp file with tempfile.NamedTemporaryFile(mode='w', suffix='.html', delete=False, encoding='utf-8') as f: @@ -231,7 +220,7 @@ def maak_isochroon_screenshot(html_content, width=1280, height=900, resize_width return b64, None def print_isochroon_sectie(titel, icoon, iso_data, rapport_lines=None): - """Print isochroon sectie; optioneel ook toevoegen aan rapport_lines voor Obsidian""" + """Print isochroon sectie; optioneel ook toevoegen aan rapport_lines""" text = f"{icoon} **{titel}**" print(text) if rapport_lines is not None: @@ -293,15 +282,12 @@ def genereer_rapport(adres_input): print_line(format_voorzieningen_markdown("🏫 **Scholen**", voorzieningen['scholen'])) print_line() - # Genereer interactieve HTML kaart en upload naar Obsidian + # Genereer interactieve HTML kaart en sla op in MkDocs.map html_content = genereer_isochroon_html( locatie['adres'], locatie['lat'], locatie['lon'], auto_iso, fiets_iso ) - html_path = schrijf_naar_obsidian(html_content, locatie['adres'], subpath="huizenjacht", ext=".html") - if html_path: - print_line(f"🗺️ **[Bekijk interactieve isochroon kaart]({html_path})**") - else: - print_line("⚠️ Kon interactieve kaart niet opslaan in Obsidian") + html_filepath, html_filename = schrijf_naar_mkdocs(html_content, locatie['adres'], ext=".html") + print_line(f"🗺️ **Interactieve kaart opgeslagen:** `{html_filepath}`") # Genereer screenshot en embed in markdown b64_img, err = maak_isochroon_screenshot(html_content) @@ -313,7 +299,7 @@ def genereer_rapport(adres_input): else: print_line(f"⚠️ Kon geen screenshot maken: {err}") - # Sla ook ruwe geojson op (lokaal, niet in Obsidian) + # Sla ook ruwe geojson op output_file = f"/tmp/isochronen_{datetime.now().strftime('%Y%m%d_%H%M%S')}.geojson" with open(output_file, 'w') as f: json.dump({'auto_20_min': auto_iso, 'fiets_30_min': fiets_iso}, f) @@ -322,13 +308,10 @@ def genereer_rapport(adres_input): print_line("---") print_line("_Onderdelen: geocoding, isochronen, voorzieningen_") - # Schrijf rapport naar Obsidian + # Schrijf rapport naar MkDocs map print_line() - md_path = schrijf_naar_obsidian('\n'.join(rapport_lines), locatie['adres']) - if md_path: - print_line(f"📝 **Opgeslagen in Obsidian:** `{md_path}`") - else: - print_line("⚠️ Obsidian upload mislukt") + md_filepath, md_filename = schrijf_naar_mkdocs('\n'.join(rapport_lines), locatie['adres'], ext=".md") + print_line(f"📝 **Rapport opgeslagen:** `{md_filepath}`") if __name__ == '__main__': adres = sys.argv[1] if len(sys.argv) > 1 else "Griendvelden 14 Best"