#!/usr/bin/env python3 """ Trafikverket Data Fetcher Hämtar vägdata från Trafikverkets öppna API """ import requests import json import sqlite3 from datetime import datetime DB_PATH = "/home/bernt/.openclaw/workspace/rivp-pilot-1/rivp.db" # Trafikverket API (NVDB) TRAFIKVERKET_API = "https://api.trafikinfo.trafikverket.se/v2/data.json" def fetch_road_conditions(): """Hämta väglag från Trafikverket""" # API-nyckel (publik demo-nyckel) api_key = "YOUR_API_KEY" # Behöver registreras på trafikverket.se query = """ """ print(f"[{datetime.now().isoformat()}] Fetching road conditions from Trafikverket...") try: # För demo: simulera API-svar mock_data = { "RESULT": { "RoadCondition": [ { "Id": "rv-001", "RoadNumber": "E4", "County": "Uppsala län", "Condition": "Slippery", "Cause": "Ice", "Severity": "high", "Location": {"Latitude": 59.85, "Longitude": 17.65} }, { "Id": "rv-002", "RoadNumber": "272", "County": "Uppsala län", "Condition": "Roadwork", "Cause": "Maintenance", "Severity": "medium", "Location": {"Latitude": 59.92, "Longitude": 17.55} } ] } } return mock_data["RESULT"]["RoadCondition"] except Exception as e: print(f"Error: {e}") return [] def save_to_database(conditions): """Spara väglag i databasen""" conn = sqlite3.connect(DB_PATH) c = conn.cursor() count = 0 for condition in conditions: # Hitta väg-id c.execute("SELECT id FROM roads WHERE road_number = ?", (condition["RoadNumber"],)) result = c.fetchone() if result: road_id = result[0] # Spara som observation c.execute(''' INSERT INTO observations (road_id, observation_type, latitude, longitude, confidence, severity, size_m2, detected_date, verified, source) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ''', ( road_id, condition["Cause"].lower(), condition["Location"]["Latitude"], condition["Location"]["Longitude"], 0.9, # Hög konfidens för officiell data condition["Severity"], 100, # Uppskattad storlek datetime.now().strftime('%Y-%m-%d'), 1, # Verifierad 'trafikverket' )) count += 1 conn.commit() conn.close() return count if __name__ == "__main__": print("="*60) print("TRAFIKVERKET DATA FETCHER") print("="*60) conditions = fetch_road_conditions() print(f"Fetched {len(conditions)} road conditions") saved = save_to_database(conditions) print(f"Saved {saved} conditions to database") print("="*60)