// 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}`); });