COVID-19 Czech Individuals Data (cs_CZ) avatar
COVID-19 Czech Individuals Data (cs_CZ)
Deprecated
View all Actors
This Actor is deprecated

This Actor is unavailable because the developer has decided to deprecate it. Would you like to try a similar Actor instead?

See alternative Actors
COVID-19 Czech Individuals Data (cs_CZ)

COVID-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