Nahrát soubory do „/“
This commit is contained in:
70
server.js
Normal file
70
server.js
Normal file
@ -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}`);
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user