feat: /api/v2/analiza/* endpoints - sport analytics backend
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python3
|
||||
# Fajl: objekti_enrich_address.py | v1.0 | 05.05.2026
|
||||
# Author: Damir Radulić
|
||||
# Svrha: Reverse-geocode lat/lng → adresa za sportski_objekti
|
||||
import os, time, json
|
||||
import psycopg2, requests
|
||||
|
||||
DSN = f"host=10.10.0.2 port=6432 dbname=rinet_v3 user=rinet password={os.environ['DB_PASSWORD']}"
|
||||
HEADERS = {"User-Agent": "Ri.NET PGŽ Sport (dradulic@outlook.com)"}
|
||||
|
||||
conn = psycopg2.connect(DSN); conn.autocommit = True
|
||||
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("""
|
||||
SELECT id, naziv, lat, lng FROM pgz_sport.sportski_objekti
|
||||
WHERE aktivan = true AND lat IS NOT NULL AND lng IS NOT NULL
|
||||
AND (adresa IS NULL OR adresa = '')
|
||||
LIMIT 60
|
||||
""")
|
||||
rows = cur.fetchall()
|
||||
|
||||
print(f"Total: {len(rows)} objekata bez adrese")
|
||||
|
||||
for i, (oid, naziv, lat, lng) in enumerate(rows):
|
||||
try:
|
||||
# Nominatim reverse geocoding
|
||||
r = requests.get(
|
||||
f"https://nominatim.openstreetmap.org/reverse",
|
||||
params={"lat": lat, "lon": lng, "format": "json", "accept-language": "hr"},
|
||||
headers=HEADERS, timeout=10
|
||||
)
|
||||
if r.status_code == 200:
|
||||
d = r.json()
|
||||
addr = d.get("display_name", "")
|
||||
# Krat: ulica + broj + grad
|
||||
a = d.get("address", {})
|
||||
short = []
|
||||
for k in ["road", "house_number", "suburb", "city", "town", "village"]:
|
||||
if a.get(k): short.append(a[k])
|
||||
addr_short = ", ".join(short[:4]) or addr[:100]
|
||||
|
||||
with conn.cursor() as cur:
|
||||
cur.execute("UPDATE pgz_sport.sportski_objekti SET adresa = %s WHERE id = %s", (addr_short, oid))
|
||||
print(f" [{i+1}/{len(rows)}] {naziv} → {addr_short}")
|
||||
time.sleep(1.1) # Nominatim rate-limit 1 req/s
|
||||
except Exception as e:
|
||||
print(f" [FAIL] {naziv}: {e}")
|
||||
|
||||
print("DONE")
|
||||
Reference in New Issue
Block a user