COVID-19 Czech Individuals Data (cs_CZ)
DeprecatedView all Actors
This Actor is unavailable because the developer has decided to deprecate it. Would you like to try a similar Actor instead?
See alternative ActorsCOVID-19 Czech Individuals Data (cs_CZ)
sablatura/covid-hygiena-osoby
Cleaned, smaller and human-readable API with Czech Individuals Data from regional hygiene stations (KHS) in the Czech language.
Dockerfile
1# Dockerfile contains instructions how to build a Docker image that
2# will contain all the code and configuration needed to run your actor.
3# For a full Dockerfile reference,
4# see https://docs.docker.com/engine/reference/builder/
5
6# First, specify the base Docker image. Apify provides the following
7# base images for your convenience:
8# apify/actor-node-basic (Node.js on Alpine Linux, small and fast)
9# apify/actor-node-chrome (Node.js + Chrome on Debian)
10# apify/actor-node-chrome-xvfb (Node.js + Chrome + Xvfb on Debian)
11# For more information, see https://docs.apify.com/actor/build#base-images
12# Note that you can use any other image from Docker Hub.
13FROM apify/actor-node-chrome
14
15# Second, copy just package.json since it should be the only file
16# that affects "npm install" in the next step, to speed up the build
17COPY package.json ./
18
19# Install NPM packages, skip optional and development dependencies to
20# keep the image small. Avoid logging too much and print the dependency
21# tree for debugging
22RUN npm --quiet set progress=false \
23 && npm install --only=prod --no-optional \
24 && echo "Installed NPM packages:" \
25 && npm list || true \
26 && echo "Node.js version:" \
27 && node --version \
28 && echo "NPM version:" \
29 && npm --version
30
31# Next, copy the remaining files and directories with the source code.
32# Since we do this after NPM install, quick build will be really fast
33# for most source file changes.
34COPY . ./
35
36# Optionally, specify how to launch the source code of your actor.
37# By default, Apify's base Docker images define the CMD instruction
38# that runs the Node.js source code using the command specified
39# in the "scripts.start" section of the package.json file.
40# In short, the instruction looks something like this:
41#
42# CMD npm start
main.js
1function generateCountryNames(country) {
2 let returnCountry = country;
3 const countries = [
4 ["AF", "Afghánistán"],
5 ["AX", "Alandy"],
6 ["AL", "Albánie"],
7 ["DZ", "Alžírsko"],
8 ["AS", "Americká Samoa"],
9 ["VI", "Americké Panenské ostrovy"],
10 ["AD", "Andorra"],
11 ["AO", "Angola"],
12 ["AI", "Anguilla"],
13 ["AQ", "Antarktida"],
14 ["AG", "Antigua a Barbuda"],
15 ["AR", "Argentina"],
16 ["AM", "Arménie"],
17 ["AW", "Aruba"],
18 ["AU", "Austrálie"],
19 ["AZ", "Ázerbájdžán"],
20 ["BS", "Bahamy"],
21 ["BH", "Bahrajn"],
22 ["BD", "Bangladéš"],
23 ["BB", "Barbados"],
24 ["BE", "Belgie"],
25 ["BZ", "Belize"],
26 ["BY", "Bělorusko"],
27 ["BJ", "Benin"],
28 ["BM", "Bermudy"],
29 ["BT", "Bhútán"],
30 ["BO", "Bolívie"],
31 ["BQ", "Bonaire, Svatý Eustach a Saba"],
32 ["BA", "Bosna a Hercegovina"],
33 ["BW", "Botswana"],
34 ["BV", "Bouvetův ostrov"],
35 ["BR", "Brazílie"],
36 ["IO", "Britské indickooceánské území"],
37 ["VG", "Britské Panenské ostrovy"],
38 ["BN", "Brunej"],
39 ["BG", "Bulharsko"],
40 ["BF", "Burkina Faso"],
41 ["BI", "Burundi"],
42 ["CK", "Cookovy ostrovy"],
43 ["CW", "Curaçao"],
44 ["TD", "Čad"],
45 ["ME", "Černá Hora"],
46 ["CZ", "Česko"],
47 ["CN", "Čína"],
48 ["DK", "Dánsko"],
49 ["CD", "Konžská demokratická republika"],
50 ["DM", "Dominika"],
51 ["DO", "Dominikánská republika"],
52 ["DJ", "Džibutsko"],
53 ["EG", "Egypt"],
54 ["EC", "Ekvádor"],
55 ["ER", "Eritrea"],
56 ["EE", "Estonsko"],
57 ["ET", "Etiopie"],
58 ["FO", "Faerské ostrovy"],
59 ["FK", "Falklandy (Malvíny)"],
60 ["FJ", "Fidži"],
61 ["PH", "Filipíny"],
62 ["FI", "Finsko"],
63 ["FR", "Francie"],
64 ["GF", "Francouzská Guyana"],
65 ["TF", "Francouzská jižní a antarktická území"],
66 ["PF", "Francouzská Polynésie"],
67 ["GA", "Gabon"],
68 ["GM", "Gambie"],
69 ["GH", "Ghana"],
70 ["GI", "Gibraltar"],
71 ["GD", "Grenada"],
72 ["GL", "Grónsko"],
73 ["GE", "Gruzie"],
74 ["GP", "Guadeloupe"],
75 ["GU", "Guam"],
76 ["GT", "Guatemala"],
77 ["GG", "Guernsey"],
78 ["GN", "Guinea"],
79 ["GW", "Guinea-Bissau"],
80 ["GY", "Guyana"],
81 ["HT", "Haiti"],
82 ["HM", "Heardův ostrov a MacDonaldovy ostrovy"],
83 ["HN", "Honduras"],
84 ["HK", "Hongkong"],
85 ["CL", "Chile"],
86 ["HR", "Chorvatsko"],
87 ["IN", "Indie"],
88 ["ID", "Indonésie"],
89 ["IQ", "Irák"],
90 ["IR", "Írán"],
91 ["IE", "Irsko"],
92 ["IS", "Island"],
93 ["IT", "Itálie"],
94 ["IL", "Izrael"],
95 ["JM", "Jamajka"],
96 ["JP", "Japonsko"],
97 ["YE", "Jemen"],
98 ["JE", "Jersey"],
99 ["ZA", "Jižní Afrika"],
100 ["GS", "Jižní Georgie a Jižní Sandwichovy ostrovy"],
101 ["SS", "Jižní Súdán"],
102 ["JO", "Jordánsko"],
103 ["KY", "Kajmanské ostrovy"],
104 ["KH", "Kambodža"],
105 ["CM", "Kamerun"],
106 ["CA", "Kanada"],
107 ["CV", "Kapverdy"],
108 ["QA", "Katar"],
109 ["KZ", "Kazachstán"],
110 ["KE", "Keòa"],
111 ["KI", "Kiribati"],
112 ["CC", "Kokosové (Keelingovy) ostrovy"],
113 ["CO", "Kolumbie"],
114 ["KM", "Komory"],
115 ["CG", "Konžská republika"],
116 ["KP", "Korejská lidově demokratická republika"],
117 ["KR", "Korejská republika"],
118 ["XK", "Kosovo"],
119 ["CR", "Kostarika"],
120 ["CU", "Kuba"],
121 ["KW", "Kuvajt"],
122 ["CY", "Kypr"],
123 ["KG", "Kyrgyzstán"],
124 ["LA", "Laos"],
125 ["LS", "Lesotho"],
126 ["LB", "Libanon"],
127 ["LR", "Libérie"],
128 ["LY", "Libye"],
129 ["LI", "Lichtenštejnsko"],
130 ["LT", "Litva"],
131 ["LV", "Lotyšsko"],
132 ["LU", "Lucembursko"],
133 ["MO", "Macao"],
134 ["MG", "Madagaskar"],
135 ["HU", "Maïarsko"],
136 ["MK", "Severní Makedonie"],
137 ["MY", "Malajsie"],
138 ["MW", "Malawi"],
139 ["MV", "Maledivy"],
140 ["ML", "Mali"],
141 ["MT", "Malta"],
142 ["IM", "Man"],
143 ["MA", "Maroko"],
144 ["MH", "Marshallovy ostrovy"],
145 ["MQ", "Martinik"],
146 ["MU", "Mauricius"],
147 ["MR", "Mauritánie"],
148 ["YT", "Mayotte"],
149 ["UM", "Menší odlehlé ostrovy USA"],
150 ["MX", "Mexiko"],
151 ["FM", "Mikronésie"],
152 ["MD", "Moldavsko"],
153 ["MC", "Monako"],
154 ["MN", "Mongolsko"],
155 ["MS", "Montserrat"],
156 ["MZ", "Mosambik"],
157 ["MM", "Myanmar"],
158 ["NA", "Namibie"],
159 ["NR", "Nauru"],
160 ["DE", "Německo"],
161 ["NP", "Nepál"],
162 ["NE", "Niger"],
163 ["NG", "Nigérie"],
164 ["NI", "Nikaragua"],
165 ["NU", "Niue"],
166 ["NL", "Nizozemsko"],
167 ["NF", "Norfolk"],
168 ["NO", "Norsko"],
169 ["NC", "Nová Kaledonie"],
170 ["NZ", "Nový Zéland"],
171 ["OM", "Omán"],
172 ["PK", "Pákistán"],
173 ["PW", "Palau"],
174 ["PS", "Palestina"],
175 ["PA", "Panama"],
176 ["PG", "Papua Nová Guinea"],
177 ["PY", "Paraguay"],
178 ["PE", "Peru"],
179 ["PN", "Pitcairn"],
180 ["CI", "Pobřeží slonoviny"],
181 ["PL", "Polsko"],
182 ["PR", "Portoriko"],
183 ["PT", "Portugalsko"],
184 ["AT", "Rakousko"],
185 ["RE", "Réunion"],
186 ["GQ", "Rovníková Guinea"],
187 ["RO", "Rumunsko"],
188 ["RU", "Rusko"],
189 ["RW", "Rwanda"],
190 ["GR", "Řecko"],
191 ["PM", "Saint Pierre a Miquelon"],
192 ["SV", "Salvador"],
193 ["WS", "Samoa"],
194 ["SM", "San Marino"],
195 ["SA", "Saúdská Arábie"],
196 ["SN", "Senegal"],
197 ["MP", "Severní Mariany"],
198 ["SC", "Seychely"],
199 ["SL", "Sierra Leone"],
200 ["SG", "Singapur"],
201 ["SK", "Slovensko"],
202 ["SI", "Slovinsko"],
203 ["SO", "Somálsko"],
204 ["AE", "Spojené arabské emiráty"],
205 ["US", "Spojené státy"],
206 ["RS", "Srbsko"],
207 ["CF", "Středoafrická republika"],
208 ["SD", "Súdán"],
209 ["SR", "Surinam"],
210 ["SH", "Svatá Helena"],
211 ["LC", "Svatá Lucie"],
212 ["BL", "Svatý Bartoloměj"],
213 ["KN", "Svatý Kryštof a Nevis"],
214 ["MF", "Svatý Martin (FR)"],
215 ["SX", "Svatý Martin (NL)"],
216 ["ST", "Svatý Tomáš a Princův ostrov"],
217 ["VC", "Svatý Vincenc a Grenadiny"],
218 ["SZ", "Svazijsko"],
219 ["SY", "Sýrie"],
220 ["SB", "Šalomounovy ostrovy"],
221 ["ES", "Španělsko"],
222 ["SJ", "Špicberky a Jan Mayen"],
223 ["LK", "Šrí Lanka"],
224 ["SE", "Švédsko"],
225 ["CH", "Švýcarsko"],
226 ["TJ", "Tádžikistán"],
227 ["TZ", "Tanzanie"],
228 ["TH", "Thajsko"],
229 ["TW", "Tchaj-wan"],
230 ["TG", "Togo"],
231 ["TK", "Tokelau"],
232 ["TO", "Tonga"],
233 ["TT", "Trinidad a Tobago"],
234 ["TN", "Tunisko"],
235 ["TR", "Turecko"],
236 ["TM", "Turkmenistán"],
237 ["TC", "Turks a Caicos"],
238 ["TV", "Tuvalu"],
239 ["UG", "Uganda"],
240 ["UA", "Ukrajina"],
241 ["UY", "Uruguay"],
242 ["UZ", "Uzbekistán"],
243 ["CX", "Vánoční ostrov"],
244 ["VU", "Vanuatu"],
245 ["VA", "Vatikán"],
246 ["GB", "Velká Británie"],
247 ["VE", "Venezuela"],
248 ["VN", "Vietnam"],
249 ["TL", "Východní Timor"],
250 ["WF", "Wallis a Futuna"],
251 ["ZM", "Zambie"],
252 ["EH", "Západní Sahara"],
253 ["ZW", "Zimbabwe"]
254 ];
255 for (const index in countries) {
256 if (countries[index][0] === returnCountry) {
257 returnCountry = countries[index][1];
258 }
259 }
260 return returnCountry;
261}
262
263function generateKraj(source, index) {
264 let kraj = source[index]["kraj_nuts_kod"];
265 let nuts3 = [
266 ["CZ010", "Hlavní město Praha"],
267 ["CZ020", "Středočeský kraj"],
268 ["CZ031", "Jihočeský kraj"],
269 ["CZ032", "Plzeňský kraj"],
270 ["CZ041", "Karlovarský kraj"],
271 ["CZ042", "Ústecký kraj"],
272 ["CZ051", "Liberecký kraj"],
273 ["CZ052", "Královéhradecký kraj"],
274 ["CZ053", "Pardubický kraj"],
275 ["CZ063", "Kraj Vysočina"],
276 ["CZ064", "Jihomoravský kraj"],
277 ["CZ071", "Olomoucký kraj"],
278 ["CZ072", "Zlínský kraj"],
279 ["CZ080", "Moravskoslezský kraj"]
280 ];
281
282 for (const index in nuts3) {
283 if (nuts3[index][0] === kraj) {
284 kraj = nuts3[index][1];
285 }
286 }
287 return kraj;
288}
289
290function generateOkres(source, index) {
291 let okres = source[index]["okres_lau_kod"];
292 const okresyLAUkod = {
293 "CZ0100": "Praha",
294 "CZ0201": "Benešov",
295 "CZ0202": "Beroun",
296 "CZ0203": "Kladno",
297 "CZ0204": "Kolín",
298 "CZ0205": "Kutná Hora",
299 "CZ0206": "Mělník",
300 "CZ0207": "Mladá Boleslav",
301 "CZ0208": "Nymburk",
302 "CZ0209": "Praha-východ",
303 "CZ020A": "Praha-západ",
304 "CZ020B": "Příbram",
305 "CZ020C": "Rakovník",
306 "CZ0311": "České Budějovice",
307 "CZ0312": "Český Krumlov",
308 "CZ0313": "Jindřichův Hradec",
309 "CZ0314": "Písek",
310 "CZ0315": "Prachatice",
311 "CZ0316": "Strakonice",
312 "CZ0317": "Tábor",
313 "CZ0321": "Domažlice",
314 "CZ0322": "Klatovy",
315 "CZ0323": "Plzeň-město",
316 "CZ0324": "Plzeň-jih",
317 "CZ0325": "Plzeň-sever",
318 "CZ0326": "Rokycany",
319 "CZ0327": "Tachov",
320 "CZ0411": "Cheb",
321 "CZ0412": "Karlovy Vary",
322 "CZ0413": "Sokolov",
323 "CZ0421": "Děčín",
324 "CZ0422": "Chomutov",
325 "CZ0423": "Litoměřice",
326 "CZ0424": "Louny",
327 "CZ0425": "Most",
328 "CZ0426": "Teplice",
329 "CZ0427": "Ústí nad Labem",
330 "CZ0511": "Česká Lípa",
331 "CZ0512": "Jablonec nad Nisou",
332 "CZ0513": "Liberec",
333 "CZ0514": "Semily",
334 "CZ0521": "Hradec Králové",
335 "CZ0522": "Jičín",
336 "CZ0523": "Náchod",
337 "CZ0524": "Rychnov nad Kněžnou",
338 "CZ0525": "Trutnov",
339 "CZ0531": "Chrudim",
340 "CZ0532": "Pardubice",
341 "CZ0533": "Svitavy",
342 "CZ0534": "Ústí nad Orlicí",
343 "CZ0631": "Havlíčkův Brod",
344 "CZ0632": "Jihlava",
345 "CZ0633": "Pelhřimov",
346 "CZ0634": "Třebíč",
347 "CZ0635": "Žďár nad Sázavou",
348 "CZ0641": "Blansko",
349 "CZ0642": "Brno-město",
350 "CZ0643": "Brno-venkov",
351 "CZ0644": "Břeclav",
352 "CZ0645": "Hodonín",
353 "CZ0646": "Vyškov",
354 "CZ0647": "Znojmo",
355 "CZ0711": "Jeseník",
356 "CZ0712": "Olomouc",
357 "CZ0713": "Prostějov",
358 "CZ0714": "Přerov",
359 "CZ0715": "Šumperk",
360 "CZ0721": "Kroměříž",
361 "CZ0722": "Uherské Hradiště",
362 "CZ0723": "Vsetín",
363 "CZ0724": "Zlín",
364 "CZ0801": "Bruntál",
365 "CZ0802": "Frýdek-Místek",
366 "CZ0803": "Karviná",
367 "CZ0804": "Nový Jičín",
368 "CZ0805": "Opava",
369 "CZ0806": "Ostrava"
370 };
371
372 for (const kod in okresyLAUkod) {
373 if (okresyLAUkod.hasOwnProperty(kod)) {
374 const tempOkres = okresyLAUkod[kod];
375 if (kod === okres) {
376 okres = tempOkres;
377 }
378 }
379 }
380 return okres;
381}
382
383function parseData(sourceData) {
384
385 const source = sourceData.data;
386 const sourceUpdatedDate = new Date(sourceData.modified);
387 const sourceUpdatedISO = sourceUpdatedDate.toISOString();
388
389 let data = [];
390
391 for (const index in source) {
392
393 const reportedDate = source[index]["datum"];
394
395 let prepareData = [];
396
397 // console.log(source[index]);
398
399 // --- věk
400 //prepareData.Age = parseInt(source[index]["Vek"]);
401 prepareData[0] = parseInt(source[index]["vek"]);
402
403 let sex = source[index]["pohlavi"];
404 if (sex === "Z") {
405 sex = "žena";
406 }
407 if (sex === "M") {
408 sex = "muž";
409 }
410
411 // --- pohlaví
412 //prepareData.Sex = sex;
413 prepareData[1] = sex;
414
415 // --- zdroj nákazy
416 // prepareData.Src = "CZ";
417 //prepareData[2] = "CZ";
418 prepareData[2] = "Česko";
419
420 if (source[index]["nakaza_zeme_csu_kod"] !== "") {
421 //prepareData.Src = source[index]["ImportZemeCsuKod"];
422 prepareData[2] = generateCountryNames(source[index]["nakaza_zeme_csu_kod"]);
423 }
424
425 let kraj = generateKraj(source, index);
426
427 let okres = generateOkres(source, index);
428
429 // kraj hygiena
430 //prepareData.Rgn = kraj;
431 prepareData[3] = kraj;
432
433 // okres
434 prepareData[4] = okres;
435
436 // finální push
437 if (data[reportedDate] === undefined) {
438 data[reportedDate] = [];
439 }
440 data[reportedDate].push(prepareData);
441 }
442
443 // Ordered data
444
445 const ordered = {};
446 Object.keys(data).sort().forEach(function (key) {
447 ordered[key] = data[key];
448 });
449
450 // minify data
451 //data = JSON.parse(JSON.stringify(ordered));
452
453 data = ordered;
454
455 // And then save output
456 let output = {
457 data,
458 "lastUpdatedAtSource": sourceUpdatedDate,
459 "lastUpdatedAtApify": new Date(),
460 "readMe": "https://www.sablatura.info/covid/api",
461 //crawledAt: new Date(),
462 };
463
464 return output;
465}
466
467const Apify = require('apify');
468const request = require("request-promise");
469
470Apify.main(async () => {
471 // Get input of your actor
472 //const input = await Apify.getInput();
473 //console.log('My input:');
474 //console.dir(input);
475
476 const { keyValueStores } = Apify.client;
477
478 const { id: storeId } = await keyValueStores.getOrCreateStore({
479 storeName: 'COVID-CZ-hygiena-osoby'
480 });
481
482 Apify.client.setOptions({ storeId });
483
484 const apiURL = "https://onemocneni-aktualne.mzcr.cz/api/v2/covid-19/osoby.min.json";
485 const dataTemp = await request(apiURL);
486 const prepData = JSON.parse(dataTemp);
487 let output = parseData(prepData);
488
489 //output = JSON.stringify(output);
490 //console.log('My output:');
491 //console.dir(output);
492 await Apify.setValue('OUTPUT', output);
493
494 // Just pass the 'key' as the 'keyValueStores' already knows
495 // in what 'storeId' to look at.
496 const record = await keyValueStores.getRecord({ key: 'LATEST' });
497
498 // Check for empty 'STATE' records
499 const storeRecord = record && record.body ? record.body : {};
500
501 const previousState = typeof storeRecord === 'string' ?
502 JSON.parse(storeRecord) : storeRecord;
503
504 // It is a good practice to copy objects instead of
505 // overwriting them. Weird things can happen otherwise.
506 const nextState = Object.assign({}, previousState, output);
507
508 await keyValueStores.putRecord({
509 key: 'LATEST',
510 body: JSON.stringify(nextState),
511 });
512
513});
package.json
1{
2 "name": "covid-hygiena-osoby",
3 "version": "0.0.44",
4 "dependencies": {
5 "apify": "^0.20.2",
6 "request-promise":"4.2.5"
7 },
8 "scripts": {
9 "start": "node main.js"
10 },
11 "author": "Jan Šablatura"
12}
Developer
Maintained by Community
Categories