diff --git a/api.php b/api.php index 076f58d..1cfc3d7 100644 --- a/api.php +++ b/api.php @@ -287,70 +287,40 @@ switch ($action) { break; } - $query = normalizeAddress($_GET['osoite'] ?? ''); - $postinumero = trim($_GET['postinumero'] ?? ''); + // Parametrit: osoite (kadunnimi + numero), postinumero, kaupunki + $queryOsoite = normalizeAddress($_GET['osoite'] ?? ''); + $queryPostinumero = trim($_GET['postinumero'] ?? ''); + $queryKaupunki = strtolower(trim($_GET['kaupunki'] ?? '')); - if (empty($query) && empty($postinumero)) { + if (empty($queryOsoite) || empty($queryPostinumero) || empty($queryKaupunki)) { http_response_code(400); - echo json_encode(['error' => 'Anna osoite tai postinumero']); + echo json_encode(['error' => 'Anna osoite, postinumero ja kaupunki']); break; } $customers = loadCustomers(); - $matches = []; + $found = false; foreach ($customers as $c) { foreach ($c['liittymat'] ?? [] as $l) { $addr = normalizeAddress($l['asennusosoite'] ?? ''); $zip = trim($l['postinumero'] ?? ''); $city = strtolower(trim($l['kaupunki'] ?? '')); - $hit = false; - // Postinumero-haku - if (!empty($postinumero) && $zip === $postinumero) { - $hit = true; - } - - // Osoitehaku (sisältää haun) - if (!empty($query) && !empty($addr)) { - if (strpos($addr, $query) !== false || strpos($query, $addr) !== false) { - $hit = true; + // Kaikki kolme pitää mätsätä: osoite, postinumero, kaupunki + if ($zip === $queryPostinumero && $city === $queryKaupunki) { + // Osoite-match: tarkka sisältö-match + if (!empty($addr) && !empty($queryOsoite)) { + if (strpos($addr, $queryOsoite) !== false || strpos($queryOsoite, $addr) !== false) { + $found = true; + break 2; + } } - // Kadunnimi-match (ilman numeroa) - $queryStreet = trim(preg_replace('/\d+.*$/', '', $query)); - $addrStreet = trim(preg_replace('/\d+.*$/', '', $addr)); - if (!empty($queryStreet) && !empty($addrStreet) && strpos($addrStreet, $queryStreet) !== false) { - $hit = true; - } - } - - if ($hit) { - // Palauta VAIN osoitetieto ja nopeus - ei asiakastietoja - $matches[] = [ - 'osoite' => $l['asennusosoite'] ?? '', - 'postinumero' => $zip, - 'kaupunki' => $l['kaupunki'] ?? '', - 'nopeus' => $l['liittymanopeus'] ?? '', - ]; } } } - // Poista duplikaatit (sama osoite eri asiakkailla) - $unique = []; - $seen = []; - foreach ($matches as $m) { - $key = normalizeAddress($m['osoite'] . $m['postinumero']); - if (!isset($seen[$key])) { - $unique[] = $m; - $seen[$key] = true; - } - } - - echo json_encode([ - 'saatavilla' => count($unique) > 0, - 'kohteet' => $unique, - 'maara' => count($unique), - ]); + // Palauta VAIN true/false - ei osoitteita, nopeuksia tai muuta dataa + echo json_encode(['saatavilla' => $found]); break; // ---------- CONFIG (admin) ---------- diff --git a/index.html b/index.html index ee6a01c..b47a05d 100644 --- a/index.html +++ b/index.html @@ -286,17 +286,22 @@
Endpoint:
GET https://intra.cuitunet.fi/api.php?action=saatavuus
Parametrit:
key = API-avain (pakollinen)
- • osoite = Haettava osoite (esim. "Kauppakatu 5")
+ • osoite = Katuosoite ja numero (esim. "Kauppakatu 5")
postinumero = Postinumero (esim. "20100")
- Anna vähintään toinen: osoite tai postinumero.
+ • kaupunki = Kaupunki (esim. "Turku")
+ Kaikki kolme pakollisia.
Esimerkki:
- api.php?action=saatavuus&key=AVAIN&osoite=Kauppakatu+5
+ api.php?action=saatavuus&key=AVAIN&osoite=Kauppakatu+5&postinumero=20100&kaupunki=Turku
Vastaus:
- {"saatavilla":true,"kohteet":[{"osoite":"...","postinumero":"...","kaupunki":"...","nopeus":"..."}],"maara":1}
+ {"saatavilla":true} tai {"saatavilla":false}

Testaa API

-
- +
+ +
+ + +
diff --git a/script.js b/script.js index bf33b02..64289d6 100644 --- a/script.js +++ b/script.js @@ -928,7 +928,7 @@ async function loadSettings() { document.getElementById('settings-api-key').value = config.api_key || ''; document.getElementById('settings-cors').value = (config.cors_origins || ['https://cuitunet.fi', 'https://www.cuitunet.fi']).join('\n'); const key = config.api_key || 'AVAIN'; - document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${key}&osoite=Kauppakatu+5`; + document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${key}&osoite=Kauppakatu+5&postinumero=20100&kaupunki=Turku`; } catch (e) { console.error(e); } } @@ -936,7 +936,7 @@ document.getElementById('btn-generate-key').addEventListener('click', async () = try { const config = await apiCall('generate_api_key', 'POST'); document.getElementById('settings-api-key').value = config.api_key || ''; - document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${config.api_key}&osoite=Kauppakatu+5`; + document.getElementById('api-example-url').textContent = `api.php?action=saatavuus&key=${config.api_key}&osoite=Kauppakatu+5&postinumero=20100&kaupunki=Turku`; } catch (e) { alert(e.message); } }); @@ -951,16 +951,17 @@ document.getElementById('btn-save-settings').addEventListener('click', async () }); document.getElementById('btn-test-api').addEventListener('click', async () => { - const address = document.getElementById('test-api-address').value.trim(); + const osoite = document.getElementById('test-api-address').value.trim(); + const postinumero = document.getElementById('test-api-zip').value.trim(); + const kaupunki = document.getElementById('test-api-city').value.trim(); const apiKey = document.getElementById('settings-api-key').value; - if (!address) { alert('Anna osoite tai postinumero'); return; } + if (!osoite || !postinumero || !kaupunki) { alert('Täytä osoite, postinumero ja kaupunki'); return; } const result = document.getElementById('test-api-result'); result.style.display = 'block'; result.textContent = 'Haetaan...'; try { - const isZip = /^\d{5}$/.test(address); - const param = isZip ? `postinumero=${encodeURIComponent(address)}` : `osoite=${encodeURIComponent(address)}`; - const res = await fetch(`${API}?action=saatavuus&key=${encodeURIComponent(apiKey)}&${param}`); + const params = `osoite=${encodeURIComponent(osoite)}&postinumero=${encodeURIComponent(postinumero)}&kaupunki=${encodeURIComponent(kaupunki)}`; + const res = await fetch(`${API}?action=saatavuus&key=${encodeURIComponent(apiKey)}&${params}`); const data = await res.json(); result.textContent = JSON.stringify(data, null, 2); } catch (e) { result.textContent = 'Virhe: ' + e.message; }