From 5cd0dd77a0a64a3de86c98e98e390c72d33549c3 Mon Sep 17 00:00:00 2001 From: Vaclav VESELY Date: Wed, 19 Feb 2025 15:29:59 +0100 Subject: [PATCH] Init --- Fetch.gs | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 Fetch.gs diff --git a/Fetch.gs b/Fetch.gs new file mode 100644 index 0000000..c9c7958 --- /dev/null +++ b/Fetch.gs @@ -0,0 +1,137 @@ +/* +* gets standardized czech company data from mfcr ares servers +* @param {string} subject ic +* @param {integer} index of the result if more than one found +* @return {string} standardized xml attribute +* +* http://wwwinfo.mfcr.cz/ares/ares_podminky.html.cz (max. 1000 requests / day; use cache service) +* +* ARES COMPANY +* http://wwwinfo.mfcr.cz/ares/ares_xml_or.html.cz +* http://wwwinfo.mfcr.cz/ares/ares_xml_standard.html.cz +* +*/ +function getAresCompanyData(subjectIc, returnParameter) { + + // check variable defined and set default if not + subjectIc = (subjectIc || "25334310"); //75914999, 27074358, 24297453, 62576836 + //returnParameter = (returnParameter || "Psc"); + returnParameter = (returnParameter || "Dic"); + + // standardize lowercase input + subjectIc = subjectIc.toLowerCase(); + // get address hash + var hashPrefix = "ARES,COMPANY,"; + var addressHash = Utilities.base64Encode(hashPrefix + subjectIc); + + // catch exception + try { + // cache handler + var urlContent = null; + var publicCache = CacheService.getPublicCache(); + //publicCache.remove(addressHash); + var cacheContent = publicCache.get(addressHash); + if (cacheContent != null) { + urlContent = cacheContent; + } else { + var urlResponse = UrlFetchApp.fetch(encodeURI("http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=" + subjectIc + "&rozsah=0&xml=0&stdadr=true")); + //var urlResponse = UrlFetchApp.fetch(encodeURI("http://icanhazip.com/")); //get public ip address + var urlResponseCode = urlResponse.getResponseCode(); + var urlContent = urlResponse.getContentText(); + + // override + //var xmlFileContent = DocsList.getFileById("0BxFmaCpVqO38S3l6NXJtdzBINW8").getContentAsString(); + //var urlContent = xmlFileContent; + + // cache for one day + publicCache.put(addressHash, urlContent, 86400); + } + } catch(e) { + Logger.log("# ERROR; can not get source url content "+"[ "+e+" ]"); + throw "nelze získat data ze zdrojové adresy"; + return false; + } + + // catch exception + try { + // parse xml + var parsedXml = Xml.parse(urlContent, false); + + // define namespaces + var xmlNsOdpoved = "http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_answer_basic/v_1.0.3"; + var xmlNsStdadr = "http://wwwinfo.mfcr.cz/ares/xml_doc/schemas/ares/ares_datatypes/v_1.0.3"; + + //get common root element + //var xmlElementVbas = rootXmlElement.getElement("Odpoved").getElement("VBAS"); + + //get root elements + var rootXmlElement = parsedXml.getElement(); + var xmlElementVbas = rootXmlElement.getElements(xmlNsOdpoved, "Odpoved")[0].getElements(xmlNsStdadr, "VBAS")[0]; + + } catch(e) { + Logger.log("# ERROR; can not parse root xml elements"+"[ "+e+" ]"); + throw "nelze rozpoznat kořenové elementy xml"; + return false; + } + + // catch exception + //try { + // // get ares preformated address + // var preformatedAddress = xmlElementVbas.AA.NU.Text + " " + xmlElementVbas.AA.CD.Text + "/" + xmlElementVbas.AA.CO.Text + ", " + xmlElementVbas.AA.PSC.Text + " " + xmlElementVbas.AA.N.Text + ", " + xmlElementVbas.AA.NS.Text; + // // get geocoder result + // var geoArray = getGeocoderStandardAddress(preformatedAddress, 0); + //} catch(e) { + // Logger.log("# ERROR; can not parse geocoder values"+"[ "+e+" ]"); + // throw "nelze rozpoznat hodnoty geokodéru"; + // return false; + //} + + // catch exception + try { + // structure data returns + switch(returnParameter) { + case "Dic" : + if ("DIC" in xmlElementVbas) { + return xmlElementVbas.DIC.Text; + } else { + return false; + } + case "JePlatceDph" : + if ("DIC" in xmlElementVbas) { + return true; + } else { + return false; + } + case "KodPravForma" : return xmlElementVbas.PF.KPF.Text; + //case "NazPravForma" : return xmlElementVbas.PF.NPF.Text; + case "ObchFirma" : return xmlElementVbas.OF.Text; + case "NazUlice" : return xmlElementVbas.AA.NU.Text; + case "CisDomov" : return xmlElementVbas.AA.CD.Text; + case "CisOrient" : + if ("CO" in xmlElementVbas.AA) { + return xmlElementVbas.AA.CO.Text; + } else { + return xmlElementVbas.AA.CA.Text; + } + case "Psc" : return xmlElementVbas.AA.PSC.Text; + case "NazObce" : return xmlElementVbas.AA.N.Text; + //case "Aktivni" : return xmlElementVbas.ROR.SOR.SSU.Text; + //case "MestCastObvod" : + // if (geoArray["sublocality"] == xmlElementVbas.AA.N.Text) { + // return ""; + // } else { + // //return geoArray["sublocality"].split(" ")[1]; + // return geoArray["sublocality"]; + // } + //case "NazZeme" : return xmlElementVbas.AA.NS.Text; + //case "KodZeme" : return geoArray["country"]; + case "SpisZnac" : return xmlElementVbas.ROR.SZ.SD.T.Text + ";" + xmlElementVbas.ROR.SZ.OV.Text; + //case "GpsSour" : return geoArray["lat"] + "," + geoArray["lng"]; + case "GeoAdresa" : return xmlElementVbas.AA.NU.Text + " " + xmlElementVbas.AA.CD.Text + ", " + xmlElementVbas.AA.PSC.Text + " " + xmlElementVbas.AA.N.Text; + } + } catch(e) { + //Logger.log("# ERROR; can not parse xml "+"[ "+e+" ]"); + //throw "nelze rozpoznat xml"; + return ""; + } +} \ No newline at end of file