From 72d08e98e1ceff709d248a92232436ab0aa990f2 Mon Sep 17 00:00:00 2001 From: Ludo Date: Sun, 6 Jul 2025 23:08:25 +0000 Subject: [PATCH] =?UTF-8?q?Nahr=C3=A1t=20soubory=20do=20=E2=80=9E/?= =?UTF-8?q?=E2=80=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.js | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 server.js diff --git a/server.js b/server.js new file mode 100644 index 0000000..a5cef6c --- /dev/null +++ b/server.js @@ -0,0 +1,70 @@ +// Node.js API server to fetch and merge Slovak company data by IČO +// from two Finančná správa SR API endpoints with 404-safe handling + +const express = require("express"); +const axios = require("axios"); + +const app = express(); +const PORT = 3000; + +// Insert your API key below +const API_KEY = "2t5lK487ces7Rc4oEHrIwCjB5DpoZUBChQxCLBiSrwGNdEubKpraAtQLEiJmPXkdjNw5FssYpuO0LXSZpk3U6oqePyFaIGHokg4WNPEM0302X2BK4iXpkFv9Qg7jyeUXh50bWVExVrVSBuOnOQpBzzdJ1k1D54b115MD3y5ticWxvGDLUaqLQgA6nzFgbYOx6dR0ToJUxU714TetLBZCBy0xKSnBaOrxYv10I1gZ1q4rQx4Q8k7BTR6MaP"; + +// Safe fetch wrapper to handle 404 as empty result +async function fetchSafe(url) { + try { + const res = await axios.get(url, { + headers: { + accept: "application/json", + key: API_KEY + } + }); + return res.data?.data || []; + } catch (err) { + if (err.response?.status === 404) { + return []; // return empty list if not found + } + throw err; + } +} + +// API endpoint: /api/lookup?ico=XXXXXXXX +app.get("/api/lookup", async (req, res) => { + const ico = req.query.ico; + + if (!ico) { + return res.status(400).json({ error: "Missing ICO parameter" }); + } + + const endpoints = [ + `https://iz.opendata.financnasprava.sk/api/data/ds_dsrdp/search?page=1&column=ico&search=${ico}`, + `https://iz.opendata.financnasprava.sk/api/data/ds_dphs/search?page=1&column=ico&search=${ico}` + ]; + + try { + const [data1, data2] = await Promise.all([ + fetchSafe(endpoints[0]), + fetchSafe(endpoints[1]) + ]); + + const merged = [...data1, ...data2].filter( + (item, index, self) => + index === self.findIndex((t) => + JSON.stringify(t) === JSON.stringify(item) + ) + ); + + res.json({ + source1_count: data1.length, + source2_count: data2.length, + merged_count: merged.length, + data: merged + }); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}); + +app.listen(PORT, () => { + console.log(`API server running at http://localhost:${PORT}`); +}); \ No newline at end of file